<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://ukikipedia.net/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Pannenkoek2012</id>
	<title>Ukikipedia - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://ukikipedia.net/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Pannenkoek2012"/>
	<link rel="alternate" type="text/html" href="https://ukikipedia.net/wiki/Special:Contributions/Pannenkoek2012"/>
	<updated>2026-09-30T04:06:00Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.15</generator>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=Unsolved_single-goal_challenges&amp;diff=19756</id>
		<title>Unsolved single-goal challenges</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=Unsolved_single-goal_challenges&amp;diff=19756"/>
		<updated>2025-08-28T08:34:46Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: Added challenge for grabbing Bowser as he hits a mine.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists &#039;&#039;&#039;unsolved single-goal challenges&#039;&#039;&#039; that are not currently possible with current knowledge and strategies. None of these challenges have been completed or solved.&lt;br /&gt;
==Unsolved==&lt;br /&gt;
===Coin Count===&lt;br /&gt;
*Getting more coins than intended in:&lt;br /&gt;
**[[Jolly Roger Bay]] (depending on the strat this could also save a [[Z Button Challenge|Z press]])&lt;br /&gt;
**[[Cool, Cool Mountain]]&lt;br /&gt;
**[[Big Boo&#039;s Haunt]]&lt;br /&gt;
**[[Hazy Maze Cave]]&lt;br /&gt;
**[[Lethal Lava Land]]&lt;br /&gt;
*Getting infinite coins in:&lt;br /&gt;
**[[Bowser in the Fire Sea]]&lt;br /&gt;
**[[Tick Tock Clock]]&lt;br /&gt;
**[[Rainbow Ride]]&lt;br /&gt;
===Cloning Related===&lt;br /&gt;
*Transport cloning with [[Wiggler]] or a Skeeter&lt;br /&gt;
*Cloning in Lethal Lava Land (could also potentially solve the getting more coins than intended)&lt;br /&gt;
*Moving during [[Time Stop|time stop]] in Jolly Roger Bay (to get [[shell]] [[clone]]s)&lt;br /&gt;
===Collection Challenges===&lt;br /&gt;
*Collecting the [[Key|key]] in Bowser in the Fire Sea from underneath the ground, causing you to collect the key on the death floor&lt;br /&gt;
*Collecting a [[Star|star]] during a demo sequence&lt;br /&gt;
*Collecting [[Mystery of the Monkey Cage]] without changing the [[HOLP]] for an arbitrary HOLP&lt;br /&gt;
*Collecting the new [[Impossible Coin]] in [[Tiny Huge Island]]&lt;br /&gt;
*Killing the [[Mystery Goomba]] and collecting its [[Coin|coin]]&lt;br /&gt;
===Parallel Universes===&lt;br /&gt;
*Dying in a vertical [[PU]] in LLL&lt;br /&gt;
*Surviving in a vertical PU with a shell clone released in it&lt;br /&gt;
*Reaching a PU without using joystick&lt;br /&gt;
*Reaching a PU in any of the following:&lt;br /&gt;
**[[Cool, Cool Mountain]]&lt;br /&gt;
***Main level&lt;br /&gt;
***Slide&lt;br /&gt;
**[[Lethal Lava Land]] unreached areas&lt;br /&gt;
***Main level&lt;br /&gt;
**[[Shifting Sand Land]] unreached areas&lt;br /&gt;
***Eyerok area (note that this is a different area than the rest of the pyramid)&lt;br /&gt;
**[[Dire Dire Docks]] unreached areas&lt;br /&gt;
***Starting area&lt;br /&gt;
**[[Snowman&#039;s Land]] unreached areas&lt;br /&gt;
***Igloo&lt;br /&gt;
** [[Tall, Tall Mountain]]&lt;br /&gt;
***Main level&lt;br /&gt;
***Slide (top subarea)&lt;br /&gt;
***Slide (medium subarea) &lt;br /&gt;
***Slide (bottom subarea)&lt;br /&gt;
**[[Tiny Huge Island]]&lt;br /&gt;
***Tiny island&lt;br /&gt;
***Huge island&lt;br /&gt;
***Cave&lt;br /&gt;
**[[Tick Tock Clock]]&lt;br /&gt;
**[[Tower of the Wing Cap]]&lt;br /&gt;
**[[Cavern of the Metal Cap]]&lt;br /&gt;
**[[The Princess&#039;s Secret Slide]]&lt;br /&gt;
**[[Secret Aquarium]]&lt;br /&gt;
**[[Wing Mario over the Rainbow]]&lt;br /&gt;
**[[Bowser in the Dark World]]&lt;br /&gt;
***Main area&lt;br /&gt;
***Bowser fight&lt;br /&gt;
**[[Bowser in the Fire Sea]] unreached areas&lt;br /&gt;
***Bowser fight&lt;br /&gt;
**[[Bowser in the Sky]]&lt;br /&gt;
***Main area&lt;br /&gt;
***Bowser fight&lt;br /&gt;
**[[The Castle|Castle]] unreached areas&lt;br /&gt;
***[[The Castle#Basement|Castle Basement]]&lt;br /&gt;
***[[The Castle#Second Floor|Castle Upstairs]]&lt;br /&gt;
***[[The Castle#Courtyard|Castle Courtyard]]&lt;br /&gt;
&lt;br /&gt;
===Misc===&lt;br /&gt;
*Clipping from the top area of Wiggler&#039;s cave to the bottom area.&lt;br /&gt;
*Activating more than 4 stars at once anywhere&lt;br /&gt;
*Reversing the one-way teleport in THI &lt;br /&gt;
*Ground-pounding [[Chain Chomp]]&#039;s post without interacting with the [[Red Coin|red coin]] (e.g. collecting its two coin value)&lt;br /&gt;
*Grabbing the hangable ceiling on the bottom of the beginning cloud in [[Wing Mario over the Rainbow]]&lt;br /&gt;
*Hanging below the entrance&#039;s bridge in the castle grounds with the water raised&lt;br /&gt;
*Accessing the upper floors of the castle without first collecting the key from Bowser in the Fire Sea&lt;br /&gt;
*Grabbing the wrong penguin without pressing B (it looks easy, but that penguin doesn&#039;t walk off the roof to go to the wind, the wind is a bit too far from the roof, and the cannons don&#039;t point at him (the cannon next to him doesn&#039;t let you shoot at the right angle (you cannot rotate the cannon 360°), and cannons both from the wall kicks will work area, and above it, are a little behind the walls)&lt;br /&gt;
*Defeating Bowser in the Sky without spinning Bowser&lt;br /&gt;
*Grabbing Bowser on the same frame he hits a mine. The mine would explode and hurt Bowser, but he would stay alive due to being grabbed.&lt;br /&gt;
*Performing an [[instant release]] on [[MIPS]] at an arbitrary HOLP&lt;br /&gt;
*Spawning a &amp;quot;8&amp;quot; orange number from a red coin, secret, treasure chest or water ring&lt;br /&gt;
*Spawning a &amp;quot;9&amp;quot; orange number from a red coin, secret, treasure chest or water ring&lt;br /&gt;
*Spawning a &amp;quot;0&amp;quot; orange number from a red coin, secret, treasure chest or water ring&lt;br /&gt;
*Getting hurt (squished) by the penguin in CCM&lt;br /&gt;
*Taking fall damage during the FLYING_TRIPLE_JUMP action&lt;br /&gt;
*Causing Mario to walk in a way that the camera focus stays constant&lt;br /&gt;
*Entering [[WDW]] on the medium or high water level without pressing A&lt;br /&gt;
*Entering the large [[THI]] painting without pressing A&lt;br /&gt;
&lt;br /&gt;
==Solved In Theory==&lt;br /&gt;
*Grabbing a [[Bob-omb]] fake during boiling (The video provided uses certain hacked values and is Wii VC only).&lt;br /&gt;
:*https://youtu.be/rS4KsVGbjaA&lt;br /&gt;
*Escaping from a PU starting from speed 0 (The video provided was done on an emulator and likely crashes on console).&lt;br /&gt;
:*[https://www.youtube.com/watch?v=3Jxi7Ruoj34 &amp;quot;SM64 Going to a PU (and Back Again)&amp;quot; by Chris Dusto]&lt;br /&gt;
==Solved Single-Goal Challenges==&lt;br /&gt;
*Picking up the cannon Bob-omb on the same frame as leaving its radius&lt;br /&gt;
:*[https://youtu.be/uFuC5DcbsjU &amp;lt;nowiki&amp;gt;&amp;quot;BoB Relocating the Stationary Bob-omb&amp;quot; by UncommentatedPannen&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
*Putting the Ukiki that steals your hat on the monkey cage&lt;br /&gt;
:*[https://youtu.be/oErcSAAwy4U &amp;lt;nowiki&amp;gt;&amp;quot;Completing the IMPOSSIBLE Ukiki Challenge (impossible challenge)&amp;quot; by bad_boot&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
*Collecting Mystery of the Monkey Cage without changing the HOLP&lt;br /&gt;
:*[https://youtu.be/UhchV2Kr_ig &amp;lt;nowiki&amp;gt;&amp;quot;SM64 - Mystery of the Monkey Cage Without Updating HOLP*&amp;quot; by ds273&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
*Collecting [[Li&#039;l Penguin Lost]] without changing the HOLP&lt;br /&gt;
:*[[Media:Lil_penguin_holpless.mp4]]&lt;br /&gt;
*Collecting [[Blast Away the Wall]] without using the cannon, ledge grabbing, or using time stop&lt;br /&gt;
:*[https://youtu.be/0fnJgawiI6I &amp;lt;nowiki&amp;gt;&amp;quot;[TAS] Super Mario 64: Collecting &#039;Blast Away The Wall&#039; Cannonless, Without Ledgegrabs Or Time Stop&amp;quot; by Superdavo0001&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
*Grabbing [[Ukiki]] without pressing B (useful for the [[B Button Challenge]])&lt;br /&gt;
:*[https://youtu.be/cNCYo-STMG4 &amp;lt;nowiki&amp;gt;&amp;quot;[TAS] SM64: Mystery of the Monkey Cage 0xB (Unabridged) by Nim and Pannenkoek2012&amp;quot; by Hello, my name is nim&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
* Performing a transport clone with 4 simultaneous pushers&lt;br /&gt;
:*[https://youtu.be/ksL_eFRM4CA &amp;lt;nowiki&amp;gt;&amp;quot;Transport Clone with 5 Goombas&amp;quot; by UncommentatedPannen&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
*Collecting the red coin in [[Bowser in the Dark World]] at the start without using the ! Switch and living&lt;br /&gt;
:*[https://youtu.be/RYSA-A6Y78U &amp;lt;nowiki&amp;gt;&amp;quot;[TAS] SM64 - BitDW Start Red Switchless (and without dying)&amp;quot; by PaLiX _&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
*Collecting [[1-Up Mushroom#The Impossible 1-up|the Impossible 1-up]] in Cool, Cool Mountain without dying&lt;br /&gt;
:*[https://youtu.be/R-IVI82l6kU &amp;lt;nowiki&amp;gt;&amp;quot;[TAS] SM64 - CCM 2nd Slide 1up Without Dying&amp;quot; by PaLiX _&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
*Ground-pounding Wiggler&#039;s cave and then going to the huge island before the water finishes draining (this preserves the lower water level and allows a second ground-pound to trigger it again)&lt;br /&gt;
:*[[Media:H.mp4|Video file]]&lt;br /&gt;
*Escaping from one of the fish tanks in the Jolly Roger Bay room in the castle (starting with zero [[Speed|speed]] and damage counter)&lt;br /&gt;
:*[https://youtu.be/kyX-oJKld6k &amp;lt;nowiki&amp;gt;&amp;quot;[TAS] SM64 - Escaping Both JRB Fish Tanks Via HSWK&amp;quot; by PaLiX _&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
*Crashing the game by going out of bounds in [[Tall, Tall Mountain]]&lt;br /&gt;
:*[https://youtu.be/oUhFf71JGKU &amp;lt;nowiki&amp;gt;&amp;quot;Game Crash from Going Out of Bounds in TTM&amp;quot; by UncommentatedPannen&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
*Clipping from the bottom area of Wiggler&#039;s cave to the top area.&lt;br /&gt;
:*[https://youtu.be/yj0whxJOVgw &amp;lt;nowiki&amp;gt;&amp;quot;[TAS] SM64 - Misc Challenges&amp;quot; by PaLiX _&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
*Reaching PU inside of the pyramid in [[Shifting Sand Land]]&lt;br /&gt;
:*[https://youtu.be/yj0whxJOVgw?t=30s &amp;lt;nowiki&amp;gt;&amp;quot;[TAS] SM64 - Misc Challenges&amp;quot; by PaLiX _&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
*Ground-pounding the [[Blue Coin]] block in [[SSL]] without pressing A&lt;br /&gt;
:*[https://youtu.be/yj0whxJOVgw?t=44s &amp;lt;nowiki&amp;gt;&amp;quot;[TAS] SM64 - Misc Challenges&amp;quot; by PaLiX _&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
*[[Hyperspeed Wall Kicks|Hyperspeed Wall Kick]] between towers in [[Tower of the Wing Cap]]&lt;br /&gt;
:*[https://youtu.be/yj0whxJOVgw?t=2m15s &amp;lt;nowiki&amp;gt;&amp;quot;[TAS] SM64 - Misc Challenges&amp;quot; by PaLiX _&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
*Leaving the [[Eyerok]] boss room after defeating Eyerok&lt;br /&gt;
:*[https://youtu.be/bqrCBYJ4dUM &amp;lt;nowiki&amp;gt;&amp;quot;leaving the boss room after defeating eyerock&amp;quot; by lasplatte&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
*Causing a game crash by going out of bounds in the [[Cavern of the Metal Cap]] entry room&lt;br /&gt;
:*[https://youtu.be/VO0HLVIzzek &amp;lt;nowiki&amp;gt;&amp;quot;CotMC Painting Room Null Floor Crash&amp;quot; by supermarble94&amp;lt;/nowiki&amp;gt;]&lt;br /&gt;
*Grabbing the hat stealing Ukiki without pressing B&lt;br /&gt;
:*[https://www.youtube.com/watch?v=Sn5UM9MdkBY &amp;quot;SM64: Grabbing the Cap Ukiki without B&amp;quot; by nim]&lt;br /&gt;
*Entering a PU in the Jolly Roger Bay ship sub-area&lt;br /&gt;
:*[https://www.youtube.com/watch?v=EBoG9e4s8sk &amp;quot;Accessing a Parallel Universe in the Jolly Roger Bay Sunken Ship&amp;quot; by Daniel R]&lt;br /&gt;
&lt;br /&gt;
===Impossible Challenges===&lt;br /&gt;
*Having Mario stand on a rotating platform, facing inwards, such that the camera focus doesn&#039;t move&lt;br /&gt;
**Impossible since the focus always moves in an ellipse (/straight line): [[Media:WDW Rotating Platform.mp4|WDW_Rotating_Platform.mp4]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
[[Category:Challenges]]&lt;br /&gt;
{{Challenges}}&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=Unsolved_single-goal_challenges&amp;diff=17829</id>
		<title>Unsolved single-goal challenges</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=Unsolved_single-goal_challenges&amp;diff=17829"/>
		<updated>2023-03-12T22:01:59Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: Added &amp;quot;Ground-pounding Wiggler&amp;#039;s cave and then going to the huge island before the water finishes draining (this preserves the lower water level and allows a second ground-pound to trigger it again)&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists &#039;&#039;&#039;unsolved single-goal challenges&#039;&#039;&#039; that are not currently possible with current knowledge and strategies. None of these challenges have been completed or solved.&lt;br /&gt;
==Unsolved==&lt;br /&gt;
===Coin Count===&lt;br /&gt;
*Getting more coins than intended in [[Cool, Cool Mountain]]&lt;br /&gt;
*Getting more coins than intended in [[Hazy Maze Cave]]&lt;br /&gt;
*Getting more coins than intended in [[Big Boo&#039;s Haunt]]&lt;br /&gt;
*Getting more coins than intended in [[Jolly Roger Bay]]&lt;br /&gt;
*Getting more coins than intended in [[Lethal Lava Land]]&lt;br /&gt;
*Getting infinite coins in [[Bowser in the Fire Sea]]&lt;br /&gt;
*Getting infinite coins in [[Tick Tock Clock]]&lt;br /&gt;
*Getting infinite coins in [[Rainbow Ride]]&lt;br /&gt;
===Cloning Related===&lt;br /&gt;
*Transport cloning with [[Wiggler]] or a Skeeter&lt;br /&gt;
*Cloning in Lethal Lava Land&lt;br /&gt;
*Moving during [[Time Stop|time stop]] in Jolly Roger Bay (to get [[shell]] [[clone]]s)&lt;br /&gt;
===Collection Challenges===&lt;br /&gt;
*Collecting the [[Key|key]] in Bowser in the Fire Sea from underneath the ground, causing you to collect the key on the death floor&lt;br /&gt;
*Collecting a [[Star|star]] during a demo sequence&lt;br /&gt;
*Collecting [[Mystery of the Monkey Cage]] without changing the [[HOLP]] for an arbitrary HOLP&lt;br /&gt;
*Collecting the new [[Impossible Coin]] in [[Tiny Huge Island]]&lt;br /&gt;
*Killing the [[Mystery Goomba]] and collecting its [[Coin|coin]]&lt;br /&gt;
===Parallel Universes===&lt;br /&gt;
*Vertical [[PU]] death in LLL&lt;br /&gt;
*Reach a PU in any of the following:&lt;br /&gt;
**[[Cool, Cool Mountain]] (Main level)&lt;br /&gt;
** [[Cool, Cool Mountain]] (Slide)&lt;br /&gt;
** [[Jolly Roger Bay]] (Ship Subarea)&lt;br /&gt;
** [[Shifting Sand Land]] (Inside the pyramid)&lt;br /&gt;
** [[Tall, Tall Mountain]] (Main level)&lt;br /&gt;
** [[Tall, Tall Mountain]] (Slide)&lt;br /&gt;
** [[Tick Tock Clock]]&lt;br /&gt;
** [[Tower of the Wing Cap]]&lt;br /&gt;
** [[Cavern of the Metal Cap]]&lt;br /&gt;
** [[The Princess&#039;s Secret Slide]]&lt;br /&gt;
** [[Secret Aquarium]]&lt;br /&gt;
** [[Wing Mario over the Rainbow]]&lt;br /&gt;
** [[Bowser in the Dark World]]&lt;br /&gt;
** [[The Castle#Basement|Castle Basement]]&lt;br /&gt;
** [[The Castle#Second Floor|Castle Upstairs]]&lt;br /&gt;
** [[The Castle#Courtyard|Castle Courtyard]]&lt;br /&gt;
** Any Bowser fight&lt;br /&gt;
===Misc===&lt;br /&gt;
*Clipping from the bottom area of Wiggler&#039;s cave to the top area, or vice versa&lt;br /&gt;
*[[Hyperspeed Wall Kicks|Hyperspeed Wall Kick]] between towers in [[Tower of the Wing Cap]]&lt;br /&gt;
*Surviving in a vertical PU with a shell clone released in it&lt;br /&gt;
*Activating more than 4 stars at once anywhere&lt;br /&gt;
*Reversing the one-way teleport in THI &lt;br /&gt;
*Ground-pounding [[Chain Chomp]]&#039;s post without interacting with the [[Red Coin|red coin]] (e.g. collecting its two coin value)&lt;br /&gt;
*Escaping from one of the fish tanks in the Jolly Roger Bay room in the castle (starting with zero [[Speed|speed]] and damage counter)&lt;br /&gt;
*Grabbing the hangable ceiling on the bottom of the beginning cloud in [[Wing Mario over the Rainbow]]&lt;br /&gt;
*Causing a game crash by going out of bounds in the [[Cavern of the Metal Cap]] entry room or in [[Tall, Tall Mountain]]&lt;br /&gt;
*Accessing the upper floors of the castle without first collecting the key from Bowser in the Fire Sea&lt;br /&gt;
*Defeating Bowser in the Sky without spinning [[Bowser]]&lt;br /&gt;
*Performing an [[instant release]] on [[MIPS]] at an arbitrary HOLP&lt;br /&gt;
*Ground-pounding the [[Blue Coin]] block in [[SSL]] without pressing A&lt;br /&gt;
*Ground-pounding Wiggler&#039;s cave and then going to the huge island before the water finishes draining (this preserves the lower water level and allows a second ground-pound to trigger it again)&lt;br /&gt;
==Solved In Theory==&lt;br /&gt;
*Grab a [[Bob-omb]] fake during boiling (The video provided uses certain hacked values and is Wii VC only).&lt;br /&gt;
:*https://youtu.be/rS4KsVGbjaA&lt;br /&gt;
==Solved Single-Goal Challenges==&lt;br /&gt;
*Picking up the cannon Bob-omb on the same frame as leaving its radius&lt;br /&gt;
:*https://youtu.be/uFuC5DcbsjU&lt;br /&gt;
*Putting the Ukiki that steals your hat on the monkey cage&lt;br /&gt;
:*https://www.youtube.com/watch?v=oErcSAAwy4U&lt;br /&gt;
*Collecting Mystery of the Monkey Cage without changing the HOLP&lt;br /&gt;
:*https://youtu.be/UhchV2Kr_ig&lt;br /&gt;
*Collecting [[Li&#039;l Penguin Lost]] without changing the HOLP&lt;br /&gt;
:*https://cdn.discordapp.com/attachments/459907626189324298/631209043175669771/lil_penguin_holpless.mp4&lt;br /&gt;
*Collecting [[Blast Away the Wall]] without using the cannon, ledge grabbing, or using time stop&lt;br /&gt;
:*https://youtu.be/0fnJgawiI6I&lt;br /&gt;
*Grabbing [[Ukiki]] without pressing B (useful for the [[B Button Challenge]])&lt;br /&gt;
:*https://youtu.be/cNCYo-STMG4&lt;br /&gt;
* Performing a transport clone with 4 simultaneous pushers&lt;br /&gt;
:* https://www.youtube.com/watch?v=ksL_eFRM4CA&lt;br /&gt;
*Collecting the red coin in [[Bowser in the Dark World]] at the start without using the ! Switch and living&lt;br /&gt;
:*https://youtu.be/RYSA-A6Y78U&lt;br /&gt;
*Collecting [[1-Up Mushroom#The Impossible 1-up|the Impossible 1-up]] in Cool, Cool Mountain without dying&lt;br /&gt;
:*https://youtu.be/R-IVI82l6kU&lt;br /&gt;
[[Category: Challenges]]&lt;br /&gt;
{{Challenges}}&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=Crash&amp;diff=17129</id>
		<title>Crash</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=Crash&amp;diff=17129"/>
		<updated>2022-09-22T18:12:17Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* CPU Crashes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &#039;&#039;&#039;Crash&#039;&#039;&#039;, &#039;&#039;&#039;Freeze&#039;&#039;&#039;, or &#039;&#039;&#039;Hardlock&#039;&#039;&#039; is when the [[Threads#Game Thread|game thread]] of SM64 stops executing instructions (as opposed to a [[Softlock|softlock]], where the game is still running as normal but is stuck in a loop without any way to get out). Crashes can occur in several different ways, such as a game thread exception or an [[RCP]] (graphics) crash.&lt;br /&gt;
==CPU Crashes==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Cause !! Exception Type !! Notes&lt;br /&gt;
|-&lt;br /&gt;
| Exceed the [[Objects#Object limit|object limit]] || style=&amp;quot;background-color: #ffb65e&amp;quot;| N/A || This is technically not a crash as the game developers accounted for this scenario and made the game enter an infinite loop. However, this infinite loop has the same symptoms as a crash and is one for all practical purposes, so it is included here. This &amp;quot;crash&amp;quot; can be done via a variety of methods including cloning, hat duplication, monty-mole pellet build-up, or money-bag duplication.&lt;br /&gt;
|-&lt;br /&gt;
| Sending the camera into a [[Parallel Universe|PU]]|| style=&amp;quot;background-color: #ff9696&amp;quot; | Floating-Point Overflow ||&lt;br /&gt;
|-&lt;br /&gt;
| Walking at PU speed for only a portion of the 4 quarter steps on a [[frame]] ||  style=&amp;quot;background-color: #ff9696&amp;quot;| Floating-Point Overflow ||&lt;br /&gt;
|-&lt;br /&gt;
| Moving at PU speed with no joystick input for all 4 quarter steps on a frame ||  style=&amp;quot;background-color: #ff9696&amp;quot;| Floating-Point Overflow ||&lt;br /&gt;
|-&lt;br /&gt;
| Moving 16384 distance into a wall (Often a PU Crash) ||  style=&amp;quot;background-color: #ff9696&amp;quot;| Floating-Point Overflow ||&lt;br /&gt;
|-&lt;br /&gt;
| Walking with a speed greater than or equal to 2^31 / 170 (~12.632M) || style=&amp;quot;background-color: #ff9696&amp;quot;| Floating-Point Overflow || Mario&#039;s speed is multiplied by 170 in some intermediate calculations and casted to an int. When this cast exceeds 2^31 an FPE occurs.&lt;br /&gt;
|-&lt;br /&gt;
| Turning during a walking action such that speed times change in yaw is greater than or equal to 2^31 * 12 (~12.583M with dyaw = 2048) || style=&amp;quot;background-color: #ff9696&amp;quot;| Floating-Point Overflow || Similar to the above.&lt;br /&gt;
|-&lt;br /&gt;
| Bully Knockback Division-by-Zero || style=&amp;quot;background-color: #ff9696&amp;quot;| Floating-Point Division-by-Zero || By positioning Mario at the exact same X and Z coordinates as the bully, a division-by-zero exception occurs when the game divides by the lateral distance between Mario and the bully to calculate Mario and the bully&#039;s new speed after the collision.&amp;lt;ref&amp;gt;[https://www.youtube.com/watch?v=8jd3A2euOjg &amp;quot;Game Crash from Bully Knockback DIV/0&amp;quot; by UncommentatedPannen]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Bully/Bob-omb Angle Overflow || style=&amp;quot;background-color: #ff9696&amp;quot;| Floating-Point Overflow || When a Bully or Bob-omb is out-of-bounds, the code to keep their angle between -32768 and 32767 doesn&#039;t run, and eventually it becomes big enough that a floating-point overflow exception occurs when casted back to an int.&amp;lt;ref&amp;gt;[https://www.youtube.com/watch?v=ZrMxO1eZPGU &amp;quot;Game Crash from Bully Angle Double-to-Int Conversion&amp;quot; by UncommentatedPannen]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://www.youtube.com/watch?v=kwQu5qQg-M0 &amp;quot;Game Crash from Bob-omb Angle Double-to-Int Conversion&amp;quot; by UncommentatedPannen]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Deleting a non-existent file on the File Select Screen&amp;lt;ref&amp;gt;[https://youtu.be/-N5OQPgA6YI &amp;quot;How to crash Super Mario 64 in 20 seconds&amp;quot; by rattleman123456]&amp;lt;/ref&amp;gt; ||  style=&amp;quot;background-color: #fffca8&amp;quot;| Address Error || The game tries to find the button object corresponding to the file and set its state to erased. However, the button object doesn&#039;t exist (a New File button is there instead), so it ends up trying to write to NULL.&lt;br /&gt;
|-&lt;br /&gt;
| Moving a shadow above [[surface]] 12 while it&#039;s over OOB || style=&amp;quot;background-color: #fffca8&amp;quot;| Address Error || The surface SURFACE_INTANGIBLE (surface 12) has the special property that in some cases find_floor will look for floors below an intangible surface if it finds one. If there&#039;s no floor below the intangible surface, find_floor will return NULL for the found floor but the height of the intangible floor. As floors are null-checked by checking if their height is the default value of -11000, this will cause a NULL dereference the next time the game tries to use the floor variable.&lt;br /&gt;
|-&lt;br /&gt;
| Killing a Monty Mole remotely || style=&amp;quot;background-color: #fffca8&amp;quot;| Address Error || The game tries to find which hole the Monty Mole should spawn in, but all the available holes are too far away from Mario, so no hole is chosen and the Monty Mole tries to go to a null hole.&amp;lt;ref&amp;gt;[https://www.youtube.com/watch?v=P4AQ9AmWa9s &amp;quot;Long Range Monty Mole Kill Game Crash&amp;quot; by UncommentatedPannen]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Killing an uninitialized Monty Mole&amp;lt;ref&amp;gt;[https://www.youtube.com/watch?v=aafLNwyR5kk &amp;quot;Uninitialized Monty Moles&amp;quot; by UncommentatedPannen]&amp;lt;/ref&amp;gt; || style=&amp;quot;background-color: #fffca8&amp;quot;| Address Error || Similar to above.&lt;br /&gt;
|-&lt;br /&gt;
| Going out of bounds in a room with a painting || style=&amp;quot;background-color: #fffca8&amp;quot;| Address Error || Paintings use the floor type of Mario&#039;s floor to decide how they should ripple. Going out-of-bounds causes them to try to read the floor type of null.&lt;br /&gt;
|-&lt;br /&gt;
| Being pushed off of a hangable [[ceiling]] while hanging and stationary without another ceiling above || style=&amp;quot;background-color: #fffca8&amp;quot;| Address Error || The game has a check to make Mario enter freefall if the ceiling above him is not hangable. The programmers failed to account for the ceiling being NULL, so if Mario is pushed off the ceiling and has no ceiling above him the game will try to read the type of a null ceiling and crash.&lt;br /&gt;
|-&lt;br /&gt;
| Sound glitch || Unknown || &amp;quot;Sound glitch&amp;quot; refers to when the audio thread encounters an exception (usually an address error exception), therefore causing the sound to cut out. When the game thread next tries to interface with the audio thread on a level load, the game thread crashes as well. Sound glitch is often treated as one singular glitch even though it is really a class of glitches in the audio library. Sound glitches are usually J-exclusive, however some instances such as the [[BitS]] sound glitch are not.&lt;br /&gt;
|-&lt;br /&gt;
| Teleporting while passing over a loading zone || style=&amp;quot;background-color: #fffca8&amp;quot;| Address Error || Since the area changed, there is now no teleporter with the same ID as the one Mario used to warp. Thus the game returns NULL when trying to find the teleporter to warp to, and crashes when trying to access information about its destination. Under certain conditions, this can cause a Wrong Warp on PAL or Shindou VC.&lt;br /&gt;
|-&lt;br /&gt;
| Warping out of a level while passing over a loading zone ||  style=&amp;quot;background-color: #fffca8&amp;quot;| Address Error || Similar to above, but only hypothetical. Maybe possible in DDD using the Sub Gate warp and whirlpool cloning to reach the instant loading zone, but not yet achieved without hacks.&lt;br /&gt;
|-&lt;br /&gt;
| Entering Wiggler&#039;s Cave on the Disk Drive version || style=&amp;quot;background-color: #ff9696&amp;quot;| Floating-Point Unimplemented Operation || When Wiggler is initialized, his health value is 1024 for a single frame before being reset to 3. Wiggler uses his health to index into a table to get his speed (to move faster when at lower health); 1024 causes it to index out of range and read a denormalized floating-point number as his health, which causes an unimplemented operation exception since the N64 does not implement any operations on denormalized floats except comparisons.&lt;br /&gt;
|-&lt;br /&gt;
| Having an object too far away from the camera make a noise (JP only)&lt;br /&gt;
| style=&amp;quot;background-color: #ff9696&amp;quot; | Floating-Point Unimplemented Operation&lt;br /&gt;
|When a noise&#039;s pan is determined, it uses the position of the object to calculate the pan. When the object&#039;s absolute z-position relative to the camera is large (&amp;gt;= 22000 units) and the x-position relative to the camera is very negative (&amp;lt; -66000), an index for the pan will be generated outside of the bounds of the array for the pan. When the value outside of the array is an invalid float, the audio thread will crash (sound glitch). Does not happen when sound mode is set to Mono.&lt;br /&gt;
|-&lt;br /&gt;
|Having the same position as the camera&#039;s position || style=&amp;quot;background-color: #ff9696&amp;quot; |Floating-Point Division-by-Zero||When Mario stands in the same position as the camera, the game will crash due to a division by zero error.&amp;lt;ref&amp;gt;[https://www.youtube.com/watch?v=vK16L2J0la4 &amp;quot;Faster fastest crash in BoB&amp;quot; by Madghostkek]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Rotating a Pendulum using pendulum manipulation beyond the float angle limit.&lt;br /&gt;
| style=&amp;quot;background-color: #ff9696&amp;quot; |Floating-Point Overflow&lt;br /&gt;
|Manipulating the pendulum to rotate beyond the range of an int will error when truncating the float. Verification of this crash took 39 days.&amp;lt;ref&amp;gt;[https://clips.twitch.tv/TiredKnottyOrcaThunBeast-3MHslDyIHpEavrfG &amp;quot;Pendulum Crash&amp;quot; by rcombs]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Touching a recovery heart with more than ~10.7M speed.&lt;br /&gt;
| style=&amp;quot;background-color: #ff9696&amp;quot; |Floating-Point Overflow&lt;br /&gt;
|Touching a recovery heart with more than ~10.7M speed will cause float-to-int conversion with a float value that&#039;s greater than the max integer value.&amp;lt;ref&amp;gt;[https://youtu.be/nDqSqrnjmHY Game Crash from Touching a Heart with 10.7M Speed]&amp;lt;/ref&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==RCP (Graphics) Crashes==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Cause!!Exception Type!!Notes&lt;br /&gt;
|-&lt;br /&gt;
|Have too many 3D models on screen at once|| style=&amp;quot;background-color: #fffca8&amp;quot; |Invalid F3D command ||The main display list buffer has two sides, the left side holds F3D commands the game runs, and the right side holds allocated buffers for matrices. When an object&#039;s graphics are drawn, 16 bytes are used from the left side and 64 from the right side for each separate 3D model from the object. These two sides overlap when there are too many of these models on screen, leading to both sides being overwritten with garbage data and invalid F3D commands.&lt;br /&gt;
|-&lt;br /&gt;
|Moving the camera immediately when entering [[VCutM]]|| style=&amp;quot;background-color: #fffca8&amp;quot; |Invalid F3D command||The object that spawns the rotating checkerboard platforms in VCutM references a model that doesn&#039;t exist. Normally this isn&#039;t a problem, since it&#039;s not on screen so it&#039;s culled before any damage occurs, and it despawns 1 frame after loading the level. However rotating the camera on the first frame, right before it despawns, it just barely comes into view. The non-existent model ends up sending invalid F3D commands to the RCP.&lt;br /&gt;
|}&lt;br /&gt;
==See Also==&lt;br /&gt;
[[Address Error Exception]]&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Glitches]]&lt;br /&gt;
{{Glitches}}&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=Softlock&amp;diff=10869</id>
		<title>Softlock</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=Softlock&amp;diff=10869"/>
		<updated>2020-03-17T17:37:42Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Known Softlocks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &#039;&#039;&#039;softlock&#039;&#039;&#039; occurs when the game is put into a state where, though it has not [[Crash|crashed]] or ceased functioning, there is no way to progress without resetting the console.&lt;br /&gt;
&lt;br /&gt;
==Known Softlocks==&lt;br /&gt;
&lt;br /&gt;
* Repeatedly bonking within a glitchy wall&amp;lt;ref&amp;gt;[https://youtu.be/g7lFIBxsjV0 &amp;quot;How to softlock SM64 101&amp;quot; by TimeTravelPenguin]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Getting stuck in some [[Black Room of Death]] or the Aquarium in the JRB room&lt;br /&gt;
* Activating a death, star, sign text, or painting entrance [[cutscene]] at the same time as a specific type of star activation cutscene (mainly item box stars)&amp;lt;ref&amp;gt;[https://www.youtube.com/watch?v=jXWtT2Er-EQ &amp;quot;WDW Death Star Softlock&amp;quot; by Nim]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://www.youtube.com/watch?v=RlrqJDgW3vE &amp;quot;Sign Star Softlock&amp;quot; by bad_boot]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://youtu.be/IjTY2eo6LZg &amp;quot;SM64 - The Evil MIPS Softlock&amp;quot; by Ethan White]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Being grabbed by [[Heave-Ho]] or Chuckya while releasing its clone or the clone of its anchor object &amp;lt;ref&amp;gt;[https://youtu.be/ixgL7FYF22w?t=103 &amp;quot;SM64 - Simultaneous Events Glitches&amp;quot; by pannenkoek2012]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Being grabbed by Chuckya while in [[Time Stop]]&amp;lt;ref&amp;gt;[https://youtu.be/dtB2afm_lCw?t=2 &amp;quot;THI Timestop Demonstration&amp;quot; by Tyler Kehne]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Attempting to speak to a bob-omb buddy while in [[Time Stop]] &lt;br /&gt;
* Being thrown by a Heave-Ho while underwater&amp;lt;ref&amp;gt;[https://youtu.be/vYw0cMVY8as &amp;quot;SM64 - Heave Ho Water Softlock&amp;quot; by Ethan White]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Being grabbed by Chuckya the same frame he dies or being grabbed in midair and having Chuckya unload&amp;lt;ref&amp;gt;[https://youtu.be/ixgL7FYF22w?t=88 &amp;quot;SM64 - Simultaneous Events Glitches&amp;quot; by pannenkoek2012]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Collecting a star in [[Wind|vertical wind]] &amp;lt;ref&amp;gt;[https://youtu.be/TFSjlq-ExSs?t=213 &amp;quot;SM64 - Power Star Clone&amp;quot; by pannenkoek2012]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Collecting a star in a situation where Mario repeatedly ledge grabs&amp;lt;ref&amp;gt;[https://youtu.be/LSBwOsCCYLA &amp;quot;Softlock from Repeatedly Ledge Grabbing with a Star&amp;quot; by UncommentatedPannen]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Activating a star outside the 12k limit&amp;lt;ref&amp;gt;[https://youtu.be/wC1PV9CYC4Y &amp;quot;Spawning a 100 Coin Star in a PU&amp;quot; by UncommentatedPannen]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://www.youtube.com/watch?v=e7AtSabtoHs &amp;quot;Softlock from Spawning a Star Too High Up &amp;amp; The 12k Limit&amp;quot; by UncommentatedPannen]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Talking to [[Yoshi]] while your lives counter is stuck (i.e. while having 1000 coins on the Japanese version)&amp;lt;ref&amp;gt;[https://youtu.be/AbCSED_FqjA &amp;quot;Talking to Yoshi with Negative Lives&amp;quot; by UncommentatedPannen]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Talking to Yoshi while it&#039;s falling off the roof&amp;lt;ref&amp;gt;[https://youtu.be/3UDDdbXaGx0?t=5m40s &amp;quot;SM64 - Yoshi Falls Off the Roof Glitch&amp;quot; by pannenkoek2012]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Dying when [[Lakitu|Lakitu&#039;s]] textbox is triggered at the start of the game (this is exclusive to the Japanese 1.0 version).&amp;lt;ref&amp;gt;[https://www.youtube.com/watch?v=l8S0KrWU5hk &amp;quot;Inverse Lakitu Skip&amp;quot; by bad_boot]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Activating certain text boxes while the camera is stuck&lt;br /&gt;
* Being thrown by [[Chuckya]] while holding a handsfree teleported [[Bloated Bob-omb|bloated bob-omb]]&amp;lt;ref&amp;gt;[https://youtu.be/qqmYYIQRSuI?t=9m8s &amp;quot;SM64 - Hands Free Teleport Glitch&amp;quot; by pannenkoek2012]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Going into a tornado while permanently squished&amp;lt;ref&amp;gt;[https://youtu.be/6jJKs3-U9KA?t=8m &amp;quot;SM64 - Permanently Squished Glitch&amp;quot; by pannenkoek2012]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Being shell Mario in certain geometry&amp;lt;ref&amp;gt;[https://youtu.be/flyo17g1Izk?t=37 &amp;quot;Super Mario 64 - Shell Mario Glitch in Snowman&#039;s Land&amp;quot; by Tomatobird8]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{glitches}}&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=FAQ&amp;diff=10143</id>
		<title>FAQ</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=FAQ&amp;diff=10143"/>
		<updated>2019-12-15T20:03:09Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Mupen is open, but the Mupen window disappeared and won’t come back, even when I restart. What do I do? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;FAQ (Frequently Asked Questions)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==How do I TAS?==&lt;br /&gt;
&lt;br /&gt;
[[Basic Mupen64 TAS Tutorial]]&lt;br /&gt;
&lt;br /&gt;
==What is STROOP?==&lt;br /&gt;
&#039;&#039;Main article: [[STROOP]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
STROOP (&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor) 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.&lt;br /&gt;
&lt;br /&gt;
==What is Mupen?==&lt;br /&gt;
&#039;&#039;Main article: [[Mupen64]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Mupen64 (otherwise known as Mupen64) is an N64 emulator. A variant of Mupen64, Mupen64-rr, is most commonly used for TASing Super Mario 64. This is what most people in the TAS community mean when they say &amp;quot;Mupen&amp;quot;. There is also an emulator known as Mupen64Plus, which does not have TASing capabilities, but is commonly used for [[RTA]].&lt;br /&gt;
&lt;br /&gt;
==Why Mupen over BizHawk?==&lt;br /&gt;
&lt;br /&gt;
Most TASes of Super Mario 64 are done on [[Mupen64-rr]]. This is for one main reason: .m64 files can be played back on console, known as [[TASBot#Console Verification|Console Verification]], whereas bk2 files cannot, due to the way they handle input during lag frames. BizHawk polls inputs on lag frames, as opposed to Mupen64, which does not, and SM64 doesn&#039;t either. BK2 files (BizHawk movie files) can still be converted to m64 files, however, so some still use Bizhawk.&lt;br /&gt;
&lt;br /&gt;
==Where can I get an SM64 ROM?==&lt;br /&gt;
&lt;br /&gt;
A quick google search can help you with that. Unfortunately we cannot provide links here because of copyright.&lt;br /&gt;
&lt;br /&gt;
==What different challenges are there?==&lt;br /&gt;
&lt;br /&gt;
As of now, there are 11 challenges that have gained decent popularity, along with many minor ones. Some of the more well-known include:&lt;br /&gt;
&lt;br /&gt;
*The [[UBER Challenge]]&lt;br /&gt;
*The [[Pacifist Challenge]]&lt;br /&gt;
*The [[A Button Challenge]]&lt;br /&gt;
*The [[Coinless Challenge]]&lt;br /&gt;
*The [[Capless/Cannonless Challenge]]&lt;br /&gt;
*The [[CCC Challenge]]&lt;br /&gt;
*The [[ABZ Button Challenge]]&lt;br /&gt;
*The [[Low Doors Challenge]]&lt;br /&gt;
*The [[No Joystick Allowed Challenge]]&lt;br /&gt;
*[[The Floor is Lava Challenge]]&lt;br /&gt;
*The [[Same Input Challenge]]&lt;br /&gt;
&lt;br /&gt;
See the [[Challenge]] and [[Other Single Button Challenges]] pages for further info on these and others.&lt;br /&gt;
&lt;br /&gt;
==How many A presses are left?==&lt;br /&gt;
&lt;br /&gt;
An any% run takes 0 A presses when performed on Wii VC. A 120 star run currently takes 20 A presses when performed on the original Japanese N64 version. Here&#039;s a table showing these counts on all game versions:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center; width: 200px; height: 200px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! [[Super Mario 64#Japanese|N64&amp;amp;nbsp;JP (Original)]]&lt;br /&gt;
! [[Super Mario 64#English|N64&amp;amp;nbsp;US]]&lt;br /&gt;
! [[Super Mario 64#PAL|N64&amp;amp;nbsp;PAL]]&lt;br /&gt;
! [[Super Mario 64#Shindou|N64&amp;amp;nbsp;JP (Shindou)]]&lt;br /&gt;
! [[Super Mario 64#iQue_.28Chinese.29|iQue]]&lt;br /&gt;
! [[Super Mario 64#Japanese_2|Wii&amp;amp;nbsp;VC JP]]&lt;br /&gt;
! [[Super Mario 64#English_2|Wii&amp;amp;nbsp;VC US]]&lt;br /&gt;
! [[Super Mario 64#PAL_2|Wii&amp;amp;nbsp;VC PAL]]&lt;br /&gt;
! [[Super Mario 64#Japanese_3|Wii&amp;amp;nbsp;U&amp;amp;nbsp;VC JP]]&lt;br /&gt;
! [[Super Mario 64#English_3|Wii&amp;amp;nbsp;U&amp;amp;nbsp;VC US]]&lt;br /&gt;
! [[Super Mario 64#PAL_3|Wii&amp;amp;nbsp;U&amp;amp;nbsp;VC PAL]]&lt;br /&gt;
! [[Super_Mario_64#64DD_Version|64DD Version]]&lt;br /&gt;
|-&lt;br /&gt;
! Any%&lt;br /&gt;
| 1 || 1 || 1 || 1 || 1 || 0 || 0 || 0 || 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
! 120&amp;amp;nbsp;Star&lt;br /&gt;
| 20 || 22 || 22 || 22 || 22 || 21 || 21 || 21 || 22 || 22 || 22 || Impossible&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Is a 70 Star 0 A press run being developed?==&lt;br /&gt;
&lt;br /&gt;
Nobody is currently working on it. However, through the use of Mupen64-WiiVC and Replay Hack WAD injection, it would be possible to TAS such a run and play it back on Wii VC.&lt;br /&gt;
&lt;br /&gt;
==What&#039;s the next A press save going to be?==&lt;br /&gt;
&lt;br /&gt;
The short answer is we don&#039;t know. We are always attempting new ideas and new methods in order to make another save, but ultimately we are never absolutely certain that what we try out will achieve one. The current progress has been on Tick Tock Clock as of recent, which has managed to save 2 A presses.&lt;br /&gt;
&lt;br /&gt;
==How are you decompiling the game?==&lt;br /&gt;
&lt;br /&gt;
After we discovered the compiler that Nintendo used for Super Mario 64, we obtained the raw assembly from the ROM, and are reverse engineering C code that compiles into it. This is a long and tedious process, but many prominent members of the community have made excellent progress so far.&lt;br /&gt;
&lt;br /&gt;
==Why does Mario lose his hat when he dies from going out-of-bounds (OoB)?==&lt;br /&gt;
&lt;br /&gt;
Mario&#039;s default state is, surprisingly, with no hat on, and on each frame it checks whether he&#039;s wearing the hat and sets the proper graphics flag. However, when Mario goes OoB, a large portion of the central Mario code stops running, including that check. Hence, Mario doesn&#039;t actually lose his hat; he just forgets he&#039;s wearing it.&lt;br /&gt;
&lt;br /&gt;
==When I record an AVI on mupen, the sound works but the screen is just black. How do I fix this?==&lt;br /&gt;
&lt;br /&gt;
This is a bug that occurs when you use the gl64 video plugin when aero is enabled on your computer. One fix is to use another video plugin, or to disable aero on your computer. The latter is only possible on Windows 7, but unfortunately not on Windows 8 or 10.&lt;br /&gt;
&lt;br /&gt;
==How do you continue off of a TAS you created earlier?==&lt;br /&gt;
&lt;br /&gt;
Play it to where you want to continue, then save a state. Disable read-only mode and reload the state. The file will now start recording inputs from that point, erasing any you had previously made after that point.&lt;br /&gt;
&lt;br /&gt;
==I just got through the 8 Star Door to Bowser 1 by grabbing onto it with a ledge grab! Is this useful?==&lt;br /&gt;
&lt;br /&gt;
No. Clipping through the door with a ledge grab is a side effect of the patch in the SM64 Editor program that &amp;quot;improves collision.&amp;quot; It is not actually possible in the original game.&lt;br /&gt;
&lt;br /&gt;
==Mario&#039;s animation doesn&#039;t update when you dive recover against a wall. Is this useful?==&lt;br /&gt;
&lt;br /&gt;
No. It is a purely visual glitch and has no effect on gameplay.&lt;br /&gt;
&lt;br /&gt;
==I was doing a BLJ on the endless stairs and warped straight to Wet-Dry World. Is this new?==&lt;br /&gt;
&lt;br /&gt;
No. You clipped through the wall and went above the painting. The game checks whether or not you entered paintings by checking whether or not you are above floor triangles behind them, even when you are really high up.&lt;br /&gt;
&lt;br /&gt;
==Mupen is open, but the Mupen window disappeared and won’t come back, even when I restart. What do I do?==&lt;br /&gt;
&lt;br /&gt;
This is a glitch that occurs when Mupen is closed while minimized.&lt;br /&gt;
&lt;br /&gt;
To fix it, you must maximize the Mupen window and then drag down the top of the window, which will restore it to a normal window. To maximize the window without it actually being present, you can do one of the following:&lt;br /&gt;
* [Windows 7 Only] Open task manager, right click on the Mupen program, click maximize&lt;br /&gt;
* Right click on the Mupen icon in the task bar with shift held, click maximize&lt;br /&gt;
* Hover over the Mupen icon in the task bar, right click on the preview, click maximize&lt;br /&gt;
&lt;br /&gt;
Deleting Mupen’s config file also works.&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=User:Pannenkoek2012&amp;diff=9526</id>
		<title>User:Pannenkoek2012</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=User:Pannenkoek2012&amp;diff=9526"/>
		<updated>2019-06-02T10:47:12Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cloning coins is my specialty B)&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=Softlock&amp;diff=7894</id>
		<title>Softlock</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=Softlock&amp;diff=7894"/>
		<updated>2019-04-19T04:24:22Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &#039;&#039;&#039;softlock&#039;&#039;&#039; occurs when the game is put into a state where, though it has not [[Crash|crashed]] or ceased functioning, there is no way to progress without resetting the console.&lt;br /&gt;
&lt;br /&gt;
==Known Softlocks==&lt;br /&gt;
&lt;br /&gt;
* Repeatedly bonking within a glitchy wall&amp;lt;ref&amp;gt;[https://youtu.be/g7lFIBxsjV0 &amp;quot;How to softlock SM64 101&amp;quot; by TimeTravelPenguin]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Getting stuck in some [[Black Room of Death]] or the Aquarium in the JRB room&lt;br /&gt;
* Activating a death, star, sign text, or painting entrance [[cutscene]] at the same time as a specific type of star activation cutscene (mainly item box stars)&amp;lt;ref&amp;gt;[https://www.youtube.com/watch?v=jXWtT2Er-EQ &amp;quot;WDW Death Star Softlock&amp;quot; by Nim]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://www.youtube.com/watch?v=RlrqJDgW3vE &amp;quot;Sign Star Softlock&amp;quot; by bad_boot]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://youtu.be/IjTY2eo6LZg &amp;quot;SM64 - The Evil MIPS Softlock&amp;quot; by Ethan White]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Being grabbed by [[Heave-Ho]] or Chuckya while releasing its clone or the clone of its anchor object &amp;lt;ref&amp;gt;[https://youtu.be/ixgL7FYF22w?t=103 &amp;quot;SM64 - Simultaneous Events Glitches&amp;quot; by pannenkoek2012]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Being grabbed by Chuckya while in [[Time Stop]]&amp;lt;ref&amp;gt;[https://youtu.be/dtB2afm_lCw?t=2 &amp;quot;THI Timestop Demonstration&amp;quot; by Tyler Kehne]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Attempting to speak to a bob-omb buddy while in [[Time Stop]] &lt;br /&gt;
* Being thrown by a Heave-Ho while underwater&amp;lt;ref&amp;gt;[https://youtu.be/vYw0cMVY8as &amp;quot;SM64 - Heave Ho Water Softlock&amp;quot; by Ethan White]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Being grabbed by Chuckya the same frame he dies or being grabbed in midair and having Chuckya unload&amp;lt;ref&amp;gt;[https://youtu.be/ixgL7FYF22w?t=88 &amp;quot;SM64 - Simultaneous Events Glitches&amp;quot; by pannenkoek2012]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Collecting a star in [[Wind|vertical wind]] &amp;lt;ref&amp;gt;[https://youtu.be/TFSjlq-ExSs?t=213 &amp;quot;SM64 - Power Star Clone&amp;quot; by pannenkoek2012]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Collecting a star in a situation where Mario repeatedly ledge grabs and is then pushed off the ledge into the ledge grab again&lt;br /&gt;
* Activating a star in a [[Parallel Universe|PU]]&amp;lt;ref&amp;gt;[https://youtu.be/wC1PV9CYC4Y &amp;quot;Spawning a 100 Coin Star in a PU&amp;quot; by UncommentatedPannen]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Talking to [[Yoshi]] while your lives counter is stuck (i.e. while having 1000 coins on the Japanese version)&amp;lt;ref&amp;gt;[https://youtu.be/AbCSED_FqjA &amp;quot;Talking to Yoshi with Negative Lives&amp;quot; by UncommentatedPannen]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Talking to Yoshi while Yoshi falls off the roof&amp;lt;ref&amp;gt;[https://youtu.be/3UDDdbXaGx0?t=5m40s &amp;quot;SM64 - Yoshi Falls Off the Roof Glitch&amp;quot; by pannenkoek2012]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Dying when [[Lakitu|Lakitu&#039;s]] textbox is triggered at the start of the game (this is exclusive to the Japanese 1.0 version).&amp;lt;ref&amp;gt;[https://www.youtube.com/watch?v=l8S0KrWU5hk &amp;quot;Inverse Lakitu Skip&amp;quot; by bad_boot]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Activating certain text boxes while the camera is stuck&lt;br /&gt;
* Being thrown by [[Chuckya]] while holding a handsfree teleported [[Bloated Bob-omb|bloated bob-omb]]&amp;lt;ref&amp;gt;[https://youtu.be/qqmYYIQRSuI?t=9m8s &amp;quot;SM64 - Hands Free Teleport Glitch&amp;quot; by pannenkoek2012]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Going into a tornado while permanently squished&amp;lt;ref&amp;gt;[https://youtu.be/6jJKs3-U9KA?t=8m &amp;quot;SM64 - Permanently Squished Glitch&amp;quot; by pannenkoek2012]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Being shell Mario in certain geometry&amp;lt;ref&amp;gt;[https://youtu.be/flyo17g1Izk?t=37 &amp;quot;Super Mario 64 - Shell Mario Glitch in Snowman&#039;s Land&amp;quot; by Tomatobird8]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=Softlock&amp;diff=7893</id>
		<title>Softlock</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=Softlock&amp;diff=7893"/>
		<updated>2019-04-19T04:23:25Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Known Softlocks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &#039;&#039;&#039;softlock&#039;&#039;&#039; occurs when the game is put into a state where, though it has not [[Crash|crashed]] or ceased functioning, there is no way to progress without resetting the console.&lt;br /&gt;
&lt;br /&gt;
==Known Softlocks==&lt;br /&gt;
&lt;br /&gt;
* Repeatedly bonking within a glitchy wall&amp;lt;ref&amp;gt;[https://youtu.be/g7lFIBxsjV0 &amp;quot;How to softlock SM64 101&amp;quot; by TimeTravelPenguin]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Getting stuck in some [[Black Room of Death]] or the Aquarium in the JRB room&lt;br /&gt;
* Activating a death, star, sign text, or painting entrance [[cutscene]] at the same time as a specific type of star activation cutscene (mainly item box stars)&amp;lt;ref&amp;gt;[https://www.youtube.com/watch?v=jXWtT2Er-EQ &amp;quot;WDW Death Star Softlock&amp;quot; by Nim]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://www.youtube.com/watch?v=RlrqJDgW3vE &amp;quot;Sign Star Softlock&amp;quot; by bad_boot]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://youtu.be/IjTY2eo6LZg &amp;quot;SM64 - The Evil MIPS Softlock&amp;quot; by Ethan White]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Being grabbed by [[Heave-Ho]] or Chuckya while releasing its clone or the clone of its anchor object &amp;lt;ref&amp;gt;[https://youtu.be/ixgL7FYF22w?t=103 &amp;quot;SM64 - Simultaneous Events Glitches&amp;quot; by pannenkoek2012]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Being grabbed by Chuckya while in [[Time Stop]]&amp;lt;ref&amp;gt;[https://youtu.be/dtB2afm_lCw?t=2 &amp;quot;THI Timestop Demonstration&amp;quot; by Tyler Kehne]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Attempting to speak to a bob-omb buddy while in [[Time Stop]] &lt;br /&gt;
* Being thrown by a Heave-Ho while underwater&amp;lt;ref&amp;gt;[https://youtu.be/vYw0cMVY8as &amp;quot;SM64 - Heave Ho Water Softlock&amp;quot; by Ethan White]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Being grabbed by Chuckya the same frame he dies or being grabbed in midair and having Chuckya unload&amp;lt;ref&amp;gt;[https://youtu.be/ixgL7FYF22w?t=88 &amp;quot;SM64 - Simultaneous Events Glitches&amp;quot; by pannenkoek2012]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Collecting a star in [[Wind|vertical wind]] &amp;lt;ref&amp;gt;[https://youtu.be/TFSjlq-ExSs?t=213 &amp;quot;SM64 - Power Star Clone&amp;quot; by pannenkoek2012]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Collecting a star in a situation where Mario repeatedly ledge grabs and is then pushed off the ledge into the ledge grab again&lt;br /&gt;
* Activating a star in a [[Parallel Universe|PU]]&amp;lt;ref&amp;gt;[https://youtu.be/wC1PV9CYC4Y &amp;quot;Spawning a 100 Coin Star in a PU&amp;quot; by UncommentatedPannen]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Talking to [[Yoshi]] while your lives counter is stuck (i.e. while having 1000 coins on the Japanese version)&amp;lt;ref&amp;gt;[https://youtu.be/AbCSED_FqjA &amp;quot;Talking to Yoshi with Negative Lives&amp;quot; by UncommentatedPannen]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Talking to Yoshi while Yoshi falls off the roof&amp;lt;ref&amp;gt;[https://youtu.be/3UDDdbXaGx0?t=5m40s &amp;quot;SM64 - Yoshi Falls Off the Roof Glitch&amp;quot; by pannenkoek2012]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Dying when [[Lakitu|Lakitu&#039;s]] textbox is triggered at the start of the game (this is exclusive to the Japanese 1.0 version).&amp;lt;ref&amp;gt;[https://www.youtube.com/watch?v=l8S0KrWU5hk &amp;quot;Inverse Lakitu Skip&amp;quot; by bad_boot]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Activating certain text boxes while the camera is stuck&lt;br /&gt;
* Being thrown by [[Chuckya]] while holding a handsfree teleported [[Bloated Bob-omb|bloated bob-omb]]&amp;lt;ref&amp;gt;[https://youtu.be/qqmYYIQRSuI?t=9m8s &amp;quot;SM64 - Hands Free Teleport Glitch&amp;quot; by pannenkoek2012]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Going into a tornado while permanently squished&amp;lt;ref&amp;gt;[https://youtu.be/6jJKs3-U9KA?t=8m &amp;quot;SM64 - Permanently Squished Glitch&amp;quot; by pannenkoek2012]&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Being shell Mario in certain geometry&amp;lt;ref&amp;gt;[https://youtu.be/flyo17g1Izk?t=37]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7738</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7738"/>
		<updated>2019-04-14T19:56:14Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Variables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variable Panel ==&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
Variables are found in a Variable Panel. A variable has 2 parts to it: a name (on the left) and a value (on the right). On every STROOP update, the value updates. You can set a variable&#039;s value by double clicking on the value, entering text, and then pressing enter. Some variables are values in memory, while other variables are calculated manually (referred to as special variables). While memory variables can always be set, special variables may or may not be able to be set. If you try to set a variable and it doesn&#039;t go through (either because the variable can&#039;t be set or because you entered an illegal value), then the variable will flash red to indicate this.&lt;br /&gt;
&lt;br /&gt;
All variables come with the following options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Highlight&#039;&#039;&#039;: Highlights the variable by giving it a red outline.&lt;br /&gt;
* &#039;&#039;&#039;Lock&#039;&#039;&#039;: Locks the variable&#039;s value. Note that the variable&#039;s value can still be edited while it&#039;s locked.&lt;br /&gt;
* &#039;&#039;&#039;Copy&#039;&#039;&#039;: Copies the variable&#039;s value (with no rounding) to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste&#039;&#039;&#039;: Pastes the clipboard value to the variable.&lt;br /&gt;
* &#039;&#039;&#039;Panel Options&#039;&#039;&#039;: Opens up the Variable Panel options.&lt;br /&gt;
* &#039;&#039;&#039;Open Controller&#039;&#039;&#039;: Opens up an Advanced Controller for the variable.&lt;br /&gt;
* &#039;&#039;&#039;Add to Custom Tab&#039;&#039;&#039;: Adds the variable to the Custom Tab.&lt;br /&gt;
* &#039;&#039;&#039;Fix Address&#039;&#039;&#039;: Fixes the address of the variable.&lt;br /&gt;
* &#039;&#039;&#039;Rename&#039;&#039;&#039;: Allows you to rename the variable.&lt;br /&gt;
* &#039;&#039;&#039;Remove&#039;&#039;&#039;: Removes the variable from the Variable Panel.&lt;br /&gt;
&lt;br /&gt;
Number variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Round to ...&#039;&#039;&#039;: Sets how many digits to round the variable to.&lt;br /&gt;
* &#039;&#039;&#039;Display as Hex&#039;&#039;&#039;: Toggles whether the variable is displayed as hex or decimal.&lt;br /&gt;
&lt;br /&gt;
Angle variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Signed&#039;&#039;&#039;: Toggles whether the variable is displayed as signed or not.&lt;br /&gt;
* &#039;&#039;&#039;Units...&#039;&#039;&#039;: Sets the units for the angle variable. The unit options are:&lt;br /&gt;
** &#039;&#039;&#039;In-Game Units&#039;&#039;&#039;: These are the units that the game uses. One revolution is 65536 in-game units.&lt;br /&gt;
** &#039;&#039;&#039;HAU&#039;&#039;&#039;: Standing for hexadecimal angle units, these are in-game units divided by 16. Thus, one revolution is 4096 HAU. These are useful because angles that fall under the same HAU value use the same entry in the game&#039;s trig table, since angles are truncated to the closest multiple of 16 before accessing the table.&lt;br /&gt;
** &#039;&#039;&#039;Degrees&#039;&#039;&#039;: One revolution is 360 degrees.&lt;br /&gt;
** &#039;&#039;&#039;Radians&#039;&#039;&#039;: One revolution is 2*pi radians.&lt;br /&gt;
** &#039;&#039;&#039;Revolutions&#039;&#039;&#039;: One revolution is one revolution.&lt;br /&gt;
* &#039;&#039;&#039;Truncate to Multiple of 16&#039;&#039;&#039;: Toggles whether the angle&#039;s value is truncated to a multiple of 16. This is useful since angles that truncated to same the closest multiple of 16 use the same entry in the game&#039;s trig table.&lt;br /&gt;
* &#039;&#039;&#039;Constrain to One Revolution&#039;&#039;&#039;: Toggles whether the angle&#039;s value is constrained to one revolution. For example, an angle that&#039;s unsigned and in angle units would be constrained to the range [0, 65535], whereas an angle that&#039;s signed and in angle units would be constrained to the range [-32768, 32767].&lt;br /&gt;
* &#039;&#039;&#039;Reverse&#039;&#039;&#039;: Toggles whether the angle is displayed as the reverse of what it actually is.&lt;br /&gt;
&lt;br /&gt;
Address variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;View Address&#039;&#039;&#039;: Views the variable&#039;s value as an address in the Memory Tab.&lt;br /&gt;
&lt;br /&gt;
Object variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Display as Object&#039;&#039;&#039;: Displays the variable&#039;s value as an Object. Values include:&lt;br /&gt;
** &#039;&#039;&#039;Slot n&#039;&#039;&#039;: The nth loaded slot.&lt;br /&gt;
** &#039;&#039;&#039;Slot VSn&#039;&#039;&#039;: The nth vacant slot.&lt;br /&gt;
** &#039;&#039;&#039;PG n&#039;&#039;&#039;: Process Group n&#039;s node.&lt;br /&gt;
** &#039;&#039;&#039;(none)&#039;&#039;&#039;: The value 0.&lt;br /&gt;
** &#039;&#039;&#039;(unused object)&#039;&#039;&#039;: The unused object slot.&lt;br /&gt;
** &#039;&#039;&#039;(unknown object)&#039;&#039;&#039;: A value that&#039;s not recognized as a valid object reference.&lt;br /&gt;
* &#039;&#039;&#039;Select Object&#039;&#039;&#039;: Selects the object slot whose object&#039;s address equals the variable&#039;s value.&lt;br /&gt;
&lt;br /&gt;
Triangle variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Select Triangle&#039;&#039;&#039;: Selects a custom triangle in the Triangle Tab whose address equals the variable&#039;s value.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* &#039;&#039;&#039;Display as Checkbox&#039;&#039;&#039;: Toggles whether the variable is displayed as a checkbox.&lt;br /&gt;
* &#039;&#039;&#039;Display as Inverted&#039;&#039;&#039;: Toggles whether the checkbox&#039;s checked state is inverted.&lt;br /&gt;
&lt;br /&gt;
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&#039;s selected, then you&#039;ll see a different set of options from normal, and these options will affect all selected variables. Options prefixed with &amp;quot;Angle:&amp;quot; only affect angles. Choosing the &amp;quot;Default&amp;quot; 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:&lt;br /&gt;
* &#039;&#039;&#039;Highlight...&#039;&#039;&#039;: Highlights the variables with a red or custom-colored outline.&lt;br /&gt;
* &#039;&#039;&#039;Lock...&#039;&#039;&#039;: Locks the variables&#039; values.&lt;br /&gt;
* &#039;&#039;&#039;Fix Address...&#039;&#039;&#039;: Fixes the addresses of the variables.&lt;br /&gt;
* &#039;&#039;&#039;Copy...&#039;&#039;&#039;: Copies the variable&#039;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. &amp;quot;float X = 100f&amp;quot;. 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&#039; original names. For example, entering &amp;quot;my$Value&amp;quot; will result in &amp;quot;float myXValue = 100f&amp;quot; being copied to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste&#039;&#039;&#039;: 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.&lt;br /&gt;
* &#039;&#039;&#039;Round to...&#039;&#039;&#039;: Sets how many digits to round the variables to.&lt;br /&gt;
* &#039;&#039;&#039;Display as Hex...&#039;&#039;&#039;: Sets whether the variables are displayed as hex or decimal.&lt;br /&gt;
* &#039;&#039;&#039;Angle: Signed...&#039;&#039;&#039;: Sets whether the variables are displayed as signed or not.&lt;br /&gt;
* &#039;&#039;&#039;Angle: Units...&#039;&#039;&#039;: Sets the units for the angle variables. See above for more information on the unit options.&lt;br /&gt;
* &#039;&#039;&#039;Angle: Truncate to Multiple of 16...&#039;&#039;&#039;: Sets whether the angles&#039; values are truncated to a multiple of 16.&lt;br /&gt;
* &#039;&#039;&#039;Angle: Constrain to One Revolution...&#039;&#039;&#039;: Sets whether the angles&#039; values are constrained to one revolution.&lt;br /&gt;
* &#039;&#039;&#039;Angle: Reverse...&#039;&#039;&#039;: Sets whether the angles are displayed as the reverse of what it actually is.&lt;br /&gt;
* &#039;&#039;&#039;Angle: Display as Hex...&#039;&#039;&#039;: Sets whether the angle variables are displayed as hex or decimal.&lt;br /&gt;
* &#039;&#039;&#039;Show Variable XML&#039;&#039;&#039;: Shows the XML that represents the variables.&lt;br /&gt;
* &#039;&#039;&#039;Show Variable Info&#039;&#039;&#039;: Shows info on the variables in table form, including Name, Type, Base + Offset, N64 Address, and Emulator Address.&lt;br /&gt;
* &#039;&#039;&#039;Background Color...&#039;&#039;&#039;: Changes the variables background color.&lt;br /&gt;
* &#039;&#039;&#039;Move...&#039;&#039;&#039;: Options for moving variables.&lt;br /&gt;
** &#039;&#039;&#039;Start Move&#039;&#039;&#039;: Adds the selected variables to the moving-variables-clipboard.&lt;br /&gt;
** &#039;&#039;&#039;End Move&#039;&#039;&#039;: Moves the variables on the moving-variables-clipboard to the location of the selected variables.&lt;br /&gt;
** &#039;&#039;&#039;Clear Move&#039;&#039;&#039;: Clears the selected-variables-clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Remove&#039;&#039;&#039;: Removes the variables from the Variable Panel.&lt;br /&gt;
* &#039;&#039;&#039;Rename&#039;&#039;&#039;: Allows you to rename the variables. This will open up a dialog where you can enter text, where the $ represents the variables&#039; original names. For example, entering &amp;quot;my$Value&amp;quot; will result in renaming &amp;quot;X&amp;quot; to &amp;quot;myXValue&amp;quot;.&lt;br /&gt;
* &#039;&#039;&#039;Open Controller&#039;&#039;&#039;: Opens up an Advanced Controller for the variables.&lt;br /&gt;
* &#039;&#039;&#039;Open Triplet Controller&#039;&#039;&#039;: Opens up a Triplet Controller for the variables.&lt;br /&gt;
* &#039;&#039;&#039;Open Pop Out&#039;&#039;&#039;: Opens up a Pop Out for the variables.&lt;br /&gt;
* &#039;&#039;&#039;Add to Tab...&#039;&#039;&#039;: Adds the variables to a tab of your choosing.&lt;br /&gt;
* &#039;&#039;&#039;Add to Custom Tab&#039;&#039;&#039;: Adds the variables to the Custom Tab.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* &#039;&#039;&#039;Double Click&#039;&#039;&#039;: Opens up the Variable Viewer form for the variable, which shows the variable&#039;s Name, Type, Base + Offset, N64 Address, and Emulator Address.&lt;br /&gt;
* &#039;&#039;&#039;Click + Shift + Number&#039;&#039;&#039;: Sets the variable&#039;s background color to different colors, depending on the number.&lt;br /&gt;
* &#039;&#039;&#039;Click + Number&#039;&#039;&#039;: Sets the variable&#039;s highlight color to different colors, depending on the number.&lt;br /&gt;
* &#039;&#039;&#039;Click + S&#039;&#039;&#039;: Adds the variable to the Custom Tab.&lt;br /&gt;
* &#039;&#039;&#039;Click + T&#039;&#039;&#039;: Adds the variable to the TAS Tab.&lt;br /&gt;
* &#039;&#039;&#039;Click + M&#039;&#039;&#039;: Adds the variable to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Click + P&#039;&#039;&#039;: Adds the variable to a tab of your choosing.&lt;br /&gt;
* &#039;&#039;&#039;Click + N&#039;&#039;&#039;: Views the variable&#039;s value as an address in the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Click + F&#039;&#039;&#039;: Fixes the address of the variable.&lt;br /&gt;
* &#039;&#039;&#039;Click + H&#039;&#039;&#039;: Highlights the variable with a red outline.&lt;br /&gt;
* &#039;&#039;&#039;Click + L&#039;&#039;&#039;: Locks the variable&#039;s value.&lt;br /&gt;
* &#039;&#039;&#039;Click + D&#039;&#039;&#039;: Toggles whether the variable is displayed as hex or decimal.&lt;br /&gt;
* &#039;&#039;&#039;Click + R&#039;&#039;&#039;: Allows you to rename the variable.&lt;br /&gt;
* &#039;&#039;&#039;Click + C&#039;&#039;&#039;: Opens up an Advanced Controller for the variable.&lt;br /&gt;
* &#039;&#039;&#039;Click + B&#039;&#039;&#039;: Opens up an Bit Controller for the variable.&lt;br /&gt;
* &#039;&#039;&#039;Click + Escape&#039;&#039;&#039;: Removes the variable from the Variable Panel.&lt;br /&gt;
* &#039;&#039;&#039;Click + Backspace&#039;&#039;&#039;: Removes the variable from the Variable Panel.&lt;br /&gt;
* &#039;&#039;&#039;Click + Delete&#039;&#039;&#039;: Removes the variable from the Variable Panel.&lt;br /&gt;
* &#039;&#039;&#039;Click + X&#039;&#039;&#039;: 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&#039;s current location.&lt;br /&gt;
* &#039;&#039;&#039;Click + Backtick&#039;&#039;&#039;: Adds the variable to the Var Hack tab.&lt;br /&gt;
* &#039;&#039;&#039;Click + Z&#039;&#039;&#039;: Sets the variable value to zero.&lt;br /&gt;
* &#039;&#039;&#039;Click + Minus&#039;&#039;&#039;: Decrements the variable value.&lt;br /&gt;
* &#039;&#039;&#039;Click + Plus&#039;&#039;&#039;: Increments the variable value.&lt;br /&gt;
* &#039;&#039;&#039;Click + Q&#039;&#039;&#039;: Sets the variable&#039;s background color to a custom color.&lt;br /&gt;
* &#039;&#039;&#039;Click + O&#039;&#039;&#039;: Sets the variable&#039;s background color to the last custom color.&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The various kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are various kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A Simple Controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons are inverted, i.e. swapping whether subtraction is on the left and addition is on the right or vice versa. Simple Controllers are found on the left panel of several tabs of STROOP.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;: A Triplet Controller is in charge of manipulating a triplet of variables, usually a set of (x,y,z) Euler coordinates or (theta,phi,radius) spherical coordinates. It consists of 2 sets of controls:&lt;br /&gt;
** &#039;&#039;&#039;Square Controls&#039;&#039;&#039;: On the left are the Square Controls, consisting of 8 buttons and a textbox arranged in square formation. For Euler coordinates, these controls manipulate the x and z coordinates. For spherical coordinates, these controls manipulate the theta and phi coordinates. In both cases, the buttons will add to or subtract from the corresponding variable(s) by the amount in the textbox. Note that you can right click on the buttons for more options so that you can customize the orientation of the buttons. Specifically, this allows you to rotate the buttons any one of eight ways, as well as invert the orientation (i.e. flip it).&lt;br /&gt;
** &#039;&#039;&#039;Line Controls&#039;&#039;&#039;: One the right are the Line Controls, consisting of 2 buttons and a textbox arranged in a vertical line formation. For Euler coordinates, these controls manipulate the y coordinate. For spherical coordinates, these controls manipulate the radius coordinate. In both cases, the buttons will add to or subtract from the corresponding variable by the amount in the textbox. Note that you can right click on the buttons for options to invert the buttons.&lt;br /&gt;
: Triplet controllers also frequently have a Relative Checkbox in the upper right, which toggles whether the controls manipulate the variables absolutely or relative to some angle. When in relative mode, the labels on the buttons will change to emphasize this. Specifically, F = forward, B = backward, L = left, R = right, U = up, D = down. Triplet Controllers are found on the left panel of several tabs of STROOP. However, you can also create your own Triplet Controller by selecting 3 or 4 variables to represent the x,y,z and optional angle variables, right clicking, and choosing to open a Triplet Controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;: An advanced controller is in charge of manipulating one or more variables. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name(s) of the variable(s) being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Fix Address Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are using fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Value Textbox&#039;&#039;&#039;: This displays the current value(s) of the variable(s). The background color is red if the variable(s) have fixed addresses, blue if the variable(s) don&#039;t have fixed addresses, and purple if some variables do and some variables don&#039;t have fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Lock Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are locked.&lt;br /&gt;
** &#039;&#039;&#039;Subtraction Button&#039;&#039;&#039;: This is used to subtract a value from the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Addition/Subtraction Textbox&#039;&#039;&#039;: This is the value that&#039;s used by the Addition Button and Subtraction Button.&lt;br /&gt;
** &#039;&#039;&#039;Addition Button&#039;&#039;&#039;: This is used to add a value to the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get Button&#039;&#039;&#039;: This gets the value(s) of the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get/Set Textbox&#039;&#039;&#039;: This is the value used by the Get Button and Set Button.&lt;br /&gt;
** &#039;&#039;&#039;Set Button&#039;&#039;&#039;: This sets the value(s) of the variable(s).&lt;br /&gt;
: Additional notes:&lt;br /&gt;
:* In the case of setting multiple variables, you can set all of the variables to different values by separating the values in the textbox with commas. Alternatively, leave just one value in the textbox to set all variables to that one value. The same applies to adding and subtracting values.&lt;br /&gt;
:* The add and subtract buttons can be inverted by right clicking on them and choosing to invert.&lt;br /&gt;
:* You can click on the add/subtract button and hold the mouse down while holding control in order to continuously add to or subtract from the variables. Alternatively, right click on either button and choose to Start Continuous Add (or Subtract) and then later choose to Stop Continuous Add (or Subtract).&lt;br /&gt;
: You can create an Advanced Controller for a variable by clicking on the variable while holding C. Alternatively, you can create an Advanced Controller for multiple variables by selecting multiple variables, right clicking, and choosing to open a controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bit Controller&#039;&#039;&#039;: A Bit Controller is in charge of manipulating one variable. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name of the variable being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Decimal Value&#039;&#039;&#039;: This shows the decimal value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Hex Value&#039;&#039;&#039;: This shows the hex value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Binary Value&#039;&#039;&#039;: This shows the binary value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Value Table&#039;&#039;&#039;: This shows various representations of the bytes of the variable, including the decimal representation, hex representation, and binary representation. It also provides a set of checkboxes that can be used to toggle each bit of the variable. For floats, these checkboxes are colored according to the bits&#039; role in the float, as blue represents sign, red represents exponent, and green represents mantissa.&lt;br /&gt;
: Note that for floats, you can right click on the empty space of the controller, and change what the textboxes display. Specifically, they can be set to display the sign, exponent, and mantissa values of the float. You can create a Bit Controller for a variable by clicking on the variable while holding B.&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;br /&gt;
&lt;br /&gt;
== Painting Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7737</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7737"/>
		<updated>2019-04-14T19:41:49Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Variables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variable Panel ==&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
Variables are found in a Variable Panel. A variable has 2 parts to it: a name (on the left) and a value (on the right). On every STROOP update, the value updates. You can set a variable&#039;s value by double clicking on the value, entering text, and then pressing enter. Some variables are values in memory, while other variables are calculated manually (referred to as special variables). While memory variables can always be set, special variables may or may not be able to be set. If you try to set a variable and it doesn&#039;t go through (either because the variable can&#039;t be set or because you entered an illegal value), then the variable will flash red to indicate this.&lt;br /&gt;
&lt;br /&gt;
All variables come with the following options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Highlight&#039;&#039;&#039;: Highlights the variable by giving it a red outline.&lt;br /&gt;
* &#039;&#039;&#039;Lock&#039;&#039;&#039;: Locks the variable&#039;s value. Note that the variable&#039;s value can still be edited while it&#039;s locked.&lt;br /&gt;
* &#039;&#039;&#039;Copy&#039;&#039;&#039;: Copies the variable&#039;s value (with no rounding) to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste&#039;&#039;&#039;: Pastes the clipboard value to the variable.&lt;br /&gt;
* &#039;&#039;&#039;Panel Options&#039;&#039;&#039;: Opens up the Variable Panel options.&lt;br /&gt;
* &#039;&#039;&#039;Open Controller&#039;&#039;&#039;: Opens up an Advanced Controller for the variable.&lt;br /&gt;
* &#039;&#039;&#039;Add to Custom Tab&#039;&#039;&#039;: Adds the variable to the Custom Tab.&lt;br /&gt;
* &#039;&#039;&#039;Fix Address&#039;&#039;&#039;: Fixes the address of the variable.&lt;br /&gt;
* &#039;&#039;&#039;Rename&#039;&#039;&#039;: Allows you to rename the variable.&lt;br /&gt;
* &#039;&#039;&#039;Remove&#039;&#039;&#039;: Removes the variable from the Variable Panel.&lt;br /&gt;
&lt;br /&gt;
Number variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Round to ...&#039;&#039;&#039;: Sets how many digits to round the variable to.&lt;br /&gt;
* &#039;&#039;&#039;Display as Hex&#039;&#039;&#039;: Toggles whether the variable is displayed as hex or decimal.&lt;br /&gt;
&lt;br /&gt;
Angle variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Signed&#039;&#039;&#039;: Toggles whether the variable is displayed as signed or not.&lt;br /&gt;
* &#039;&#039;&#039;Units...&#039;&#039;&#039;: Sets the units for the angle variable. The unit options are:&lt;br /&gt;
** &#039;&#039;&#039;In-Game Units&#039;&#039;&#039;: These are the units that the game uses. One revolution is 65536 in-game units.&lt;br /&gt;
** &#039;&#039;&#039;HAU&#039;&#039;&#039;: Standing for hexadecimal angle units, these are in-game units divided by 16. Thus, one revolution is 4096 HAU. These are useful because angles that fall under the same HAU value use the same entry in the game&#039;s trig table, since angles are truncated to the closest multiple of 16 before accessing the table.&lt;br /&gt;
** &#039;&#039;&#039;Degrees&#039;&#039;&#039;: One revolution is 360 degrees.&lt;br /&gt;
** &#039;&#039;&#039;Radians&#039;&#039;&#039;: One revolution is 2*pi radians.&lt;br /&gt;
** &#039;&#039;&#039;Revolutions&#039;&#039;&#039;: One revolution is one revolution.&lt;br /&gt;
* &#039;&#039;&#039;Truncate to Multiple of 16&#039;&#039;&#039;: Toggles whether the angle&#039;s value is truncated to a multiple of 16. This is useful since angles that truncated to same the closest multiple of 16 use the same entry in the game&#039;s trig table.&lt;br /&gt;
* &#039;&#039;&#039;Constrain to One Revolution&#039;&#039;&#039;: Toggles whether the angle&#039;s value is constrained to one revolution. For example, an angle that&#039;s unsigned and in angle units would be constrained to the range [0, 65535], whereas an angle that&#039;s signed and in angle units would be constrained to the range [-32768, 32767].&lt;br /&gt;
* &#039;&#039;&#039;Reverse&#039;&#039;&#039;: Toggles whether the angle is displayed as the reverse of what it actually is.&lt;br /&gt;
&lt;br /&gt;
Address variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;View Address&#039;&#039;&#039;: Views the variable&#039;s value as an address in the Memory Tab.&lt;br /&gt;
&lt;br /&gt;
Object variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Display as Object&#039;&#039;&#039;: Displays the variable&#039;s value as an Object. Values include:&lt;br /&gt;
** &#039;&#039;&#039;Slot n&#039;&#039;&#039;: The nth loaded slot.&lt;br /&gt;
** &#039;&#039;&#039;Slot VSn&#039;&#039;&#039;: The nth vacant slot.&lt;br /&gt;
** &#039;&#039;&#039;PG n&#039;&#039;&#039;: Process Group n&#039;s node.&lt;br /&gt;
** &#039;&#039;&#039;(none)&#039;&#039;&#039;: The value 0.&lt;br /&gt;
** &#039;&#039;&#039;(unused object)&#039;&#039;&#039;: The unused object slot.&lt;br /&gt;
** &#039;&#039;&#039;(unknown object)&#039;&#039;&#039;: A value that&#039;s not recognized as a valid object reference.&lt;br /&gt;
* &#039;&#039;&#039;Select Object&#039;&#039;&#039;: Selects the object slot whose object&#039;s address equals the variable&#039;s value.&lt;br /&gt;
&lt;br /&gt;
Triangle variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Select Triangle&#039;&#039;&#039;: Selects a custom triangle in the Triangle Tab whose address equals the variable&#039;s value.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* &#039;&#039;&#039;Display as Checkbox&#039;&#039;&#039;: Toggles whether the variable is displayed as a checkbox.&lt;br /&gt;
* &#039;&#039;&#039;Display as Inverted&#039;&#039;&#039;: Toggles whether the checkbox&#039;s checked state is inverted.&lt;br /&gt;
&lt;br /&gt;
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&#039;s selected, then you&#039;ll see a different set of options from normal, and these options will affect all selected variables. Options prefixed with &amp;quot;Angle:&amp;quot; only affect angles. Choosing the &amp;quot;Default&amp;quot; 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:&lt;br /&gt;
* &#039;&#039;&#039;Highlight...&#039;&#039;&#039;: Highlights the variables with a red or custom-colored outline.&lt;br /&gt;
* &#039;&#039;&#039;Lock...&#039;&#039;&#039;: Locks the variables&#039; values.&lt;br /&gt;
* &#039;&#039;&#039;Fix Address...&#039;&#039;&#039;: Fixes the addresses of the variables.&lt;br /&gt;
* &#039;&#039;&#039;Copy...&#039;&#039;&#039;: Copies the variable&#039;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. &amp;quot;float X = 100f&amp;quot;. 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&#039; original names. For example, entering &amp;quot;my$Value&amp;quot; will result in &amp;quot;float myXValue = 100f&amp;quot; being copied to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste&#039;&#039;&#039;: 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.&lt;br /&gt;
* &#039;&#039;&#039;Round to...&#039;&#039;&#039;: Sets how many digits to round the variables to.&lt;br /&gt;
* &#039;&#039;&#039;Display as Hex...&#039;&#039;&#039;: Sets whether the variables are displayed as hex or decimal.&lt;br /&gt;
* &#039;&#039;&#039;Angle: Signed...&#039;&#039;&#039;: Sets whether the variables are displayed as signed or not.&lt;br /&gt;
* &#039;&#039;&#039;Angle: Units...&#039;&#039;&#039;: Sets the units for the angle variables. See above for more information on the unit options.&lt;br /&gt;
* &#039;&#039;&#039;Angle: Truncate to Multiple of 16...&#039;&#039;&#039;: Sets whether the angles&#039; values are truncated to a multiple of 16.&lt;br /&gt;
* &#039;&#039;&#039;Angle: Constrain to One Revolution...&#039;&#039;&#039;: Sets whether the angles&#039; values are constrained to one revolution.&lt;br /&gt;
* &#039;&#039;&#039;Angle: Reverse...&#039;&#039;&#039;: Sets whether the angles are displayed as the reverse of what it actually is.&lt;br /&gt;
* &#039;&#039;&#039;Angle: Display as Hex...&#039;&#039;&#039;: Sets whether the angle variables are displayed as hex or decimal.&lt;br /&gt;
* &#039;&#039;&#039;Show Variable XML&#039;&#039;&#039;: Shows the XML that represents the variables.&lt;br /&gt;
* &#039;&#039;&#039;Show Variable Info&#039;&#039;&#039;: Shows info on the variables in table form, including Name, Type, Base + Offset, N64 Address, and Emulator Address.&lt;br /&gt;
* &#039;&#039;&#039;Background Color...&#039;&#039;&#039;: Changes the variables background color.&lt;br /&gt;
* &#039;&#039;&#039;Move...&#039;&#039;&#039;: Options for moving variables.&lt;br /&gt;
** &#039;&#039;&#039;Start Move&#039;&#039;&#039;: Adds the selected variables to the moving-variables-clipboard.&lt;br /&gt;
** &#039;&#039;&#039;End Move&#039;&#039;&#039;: Moves the variables on the moving-variables-clipboard to the location of the selected variables.&lt;br /&gt;
** &#039;&#039;&#039;Clear Move&#039;&#039;&#039;: Clears the selected-variables-clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Remove&#039;&#039;&#039;: Removes the variables from the Variable Panel.&lt;br /&gt;
* &#039;&#039;&#039;Rename&#039;&#039;&#039;: Allows you to rename the variables. This will open up a dialog where you can enter text, where the $ represents the variables&#039; original names. For example, entering &amp;quot;my$Value&amp;quot; will result in renaming &amp;quot;X&amp;quot; to &amp;quot;myXValue&amp;quot;.&lt;br /&gt;
* &#039;&#039;&#039;Open Controller&#039;&#039;&#039;: Opens up an Advanced Controller for the variables.&lt;br /&gt;
* &#039;&#039;&#039;Open Triplet Controller&#039;&#039;&#039;: Opens up a Triplet Controller for the variables.&lt;br /&gt;
* &#039;&#039;&#039;Open Pop Out&#039;&#039;&#039;: Opens up a Pop Out for the variables.&lt;br /&gt;
* &#039;&#039;&#039;Add to Tab...&#039;&#039;&#039;: Adds the variables to a tab of your choosing.&lt;br /&gt;
* &#039;&#039;&#039;Add to Custom Tab&#039;&#039;&#039;: Adds the variables to the Custom Tab.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* &#039;&#039;&#039;Double Click&#039;&#039;&#039;: Opens up the Variable Viewer form for the variable, which shows the variable&#039;s Name, Type, Base + Offset, N64 Address, and Emulator Address.&lt;br /&gt;
* &#039;&#039;&#039;Click + Shift + Number&#039;&#039;&#039;: Sets the variable&#039;s background color to different colors, depending on the number.&lt;br /&gt;
* &#039;&#039;&#039;Click + Number&#039;&#039;&#039;: Sets the variable&#039;s highlight color to different colors, depending on the number.&lt;br /&gt;
* &#039;&#039;&#039;Click + S&#039;&#039;&#039;: Adds the variable to the Custom Tab.&lt;br /&gt;
* &#039;&#039;&#039;Click + T&#039;&#039;&#039;: Adds the variable to the TAS Tab.&lt;br /&gt;
* &#039;&#039;&#039;Click + M&#039;&#039;&#039;: Adds the variable to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Click + P&#039;&#039;&#039;: Adds the variable to a tab of your choosing.&lt;br /&gt;
* &#039;&#039;&#039;Click + N&#039;&#039;&#039;: Views the variable&#039;s value as an address in the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Click + F&#039;&#039;&#039;: Fixes the address of the variable.&lt;br /&gt;
* &#039;&#039;&#039;Click + H&#039;&#039;&#039;: Highlights the variable with a red outline.&lt;br /&gt;
* &#039;&#039;&#039;Click + L&#039;&#039;&#039;: Locks the variable&#039;s value.&lt;br /&gt;
* &#039;&#039;&#039;Click + D&#039;&#039;&#039;: Toggles whether the variable is displayed as hex or decimal.&lt;br /&gt;
* &#039;&#039;&#039;Click + R&#039;&#039;&#039;: Allows you to rename the variable.&lt;br /&gt;
* &#039;&#039;&#039;Click + C&#039;&#039;&#039;: Opens up an Advanced Controller for the variable.&lt;br /&gt;
* &#039;&#039;&#039;Click + B&#039;&#039;&#039;: Opens up an Bit Controller for the variable.&lt;br /&gt;
* &#039;&#039;&#039;Click + Escape&#039;&#039;&#039;: Removes the variable from the Variable Panel.&lt;br /&gt;
* &#039;&#039;&#039;Click + Backspace&#039;&#039;&#039;: Removes the variable from the Variable Panel.&lt;br /&gt;
* &#039;&#039;&#039;Click + Delete&#039;&#039;&#039;: Removes the variable from the Variable Panel.&lt;br /&gt;
* &#039;&#039;&#039;Click + X&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Backtick&#039;&#039;&#039;: Adds the variable to the Var Hack tab.&lt;br /&gt;
* &#039;&#039;&#039;Click + Z&#039;&#039;&#039;: Sets the variable value to zero.&lt;br /&gt;
* &#039;&#039;&#039;Click + Minus&#039;&#039;&#039;: Decrements the variable value.&lt;br /&gt;
* &#039;&#039;&#039;Click + Plus&#039;&#039;&#039;: Increments the variable value.&lt;br /&gt;
* &#039;&#039;&#039;Click + Q&#039;&#039;&#039;: Sets the variable&#039;s background color to a custom color.&lt;br /&gt;
* &#039;&#039;&#039;Click + O&#039;&#039;&#039;: Sets the variable&#039;s background color to the last custom color.&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The various kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are various kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A Simple Controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons are inverted, i.e. swapping whether subtraction is on the left and addition is on the right or vice versa. Simple Controllers are found on the left panel of several tabs of STROOP.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;: A Triplet Controller is in charge of manipulating a triplet of variables, usually a set of (x,y,z) Euler coordinates or (theta,phi,radius) spherical coordinates. It consists of 2 sets of controls:&lt;br /&gt;
** &#039;&#039;&#039;Square Controls&#039;&#039;&#039;: On the left are the Square Controls, consisting of 8 buttons and a textbox arranged in square formation. For Euler coordinates, these controls manipulate the x and z coordinates. For spherical coordinates, these controls manipulate the theta and phi coordinates. In both cases, the buttons will add to or subtract from the corresponding variable(s) by the amount in the textbox. Note that you can right click on the buttons for more options so that you can customize the orientation of the buttons. Specifically, this allows you to rotate the buttons any one of eight ways, as well as invert the orientation (i.e. flip it).&lt;br /&gt;
** &#039;&#039;&#039;Line Controls&#039;&#039;&#039;: One the right are the Line Controls, consisting of 2 buttons and a textbox arranged in a vertical line formation. For Euler coordinates, these controls manipulate the y coordinate. For spherical coordinates, these controls manipulate the radius coordinate. In both cases, the buttons will add to or subtract from the corresponding variable by the amount in the textbox. Note that you can right click on the buttons for options to invert the buttons.&lt;br /&gt;
: Triplet controllers also frequently have a Relative Checkbox in the upper right, which toggles whether the controls manipulate the variables absolutely or relative to some angle. When in relative mode, the labels on the buttons will change to emphasize this. Specifically, F = forward, B = backward, L = left, R = right, U = up, D = down. Triplet Controllers are found on the left panel of several tabs of STROOP. However, you can also create your own Triplet Controller by selecting 3 or 4 variables to represent the x,y,z and optional angle variables, right clicking, and choosing to open a Triplet Controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;: An advanced controller is in charge of manipulating one or more variables. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name(s) of the variable(s) being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Fix Address Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are using fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Value Textbox&#039;&#039;&#039;: This displays the current value(s) of the variable(s). The background color is red if the variable(s) have fixed addresses, blue if the variable(s) don&#039;t have fixed addresses, and purple if some variables do and some variables don&#039;t have fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Lock Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are locked.&lt;br /&gt;
** &#039;&#039;&#039;Subtraction Button&#039;&#039;&#039;: This is used to subtract a value from the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Addition/Subtraction Textbox&#039;&#039;&#039;: This is the value that&#039;s used by the Addition Button and Subtraction Button.&lt;br /&gt;
** &#039;&#039;&#039;Addition Button&#039;&#039;&#039;: This is used to add a value to the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get Button&#039;&#039;&#039;: This gets the value(s) of the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get/Set Textbox&#039;&#039;&#039;: This is the value used by the Get Button and Set Button.&lt;br /&gt;
** &#039;&#039;&#039;Set Button&#039;&#039;&#039;: This sets the value(s) of the variable(s).&lt;br /&gt;
: Additional notes:&lt;br /&gt;
:* In the case of setting multiple variables, you can set all of the variables to different values by separating the values in the textbox with commas. Alternatively, leave just one value in the textbox to set all variables to that one value. The same applies to adding and subtracting values.&lt;br /&gt;
:* The add and subtract buttons can be inverted by right clicking on them and choosing to invert.&lt;br /&gt;
:* You can click on the add/subtract button and hold the mouse down while holding control in order to continuously add to or subtract from the variables. Alternatively, right click on either button and choose to Start Continuous Add (or Subtract) and then later choose to Stop Continuous Add (or Subtract).&lt;br /&gt;
: You can create an Advanced Controller for a variable by clicking on the variable while holding C. Alternatively, you can create an Advanced Controller for multiple variables by selecting multiple variables, right clicking, and choosing to open a controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bit Controller&#039;&#039;&#039;: A Bit Controller is in charge of manipulating one variable. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name of the variable being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Decimal Value&#039;&#039;&#039;: This shows the decimal value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Hex Value&#039;&#039;&#039;: This shows the hex value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Binary Value&#039;&#039;&#039;: This shows the binary value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Value Table&#039;&#039;&#039;: This shows various representations of the bytes of the variable, including the decimal representation, hex representation, and binary representation. It also provides a set of checkboxes that can be used to toggle each bit of the variable. For floats, these checkboxes are colored according to the bits&#039; role in the float, as blue represents sign, red represents exponent, and green represents mantissa.&lt;br /&gt;
: Note that for floats, you can right click on the empty space of the controller, and change what the textboxes display. Specifically, they can be set to display the sign, exponent, and mantissa values of the float. You can create a Bit Controller for a variable by clicking on the variable while holding B.&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;br /&gt;
&lt;br /&gt;
== Painting Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7736</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7736"/>
		<updated>2019-04-14T19:16:33Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Variables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variable Panel ==&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
Variables are found in a Variable Panel. A variable has 2 parts to it: a name (on the left) and a value (on the right). On every STROOP update, the value updates. You can set a variable&#039;s value by double clicking on the value, entering text, and then pressing enter. Some variables are values in memory, while other variables are calculated manually (referred to as special variables). While memory variables can always be set, special variables may or may not be able to be set. If you try to set a variable and it doesn&#039;t go through (either because the variable can&#039;t be set or because you entered an illegal value), then the variable will flash red to indicate this.&lt;br /&gt;
&lt;br /&gt;
All variables come with the following options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Highlight&#039;&#039;&#039;: Highlights the variable by giving it a red outline.&lt;br /&gt;
* &#039;&#039;&#039;Lock&#039;&#039;&#039;: Locks the variable&#039;s value. Note that the variable&#039;s value can still be edited while it&#039;s locked.&lt;br /&gt;
* &#039;&#039;&#039;Copy&#039;&#039;&#039;: Copies the variable&#039;s value (with no rounding) to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste&#039;&#039;&#039;: Pastes the clipboard value to the variable.&lt;br /&gt;
* &#039;&#039;&#039;Panel Options&#039;&#039;&#039;: Opens up the Variable Panel options.&lt;br /&gt;
* &#039;&#039;&#039;Open Controller&#039;&#039;&#039;: Opens up an Advanced Controller for the variable.&lt;br /&gt;
* &#039;&#039;&#039;Add to Custom Tab&#039;&#039;&#039;: Adds the variable to the Custom Tab.&lt;br /&gt;
* &#039;&#039;&#039;Fix Address&#039;&#039;&#039;: Fixes the address of the variable.&lt;br /&gt;
* &#039;&#039;&#039;Rename&#039;&#039;&#039;: Allows you to rename the variable.&lt;br /&gt;
* &#039;&#039;&#039;Remove&#039;&#039;&#039;: Removes the variable from the Variable Panel.&lt;br /&gt;
&lt;br /&gt;
Number variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Round to ...&#039;&#039;&#039;: Sets how many digits to round the variable to.&lt;br /&gt;
* &#039;&#039;&#039;Display as Hex&#039;&#039;&#039;: Toggles whether the variable is displayed as hex or decimal.&lt;br /&gt;
&lt;br /&gt;
Angle variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Signed&#039;&#039;&#039;: Toggles whether the variable is displayed as signed or not.&lt;br /&gt;
* &#039;&#039;&#039;Units...&#039;&#039;&#039;: Sets the units for the angle variable. The unit options are:&lt;br /&gt;
** &#039;&#039;&#039;In-Game Units&#039;&#039;&#039;: These are the units that the game uses. One revolution is 65536 in-game units.&lt;br /&gt;
** &#039;&#039;&#039;HAU&#039;&#039;&#039;: Standing for hexadecimal angle units, these are in-game units divided by 16. Thus, one revolution is 4096 HAU. These are useful because angles that fall under the same HAU value use the same entry in the game&#039;s trig table, since angles are truncated to the closest multiple of 16 before accessing the table.&lt;br /&gt;
** &#039;&#039;&#039;Degrees&#039;&#039;&#039;: One revolution is 360 degrees.&lt;br /&gt;
** &#039;&#039;&#039;Radians&#039;&#039;&#039;: One revolution is 2*pi radians.&lt;br /&gt;
** &#039;&#039;&#039;Revolutions&#039;&#039;&#039;: One revolution is one revolution.&lt;br /&gt;
* &#039;&#039;&#039;Truncate to Multiple of 16&#039;&#039;&#039;: Toggles whether the angle&#039;s value is truncated to a multiple of 16. This is useful since angles that truncated to same the closest multiple of 16 use the same entry in the game&#039;s trig table.&lt;br /&gt;
* &#039;&#039;&#039;Constrain to One Revolution&#039;&#039;&#039;: Toggles whether the angle&#039;s value is constrained to one revolution. For example, an angle that&#039;s unsigned and in angle units would be constrained to the range [0, 65535], whereas an angle that&#039;s signed and in angle units would be constrained to the range [-32768, 32767].&lt;br /&gt;
* &#039;&#039;&#039;Reverse&#039;&#039;&#039;: Toggles whether the angle is displayed as the reverse of what it actually is.&lt;br /&gt;
&lt;br /&gt;
Address variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;View Address&#039;&#039;&#039;: Views the variable&#039;s value as an address in the Memory Tab.&lt;br /&gt;
&lt;br /&gt;
Object variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Display as Object&#039;&#039;&#039;: Displays the variable&#039;s value as an Object. Values include:&lt;br /&gt;
** &#039;&#039;&#039;Slot n&#039;&#039;&#039;: The nth loaded slot.&lt;br /&gt;
** &#039;&#039;&#039;Slot VSn&#039;&#039;&#039;: The nth vacant slot.&lt;br /&gt;
** &#039;&#039;&#039;PG n&#039;&#039;&#039;: Process Group n&#039;s node.&lt;br /&gt;
** &#039;&#039;&#039;(none)&#039;&#039;&#039;: The value 0.&lt;br /&gt;
** &#039;&#039;&#039;(unused object)&#039;&#039;&#039;: The unused object slot.&lt;br /&gt;
** &#039;&#039;&#039;(unknown object)&#039;&#039;&#039;: A value that&#039;s not recognized as a valid object reference.&lt;br /&gt;
* &#039;&#039;&#039;Select Object&#039;&#039;&#039;: Selects the object slot whose object&#039;s address equals the variable&#039;s value.&lt;br /&gt;
&lt;br /&gt;
Triangle variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Select Triangle&#039;&#039;&#039;: Selects a custom triangle in the Triangle Tab whose address equals the variable&#039;s value.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* &#039;&#039;&#039;Display as Checkbox&#039;&#039;&#039;: Toggles whether the variable is displayed as a checkbox.&lt;br /&gt;
* &#039;&#039;&#039;Display as Inverted&#039;&#039;&#039;: Toggles whether the checkbox&#039;s checked state is inverted.&lt;br /&gt;
&lt;br /&gt;
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&#039;s selected, then you&#039;ll see a different set of options from normal, and these options will affect all selected variables. Options prefixed with &amp;quot;Angle:&amp;quot; only affect angles. Choosing the &amp;quot;Default&amp;quot; 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:&lt;br /&gt;
* &#039;&#039;&#039;Highlight...&#039;&#039;&#039;: Highlights the variables by giving them a red or custom-colored outline.&lt;br /&gt;
* &#039;&#039;&#039;Lock...&#039;&#039;&#039;: Locks the variables&#039; values.&lt;br /&gt;
* &#039;&#039;&#039;Fix Address...&#039;&#039;&#039;: Fixes the addresses of the variables.&lt;br /&gt;
* &#039;&#039;&#039;Copy...&#039;&#039;&#039;: Copies the variable&#039;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. &amp;quot;float X = 100f&amp;quot;. 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&#039; original names. For example, entering &amp;quot;my$Value&amp;quot; will result in &amp;quot;float myXValue = 100f&amp;quot; being copied to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste&#039;&#039;&#039;: 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.&lt;br /&gt;
* &#039;&#039;&#039;Round to...&#039;&#039;&#039;: Sets how many digits to round the variables to.&lt;br /&gt;
* &#039;&#039;&#039;Display as Hex...&#039;&#039;&#039;: Sets whether the variables are displayed as hex or decimal.&lt;br /&gt;
* &#039;&#039;&#039;Angle: Signed...&#039;&#039;&#039;: Sets whether the variables are displayed as signed or not.&lt;br /&gt;
* &#039;&#039;&#039;Angle: Units...&#039;&#039;&#039;: Sets the units for the angle variables. See above for more information on the unit options.&lt;br /&gt;
* &#039;&#039;&#039;Angle: Truncate to Multiple of 16...&#039;&#039;&#039;: Sets whether the angles&#039; values are truncated to a multiple of 16.&lt;br /&gt;
* &#039;&#039;&#039;Angle: Constrain to One Revolution...&#039;&#039;&#039;: Sets whether the angles&#039; values are constrained to one revolution.&lt;br /&gt;
* &#039;&#039;&#039;Angle: Reverse...&#039;&#039;&#039;: Sets whether the angles are displayed as the reverse of what it actually is.&lt;br /&gt;
* &#039;&#039;&#039;Angle: Display as Hex...&#039;&#039;&#039;: Sets whether the angle variables are displayed as hex or decimal.&lt;br /&gt;
* &#039;&#039;&#039;Show Variable XML&#039;&#039;&#039;: Shows the XML that represents the variables.&lt;br /&gt;
* &#039;&#039;&#039;Show Variable Info&#039;&#039;&#039;: Shows info on the variables in table form, including Name, Type, Base + Offset, N64 Address, and Emulator Address.&lt;br /&gt;
* &#039;&#039;&#039;Background Color...&#039;&#039;&#039;: Changes the variables background color.&lt;br /&gt;
* &#039;&#039;&#039;Move...&#039;&#039;&#039;: Options for moving variables.&lt;br /&gt;
** &#039;&#039;&#039;Start Move&#039;&#039;&#039;: Adds the selected variables to the moving-variables-clipboard.&lt;br /&gt;
** &#039;&#039;&#039;End Move&#039;&#039;&#039;: Moves the variables on the moving-variables-clipboard to the location of the selected variables.&lt;br /&gt;
** &#039;&#039;&#039;Clear Move&#039;&#039;&#039;: Clears the selected-variables-clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Remove&#039;&#039;&#039;: Removes the variables from the Variable Panel.&lt;br /&gt;
* &#039;&#039;&#039;Rename&#039;&#039;&#039;: Allows you to rename the variables. This will open up a dialog where you can enter text, where the $ represents the variables&#039; original names. For example, entering &amp;quot;my$Value&amp;quot; will result in renaming &amp;quot;X&amp;quot; to &amp;quot;myXValue&amp;quot;.&lt;br /&gt;
* &#039;&#039;&#039;Open Controller&#039;&#039;&#039;: Opens up an Advanced Controller for the variables.&lt;br /&gt;
* &#039;&#039;&#039;Open Triplet Controller&#039;&#039;&#039;: Opens up a Triplet Controller for the variables.&lt;br /&gt;
* &#039;&#039;&#039;Open Pop Out&#039;&#039;&#039;: Opens up a Pop Out for the variables.&lt;br /&gt;
* &#039;&#039;&#039;Add to Tab...&#039;&#039;&#039;: Adds the variables to a tab of your choosing.&lt;br /&gt;
* &#039;&#039;&#039;Add to Custom Tab&#039;&#039;&#039;: Adds the variables to the Custom Tab.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* &#039;&#039;&#039;Double Click&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;Click + Shift + Number&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Number&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + S&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + T&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + M&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + P&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + N&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + F&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + H&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + L&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + D&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + R&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + C&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + B&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Escape&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Backspace&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Delete&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + X&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Backtick&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Z&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Minus&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Plus&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Q&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + O&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The various kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are various kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A Simple Controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons are inverted, i.e. swapping whether subtraction is on the left and addition is on the right or vice versa. Simple Controllers are found on the left panel of several tabs of STROOP.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;: A Triplet Controller is in charge of manipulating a triplet of variables, usually a set of (x,y,z) Euler coordinates or (theta,phi,radius) spherical coordinates. It consists of 2 sets of controls:&lt;br /&gt;
** &#039;&#039;&#039;Square Controls&#039;&#039;&#039;: On the left are the Square Controls, consisting of 8 buttons and a textbox arranged in square formation. For Euler coordinates, these controls manipulate the x and z coordinates. For spherical coordinates, these controls manipulate the theta and phi coordinates. In both cases, the buttons will add to or subtract from the corresponding variable(s) by the amount in the textbox. Note that you can right click on the buttons for more options so that you can customize the orientation of the buttons. Specifically, this allows you to rotate the buttons any one of eight ways, as well as invert the orientation (i.e. flip it).&lt;br /&gt;
** &#039;&#039;&#039;Line Controls&#039;&#039;&#039;: One the right are the Line Controls, consisting of 2 buttons and a textbox arranged in a vertical line formation. For Euler coordinates, these controls manipulate the y coordinate. For spherical coordinates, these controls manipulate the radius coordinate. In both cases, the buttons will add to or subtract from the corresponding variable by the amount in the textbox. Note that you can right click on the buttons for options to invert the buttons.&lt;br /&gt;
: Triplet controllers also frequently have a Relative Checkbox in the upper right, which toggles whether the controls manipulate the variables absolutely or relative to some angle. When in relative mode, the labels on the buttons will change to emphasize this. Specifically, F = forward, B = backward, L = left, R = right, U = up, D = down. Triplet Controllers are found on the left panel of several tabs of STROOP. However, you can also create your own Triplet Controller by selecting 3 or 4 variables to represent the x,y,z and optional angle variables, right clicking, and choosing to open a Triplet Controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;: An advanced controller is in charge of manipulating one or more variables. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name(s) of the variable(s) being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Fix Address Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are using fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Value Textbox&#039;&#039;&#039;: This displays the current value(s) of the variable(s). The background color is red if the variable(s) have fixed addresses, blue if the variable(s) don&#039;t have fixed addresses, and purple if some variables do and some variables don&#039;t have fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Lock Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are locked.&lt;br /&gt;
** &#039;&#039;&#039;Subtraction Button&#039;&#039;&#039;: This is used to subtract a value from the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Addition/Subtraction Textbox&#039;&#039;&#039;: This is the value that&#039;s used by the Addition Button and Subtraction Button.&lt;br /&gt;
** &#039;&#039;&#039;Addition Button&#039;&#039;&#039;: This is used to add a value to the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get Button&#039;&#039;&#039;: This gets the value(s) of the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get/Set Textbox&#039;&#039;&#039;: This is the value used by the Get Button and Set Button.&lt;br /&gt;
** &#039;&#039;&#039;Set Button&#039;&#039;&#039;: This sets the value(s) of the variable(s).&lt;br /&gt;
: Additional notes:&lt;br /&gt;
:* In the case of setting multiple variables, you can set all of the variables to different values by separating the values in the textbox with commas. Alternatively, leave just one value in the textbox to set all variables to that one value. The same applies to adding and subtracting values.&lt;br /&gt;
:* The add and subtract buttons can be inverted by right clicking on them and choosing to invert.&lt;br /&gt;
:* You can click on the add/subtract button and hold the mouse down while holding control in order to continuously add to or subtract from the variables. Alternatively, right click on either button and choose to Start Continuous Add (or Subtract) and then later choose to Stop Continuous Add (or Subtract).&lt;br /&gt;
: You can create an Advanced Controller for a variable by clicking on the variable while holding C. Alternatively, you can create an Advanced Controller for multiple variables by selecting multiple variables, right clicking, and choosing to open a controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bit Controller&#039;&#039;&#039;: A Bit Controller is in charge of manipulating one variable. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name of the variable being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Decimal Value&#039;&#039;&#039;: This shows the decimal value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Hex Value&#039;&#039;&#039;: This shows the hex value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Binary Value&#039;&#039;&#039;: This shows the binary value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Value Table&#039;&#039;&#039;: This shows various representations of the bytes of the variable, including the decimal representation, hex representation, and binary representation. It also provides a set of checkboxes that can be used to toggle each bit of the variable. For floats, these checkboxes are colored according to the bits&#039; role in the float, as blue represents sign, red represents exponent, and green represents mantissa.&lt;br /&gt;
: Note that for floats, you can right click on the empty space of the controller, and change what the textboxes display. Specifically, they can be set to display the sign, exponent, and mantissa values of the float. You can create a Bit Controller for a variable by clicking on the variable while holding B.&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;br /&gt;
&lt;br /&gt;
== Painting Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7735</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7735"/>
		<updated>2019-04-14T19:13:54Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Variables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variable Panel ==&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
Variables are found in a Variable Panel. A variable has 2 parts to it: a name (on the left) and a value (on the right). On every STROOP update, the value updates. You can set a variable&#039;s value by double clicking on the value, entering text, and then pressing enter. Some variables are values in memory, while other variables are calculated manually (referred to as special variables). While memory variables can always be set, special variables may or may not be able to be set. If you try to set a variable and it doesn&#039;t go through (either because the variable can&#039;t be set or because you entered an illegal value), then the variable will flash red to indicate this.&lt;br /&gt;
&lt;br /&gt;
All variables come with the following options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Highlight&#039;&#039;&#039;: Highlights the variable by giving it a red outline.&lt;br /&gt;
* &#039;&#039;&#039;Lock&#039;&#039;&#039;: Locks the variable&#039;s value. Note that the variable&#039;s value can still be edited while it&#039;s locked.&lt;br /&gt;
* &#039;&#039;&#039;Copy&#039;&#039;&#039;: Copies the variable&#039;s value (with no rounding) to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste&#039;&#039;&#039;: Pastes the clipboard value to the variable.&lt;br /&gt;
* &#039;&#039;&#039;Panel Options&#039;&#039;&#039;: Opens up the Variable Panel options.&lt;br /&gt;
* &#039;&#039;&#039;Open Controller&#039;&#039;&#039;: Opens up an Advanced Controller for the variable.&lt;br /&gt;
* &#039;&#039;&#039;Add to Custom Tab&#039;&#039;&#039;: Adds the variable to the Custom Tab.&lt;br /&gt;
* &#039;&#039;&#039;Fix Address&#039;&#039;&#039;: Fixes the address of the variable.&lt;br /&gt;
* &#039;&#039;&#039;Rename&#039;&#039;&#039;: Allows you to rename the variable.&lt;br /&gt;
* &#039;&#039;&#039;Remove&#039;&#039;&#039;: Removes the variable from the Variable Panel.&lt;br /&gt;
&lt;br /&gt;
Number variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Round to ...&#039;&#039;&#039;: Sets how many digits to round the variable to.&lt;br /&gt;
* &#039;&#039;&#039;Display as Hex&#039;&#039;&#039;: Toggles whether the variable is displayed as hex or decimal.&lt;br /&gt;
&lt;br /&gt;
Angle variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Signed&#039;&#039;&#039;: Toggles whether the variable is displayed as signed or not.&lt;br /&gt;
* &#039;&#039;&#039;Units...&#039;&#039;&#039;: Sets the units for the angle variable. The unit options are:&lt;br /&gt;
** &#039;&#039;&#039;In-Game Units&#039;&#039;&#039;: These are the units that the game uses. One revolution is 65536 in-game units.&lt;br /&gt;
** &#039;&#039;&#039;HAU&#039;&#039;&#039;: Standing for hexadecimal angle units, these are in-game units divided by 16. Thus, one revolution is 4096 HAU. These are useful because angles that fall under the same HAU value use the same entry in the game&#039;s trig table, since angles are truncated to the closest multiple of 16 before accessing the table.&lt;br /&gt;
** &#039;&#039;&#039;Degrees&#039;&#039;&#039;: One revolution is 360 degrees.&lt;br /&gt;
** &#039;&#039;&#039;Radians&#039;&#039;&#039;: One revolution is 2*pi radians.&lt;br /&gt;
** &#039;&#039;&#039;Revolutions&#039;&#039;&#039;: One revolution is one revolution.&lt;br /&gt;
* &#039;&#039;&#039;Truncate to Multiple of 16&#039;&#039;&#039;: Toggles whether the angle&#039;s value is truncated to a multiple of 16. This is useful since angles that truncated to same the closest multiple of 16 use the same entry in the game&#039;s trig table.&lt;br /&gt;
* &#039;&#039;&#039;Constrain to One Revolution&#039;&#039;&#039;: Toggles whether the angle&#039;s value is constrained to one revolution. For example, an angle that&#039;s unsigned and in angle units would be constrained to the range [0, 65535], whereas an angle that&#039;s signed and in angle units would be constrained to the range [-32768, 32767].&lt;br /&gt;
* &#039;&#039;&#039;Reverse&#039;&#039;&#039;: Toggles whether the angle is displayed as the reverse of what it actually is.&lt;br /&gt;
&lt;br /&gt;
Address variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;View Address&#039;&#039;&#039;: Views the variable&#039;s value as an address in the Memory Tab.&lt;br /&gt;
&lt;br /&gt;
Object variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Display as Object&#039;&#039;&#039;: Displays the variable&#039;s value as an Object. Values include:&lt;br /&gt;
** &#039;&#039;&#039;Slot n&#039;&#039;&#039;: The nth loaded slot.&lt;br /&gt;
** &#039;&#039;&#039;Slot VSn&#039;&#039;&#039;: The nth vacant slot.&lt;br /&gt;
** &#039;&#039;&#039;PG n&#039;&#039;&#039;: Process Group n&#039;s node.&lt;br /&gt;
** &#039;&#039;&#039;(none)&#039;&#039;&#039;: The value 0.&lt;br /&gt;
** &#039;&#039;&#039;(unused object)&#039;&#039;&#039;: The unused object slot.&lt;br /&gt;
** &#039;&#039;&#039;(unknown object)&#039;&#039;&#039;: A value that&#039;s not recognized as a valid object reference.&lt;br /&gt;
* &#039;&#039;&#039;Select Object&#039;&#039;&#039;: Selects the object slot whose object&#039;s address equals the variable&#039;s value.&lt;br /&gt;
&lt;br /&gt;
Triangle variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Select Triangle&#039;&#039;&#039;: Selects a custom triangle in the Triangle Tab whose address equals the variable&#039;s value.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* &#039;&#039;&#039;Display as Checkbox&#039;&#039;&#039;: Toggles whether the variable is displayed as a checkbox.&lt;br /&gt;
* &#039;&#039;&#039;Display as Inverted&#039;&#039;&#039;: Toggles whether the checkbox&#039;s checked state is inverted.&lt;br /&gt;
&lt;br /&gt;
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&#039;s selected, then you&#039;ll see a different set of options from normal, and these options will affect all selected variables. Options prefixed with &amp;quot;Angle:&amp;quot; only affect angles. Choosing the &amp;quot;Default&amp;quot; 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:&lt;br /&gt;
* &#039;&#039;&#039;Highlight...&#039;&#039;&#039;: Highlights the variables by giving them a red or custom-colored outline.&lt;br /&gt;
* &#039;&#039;&#039;Lock...&#039;&#039;&#039;: Locks the variables&#039; values.&lt;br /&gt;
* &#039;&#039;&#039;Fix Address...&#039;&#039;&#039;: Fixes the addresses of the variables.&lt;br /&gt;
* &#039;&#039;&#039;Copy...&#039;&#039;&#039;: Copies the variable&#039;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. &amp;quot;float X = 100f&amp;quot;. 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&#039; original names. For example, entering &amp;quot;my$Value&amp;quot; will result in &amp;quot;float myXValue = 100f&amp;quot; being copied to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste&#039;&#039;&#039;: 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.&lt;br /&gt;
* &#039;&#039;&#039;Round to...&#039;&#039;&#039;: Sets how many digits to round the variables to.&lt;br /&gt;
* &#039;&#039;&#039;Display as Hex...&#039;&#039;&#039;: Sets whether the variables are displayed as hex or decimal.&lt;br /&gt;
* &#039;&#039;&#039;Angle: Signed...&#039;&#039;&#039;: Sets whether the variables are displayed as signed or not.&lt;br /&gt;
* &#039;&#039;&#039;Angle: Units...&#039;&#039;&#039;: Sets the units for the angle variables. See above for more information on the unit options.&lt;br /&gt;
* &#039;&#039;&#039;Angle: Truncate to Multiple of 16...&#039;&#039;&#039;: Sets whether the angles&#039; values are truncated to a multiple of 16.&lt;br /&gt;
* &#039;&#039;&#039;Angle: Constrain to One Revolution...&#039;&#039;&#039;: Sets whether the angles&#039; values are constrained to one revolution.&lt;br /&gt;
* &#039;&#039;&#039;Angle: Reverse...&#039;&#039;&#039;: Sets whether the angles are displayed as the reverse of what it actually is.&lt;br /&gt;
* &#039;&#039;&#039;Angle: Display as Hex...&#039;&#039;&#039;: Sets whether the angle variables are displayed as hex or decimal.&lt;br /&gt;
* &#039;&#039;&#039;Show Variable XML&#039;&#039;&#039;: Shows the XML that represents the variables.&lt;br /&gt;
* &#039;&#039;&#039;Show Variable Info&#039;&#039;&#039;: Shows info on the variables in table form, including Name, Type, Base + Offset, N64 Address, and Emulator Address.&lt;br /&gt;
* &#039;&#039;&#039;Background Color...&#039;&#039;&#039;: Changes the variables background color.&lt;br /&gt;
* &#039;&#039;&#039;Move...&#039;&#039;&#039;: Options for moving variables.&lt;br /&gt;
** &#039;&#039;&#039;Start Move&#039;&#039;&#039;: Adds the selected variables to the moving-variables-clipboard.&lt;br /&gt;
** &#039;&#039;&#039;End Move&#039;&#039;&#039;: Moves the variables on the moving-variables-clipboard to the location of the selected variables.&lt;br /&gt;
** &#039;&#039;&#039;Clear Move&#039;&#039;&#039;: Clears the selected-variables-clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Remove&#039;&#039;&#039;: Removes the &lt;br /&gt;
* &#039;&#039;&#039;Rename&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Controller&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Triplet Controller&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Pop Out&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Add to Tab...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Add to Custom Tab&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* &#039;&#039;&#039;Double Click&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;Click + Shift + Number&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Number&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + S&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + T&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + M&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + P&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + N&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + F&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + H&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + L&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + D&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + R&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + C&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + B&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Escape&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Backspace&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Delete&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + X&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Backtick&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Z&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Minus&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Plus&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Q&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + O&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The various kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are various kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A Simple Controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons are inverted, i.e. swapping whether subtraction is on the left and addition is on the right or vice versa. Simple Controllers are found on the left panel of several tabs of STROOP.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;: A Triplet Controller is in charge of manipulating a triplet of variables, usually a set of (x,y,z) Euler coordinates or (theta,phi,radius) spherical coordinates. It consists of 2 sets of controls:&lt;br /&gt;
** &#039;&#039;&#039;Square Controls&#039;&#039;&#039;: On the left are the Square Controls, consisting of 8 buttons and a textbox arranged in square formation. For Euler coordinates, these controls manipulate the x and z coordinates. For spherical coordinates, these controls manipulate the theta and phi coordinates. In both cases, the buttons will add to or subtract from the corresponding variable(s) by the amount in the textbox. Note that you can right click on the buttons for more options so that you can customize the orientation of the buttons. Specifically, this allows you to rotate the buttons any one of eight ways, as well as invert the orientation (i.e. flip it).&lt;br /&gt;
** &#039;&#039;&#039;Line Controls&#039;&#039;&#039;: One the right are the Line Controls, consisting of 2 buttons and a textbox arranged in a vertical line formation. For Euler coordinates, these controls manipulate the y coordinate. For spherical coordinates, these controls manipulate the radius coordinate. In both cases, the buttons will add to or subtract from the corresponding variable by the amount in the textbox. Note that you can right click on the buttons for options to invert the buttons.&lt;br /&gt;
: Triplet controllers also frequently have a Relative Checkbox in the upper right, which toggles whether the controls manipulate the variables absolutely or relative to some angle. When in relative mode, the labels on the buttons will change to emphasize this. Specifically, F = forward, B = backward, L = left, R = right, U = up, D = down. Triplet Controllers are found on the left panel of several tabs of STROOP. However, you can also create your own Triplet Controller by selecting 3 or 4 variables to represent the x,y,z and optional angle variables, right clicking, and choosing to open a Triplet Controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;: An advanced controller is in charge of manipulating one or more variables. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name(s) of the variable(s) being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Fix Address Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are using fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Value Textbox&#039;&#039;&#039;: This displays the current value(s) of the variable(s). The background color is red if the variable(s) have fixed addresses, blue if the variable(s) don&#039;t have fixed addresses, and purple if some variables do and some variables don&#039;t have fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Lock Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are locked.&lt;br /&gt;
** &#039;&#039;&#039;Subtraction Button&#039;&#039;&#039;: This is used to subtract a value from the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Addition/Subtraction Textbox&#039;&#039;&#039;: This is the value that&#039;s used by the Addition Button and Subtraction Button.&lt;br /&gt;
** &#039;&#039;&#039;Addition Button&#039;&#039;&#039;: This is used to add a value to the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get Button&#039;&#039;&#039;: This gets the value(s) of the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get/Set Textbox&#039;&#039;&#039;: This is the value used by the Get Button and Set Button.&lt;br /&gt;
** &#039;&#039;&#039;Set Button&#039;&#039;&#039;: This sets the value(s) of the variable(s).&lt;br /&gt;
: Additional notes:&lt;br /&gt;
:* In the case of setting multiple variables, you can set all of the variables to different values by separating the values in the textbox with commas. Alternatively, leave just one value in the textbox to set all variables to that one value. The same applies to adding and subtracting values.&lt;br /&gt;
:* The add and subtract buttons can be inverted by right clicking on them and choosing to invert.&lt;br /&gt;
:* You can click on the add/subtract button and hold the mouse down while holding control in order to continuously add to or subtract from the variables. Alternatively, right click on either button and choose to Start Continuous Add (or Subtract) and then later choose to Stop Continuous Add (or Subtract).&lt;br /&gt;
: You can create an Advanced Controller for a variable by clicking on the variable while holding C. Alternatively, you can create an Advanced Controller for multiple variables by selecting multiple variables, right clicking, and choosing to open a controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bit Controller&#039;&#039;&#039;: A Bit Controller is in charge of manipulating one variable. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name of the variable being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Decimal Value&#039;&#039;&#039;: This shows the decimal value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Hex Value&#039;&#039;&#039;: This shows the hex value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Binary Value&#039;&#039;&#039;: This shows the binary value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Value Table&#039;&#039;&#039;: This shows various representations of the bytes of the variable, including the decimal representation, hex representation, and binary representation. It also provides a set of checkboxes that can be used to toggle each bit of the variable. For floats, these checkboxes are colored according to the bits&#039; role in the float, as blue represents sign, red represents exponent, and green represents mantissa.&lt;br /&gt;
: Note that for floats, you can right click on the empty space of the controller, and change what the textboxes display. Specifically, they can be set to display the sign, exponent, and mantissa values of the float. You can create a Bit Controller for a variable by clicking on the variable while holding B.&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;br /&gt;
&lt;br /&gt;
== Painting Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7734</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7734"/>
		<updated>2019-04-14T19:10:11Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Variables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variable Panel ==&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
Variables are found in a Variable Panel. A variable has 2 parts to it: a name (on the left) and a value (on the right). On every STROOP update, the value updates. You can set a variable&#039;s value by double clicking on the value, entering text, and then pressing enter. Some variables are values in memory, while other variables are calculated manually (referred to as special variables). While memory variables can always be set, special variables may or may not be able to be set. If you try to set a variable and it doesn&#039;t go through (either because the variable can&#039;t be set or because you entered an illegal value), then the variable will flash red to indicate this.&lt;br /&gt;
&lt;br /&gt;
All variables come with the following options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Highlight&#039;&#039;&#039;: Highlights the variable by giving it a red outline.&lt;br /&gt;
* &#039;&#039;&#039;Lock&#039;&#039;&#039;: Locks the variable&#039;s value. Note that the variable&#039;s value can still be edited while it&#039;s locked.&lt;br /&gt;
* &#039;&#039;&#039;Copy&#039;&#039;&#039;: Copies the variable&#039;s value (with no rounding) to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste&#039;&#039;&#039;: Pastes the clipboard value to the variable.&lt;br /&gt;
* &#039;&#039;&#039;Panel Options&#039;&#039;&#039;: Opens up the Variable Panel options.&lt;br /&gt;
* &#039;&#039;&#039;Open Controller&#039;&#039;&#039;: Opens up an Advanced Controller for the variable.&lt;br /&gt;
* &#039;&#039;&#039;Add to Custom Tab&#039;&#039;&#039;: Adds the variable to the Custom Tab.&lt;br /&gt;
* &#039;&#039;&#039;Fix Address&#039;&#039;&#039;: Fixes the address of the variable.&lt;br /&gt;
* &#039;&#039;&#039;Rename&#039;&#039;&#039;: Allows you to rename the variable.&lt;br /&gt;
* &#039;&#039;&#039;Remove&#039;&#039;&#039;: Removes the variable from the Variable Panel.&lt;br /&gt;
&lt;br /&gt;
Number variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Round to ...&#039;&#039;&#039;: Sets how many digits to round the variable to.&lt;br /&gt;
* &#039;&#039;&#039;Display as Hex&#039;&#039;&#039;: Toggles whether the variable is displayed as hex or decimal.&lt;br /&gt;
&lt;br /&gt;
Angle variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Signed&#039;&#039;&#039;: Toggles whether the variable is displayed as signed or not.&lt;br /&gt;
* &#039;&#039;&#039;Units...&#039;&#039;&#039;: Sets the units for the angle variable. The unit options are:&lt;br /&gt;
** &#039;&#039;&#039;In-Game Units&#039;&#039;&#039;: These are the units that the game uses. One revolution is 65536 in-game units.&lt;br /&gt;
** &#039;&#039;&#039;HAU&#039;&#039;&#039;: Standing for hexadecimal angle units, these are in-game units divided by 16. Thus, one revolution is 4096 HAU. These are useful because angles that fall under the same HAU value use the same entry in the game&#039;s trig table, since angles are truncated to the closest multiple of 16 before accessing the table.&lt;br /&gt;
** &#039;&#039;&#039;Degrees&#039;&#039;&#039;: One revolution is 360 degrees.&lt;br /&gt;
** &#039;&#039;&#039;Radians&#039;&#039;&#039;: One revolution is 2*pi radians.&lt;br /&gt;
** &#039;&#039;&#039;Revolutions&#039;&#039;&#039;: One revolution is one revolution.&lt;br /&gt;
* &#039;&#039;&#039;Truncate to Multiple of 16&#039;&#039;&#039;: Toggles whether the angle&#039;s value is truncated to a multiple of 16. This is useful since angles that truncated to same the closest multiple of 16 use the same entry in the game&#039;s trig table.&lt;br /&gt;
* &#039;&#039;&#039;Constrain to One Revolution&#039;&#039;&#039;: Toggles whether the angle&#039;s value is constrained to one revolution. For example, an angle that&#039;s unsigned and in angle units would be constrained to the range [0, 65535], whereas an angle that&#039;s signed and in angle units would be constrained to the range [-32768, 32767].&lt;br /&gt;
* &#039;&#039;&#039;Reverse&#039;&#039;&#039;: Toggles whether the angle is displayed as the reverse of what it actually is.&lt;br /&gt;
&lt;br /&gt;
Address variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;View Address&#039;&#039;&#039;: Views the variable&#039;s value as an address in the Memory Tab.&lt;br /&gt;
&lt;br /&gt;
Object variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Display as Object&#039;&#039;&#039;: Displays the variable&#039;s value as an Object. Values include:&lt;br /&gt;
** &#039;&#039;&#039;Slot n&#039;&#039;&#039;: The nth loaded slot.&lt;br /&gt;
** &#039;&#039;&#039;Slot VSn&#039;&#039;&#039;: The nth vacant slot.&lt;br /&gt;
** &#039;&#039;&#039;PG n&#039;&#039;&#039;: Process Group n&#039;s node.&lt;br /&gt;
** &#039;&#039;&#039;(none)&#039;&#039;&#039;: The value 0.&lt;br /&gt;
** &#039;&#039;&#039;(unused object)&#039;&#039;&#039;: The unused object slot.&lt;br /&gt;
** &#039;&#039;&#039;(unknown object)&#039;&#039;&#039;: A value that&#039;s not recognized as a valid object reference.&lt;br /&gt;
* &#039;&#039;&#039;Select Object&#039;&#039;&#039;: Selects the object slot whose object&#039;s address equals the variable&#039;s value.&lt;br /&gt;
&lt;br /&gt;
Triangle variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Select Triangle&#039;&#039;&#039;: Selects a custom triangle in the Triangle Tab whose address equals the variable&#039;s value.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* &#039;&#039;&#039;Display as Checkbox&#039;&#039;&#039;: Toggles whether the variable is displayed as a checkbox.&lt;br /&gt;
* &#039;&#039;&#039;Display as Inverted&#039;&#039;&#039;: Toggles whether the checkbox&#039;s checked state is inverted.&lt;br /&gt;
&lt;br /&gt;
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&#039;s selected, then you&#039;ll see a different set of options from normal, and these options will affect all selected variables. Options prefixed with &amp;quot;Angle:&amp;quot; only affect angles. Choosing the &amp;quot;Default&amp;quot; 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:&lt;br /&gt;
* &#039;&#039;&#039;Highlight...&#039;&#039;&#039;: Highlights the variables by giving them a red or custom-colored outline.&lt;br /&gt;
* &#039;&#039;&#039;Lock...&#039;&#039;&#039;: Locks the variables&#039; values.&lt;br /&gt;
* &#039;&#039;&#039;Fix Address...&#039;&#039;&#039;: Fixes the addresses of the variables.&lt;br /&gt;
* &#039;&#039;&#039;Copy...&#039;&#039;&#039;: Copies the variable&#039;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. &amp;quot;float X = 100f&amp;quot;. For more control over what the variables are called, hold control while clicking this option. This will open up a dialog where you can enter text, where the $ represents the variables&#039; original names. For example, entering &amp;quot;my$Value&amp;quot; will result in &amp;quot;float myXValue = 100f&amp;quot; being copied to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste&#039;&#039;&#039;: 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.&lt;br /&gt;
* &#039;&#039;&#039;Round to...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Display as Hex...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Angle: Signed...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Angle: Units...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Angle: Truncate to Multiple of 16...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Angle: Constrain to One Revolution...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Angle: Reverse...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Angle: Display as Hex...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Show Variable XML&#039;&#039;&#039;: Shows the XML that represents the variables.&lt;br /&gt;
* &#039;&#039;&#039;Show Variable Info&#039;&#039;&#039;: Shows info on the variables in table form, including Name, Type, Base + Offset, N64 Address, and Emulator Address.&lt;br /&gt;
* &#039;&#039;&#039;Background Color...&#039;&#039;&#039;: Changes the variables background color.&lt;br /&gt;
* &#039;&#039;&#039;Move...&#039;&#039;&#039;: Options for moving variables.&lt;br /&gt;
** &#039;&#039;&#039;Start Move&#039;&#039;&#039;: Adds the selected variables to the moving-variables-clipboard.&lt;br /&gt;
** &#039;&#039;&#039;End Move&#039;&#039;&#039;: Moves the variables on the moving-variables-clipboard to the location of the selected variables.&lt;br /&gt;
** &#039;&#039;&#039;Clear Move&#039;&#039;&#039;: Clears the selected-variables-clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Remove&#039;&#039;&#039;: Removes the &lt;br /&gt;
* &#039;&#039;&#039;Rename&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Controller&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Triplet Controller&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Pop Out&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Add to Tab...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Add to Custom Tab&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* &#039;&#039;&#039;Double Click&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;Click + Shift + Number&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Number&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + S&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + T&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + M&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + P&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + N&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + F&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + H&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + L&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + D&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + R&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + C&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + B&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Escape&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Backspace&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Delete&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + X&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Backtick&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Z&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Minus&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Plus&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Q&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + O&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The various kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are various kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A Simple Controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons are inverted, i.e. swapping whether subtraction is on the left and addition is on the right or vice versa. Simple Controllers are found on the left panel of several tabs of STROOP.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;: A Triplet Controller is in charge of manipulating a triplet of variables, usually a set of (x,y,z) Euler coordinates or (theta,phi,radius) spherical coordinates. It consists of 2 sets of controls:&lt;br /&gt;
** &#039;&#039;&#039;Square Controls&#039;&#039;&#039;: On the left are the Square Controls, consisting of 8 buttons and a textbox arranged in square formation. For Euler coordinates, these controls manipulate the x and z coordinates. For spherical coordinates, these controls manipulate the theta and phi coordinates. In both cases, the buttons will add to or subtract from the corresponding variable(s) by the amount in the textbox. Note that you can right click on the buttons for more options so that you can customize the orientation of the buttons. Specifically, this allows you to rotate the buttons any one of eight ways, as well as invert the orientation (i.e. flip it).&lt;br /&gt;
** &#039;&#039;&#039;Line Controls&#039;&#039;&#039;: One the right are the Line Controls, consisting of 2 buttons and a textbox arranged in a vertical line formation. For Euler coordinates, these controls manipulate the y coordinate. For spherical coordinates, these controls manipulate the radius coordinate. In both cases, the buttons will add to or subtract from the corresponding variable by the amount in the textbox. Note that you can right click on the buttons for options to invert the buttons.&lt;br /&gt;
: Triplet controllers also frequently have a Relative Checkbox in the upper right, which toggles whether the controls manipulate the variables absolutely or relative to some angle. When in relative mode, the labels on the buttons will change to emphasize this. Specifically, F = forward, B = backward, L = left, R = right, U = up, D = down. Triplet Controllers are found on the left panel of several tabs of STROOP. However, you can also create your own Triplet Controller by selecting 3 or 4 variables to represent the x,y,z and optional angle variables, right clicking, and choosing to open a Triplet Controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;: An advanced controller is in charge of manipulating one or more variables. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name(s) of the variable(s) being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Fix Address Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are using fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Value Textbox&#039;&#039;&#039;: This displays the current value(s) of the variable(s). The background color is red if the variable(s) have fixed addresses, blue if the variable(s) don&#039;t have fixed addresses, and purple if some variables do and some variables don&#039;t have fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Lock Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are locked.&lt;br /&gt;
** &#039;&#039;&#039;Subtraction Button&#039;&#039;&#039;: This is used to subtract a value from the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Addition/Subtraction Textbox&#039;&#039;&#039;: This is the value that&#039;s used by the Addition Button and Subtraction Button.&lt;br /&gt;
** &#039;&#039;&#039;Addition Button&#039;&#039;&#039;: This is used to add a value to the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get Button&#039;&#039;&#039;: This gets the value(s) of the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get/Set Textbox&#039;&#039;&#039;: This is the value used by the Get Button and Set Button.&lt;br /&gt;
** &#039;&#039;&#039;Set Button&#039;&#039;&#039;: This sets the value(s) of the variable(s).&lt;br /&gt;
: Additional notes:&lt;br /&gt;
:* In the case of setting multiple variables, you can set all of the variables to different values by separating the values in the textbox with commas. Alternatively, leave just one value in the textbox to set all variables to that one value. The same applies to adding and subtracting values.&lt;br /&gt;
:* The add and subtract buttons can be inverted by right clicking on them and choosing to invert.&lt;br /&gt;
:* You can click on the add/subtract button and hold the mouse down while holding control in order to continuously add to or subtract from the variables. Alternatively, right click on either button and choose to Start Continuous Add (or Subtract) and then later choose to Stop Continuous Add (or Subtract).&lt;br /&gt;
: You can create an Advanced Controller for a variable by clicking on the variable while holding C. Alternatively, you can create an Advanced Controller for multiple variables by selecting multiple variables, right clicking, and choosing to open a controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bit Controller&#039;&#039;&#039;: A Bit Controller is in charge of manipulating one variable. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name of the variable being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Decimal Value&#039;&#039;&#039;: This shows the decimal value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Hex Value&#039;&#039;&#039;: This shows the hex value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Binary Value&#039;&#039;&#039;: This shows the binary value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Value Table&#039;&#039;&#039;: This shows various representations of the bytes of the variable, including the decimal representation, hex representation, and binary representation. It also provides a set of checkboxes that can be used to toggle each bit of the variable. For floats, these checkboxes are colored according to the bits&#039; role in the float, as blue represents sign, red represents exponent, and green represents mantissa.&lt;br /&gt;
: Note that for floats, you can right click on the empty space of the controller, and change what the textboxes display. Specifically, they can be set to display the sign, exponent, and mantissa values of the float. You can create a Bit Controller for a variable by clicking on the variable while holding B.&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;br /&gt;
&lt;br /&gt;
== Painting Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7733</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7733"/>
		<updated>2019-04-14T18:59:26Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Variables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variable Panel ==&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
Variables are found in a Variable Panel. A variable has 2 parts to it: a name (on the left) and a value (on the right). On every STROOP update, the value updates. You can set a variable&#039;s value by double clicking on the value, entering text, and then pressing enter. Some variables are values in memory, while other variables are calculated manually (referred to as special variables). While memory variables can always be set, special variables may or may not be able to be set. If you try to set a variable and it doesn&#039;t go through (either because the variable can&#039;t be set or because you entered an illegal value), then the variable will flash red to indicate this.&lt;br /&gt;
&lt;br /&gt;
All variables come with the following options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Highlight&#039;&#039;&#039;: Highlights the variable by giving it a red outline.&lt;br /&gt;
* &#039;&#039;&#039;Lock&#039;&#039;&#039;: Locks the variable&#039;s value. Note that the variable&#039;s value can still be edited while it&#039;s locked.&lt;br /&gt;
* &#039;&#039;&#039;Copy&#039;&#039;&#039;: Copies the variable&#039;s value (with no rounding) to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste&#039;&#039;&#039;: Pastes the clipboard value to the variable.&lt;br /&gt;
* &#039;&#039;&#039;Panel Options&#039;&#039;&#039;: Opens up the Variable Panel options.&lt;br /&gt;
* &#039;&#039;&#039;Open Controller&#039;&#039;&#039;: Opens up an Advanced Controller for the variable.&lt;br /&gt;
* &#039;&#039;&#039;Add to Custom Tab&#039;&#039;&#039;: Adds the variable to the Custom Tab.&lt;br /&gt;
* &#039;&#039;&#039;Fix Address&#039;&#039;&#039;: Fixes the address of the variable.&lt;br /&gt;
* &#039;&#039;&#039;Rename&#039;&#039;&#039;: Allows you to rename the variable.&lt;br /&gt;
* &#039;&#039;&#039;Remove&#039;&#039;&#039;: Removes the variable from the Variable Panel.&lt;br /&gt;
&lt;br /&gt;
Number variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Round to ...&#039;&#039;&#039;: Sets how many digits to round the variable to.&lt;br /&gt;
* &#039;&#039;&#039;Display as Hex&#039;&#039;&#039;: Toggles whether the variable is displayed as hex or decimal.&lt;br /&gt;
&lt;br /&gt;
Angle variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Signed&#039;&#039;&#039;: Toggles whether the variable is displayed as signed or not.&lt;br /&gt;
* &#039;&#039;&#039;Units...&#039;&#039;&#039;: Sets the units for the angle variable. The unit options are:&lt;br /&gt;
** &#039;&#039;&#039;In-Game Units&#039;&#039;&#039;: These are the units that the game uses. One revolution is 65536 in-game units.&lt;br /&gt;
** &#039;&#039;&#039;HAU&#039;&#039;&#039;: Standing for hexadecimal angle units, these are in-game units divided by 16. Thus, one revolution is 4096 HAU. These are useful because angles that fall under the same HAU value use the same entry in the game&#039;s trig table, since angles are truncated to the closest multiple of 16 before accessing the table.&lt;br /&gt;
** &#039;&#039;&#039;Degrees&#039;&#039;&#039;: One revolution is 360 degrees.&lt;br /&gt;
** &#039;&#039;&#039;Radians&#039;&#039;&#039;: One revolution is 2*pi radians.&lt;br /&gt;
** &#039;&#039;&#039;Revolutions&#039;&#039;&#039;: One revolution is one revolution.&lt;br /&gt;
* &#039;&#039;&#039;Truncate to Multiple of 16&#039;&#039;&#039;: Toggles whether the angle&#039;s value is truncated to a multiple of 16. This is useful since angles that truncated to same the closest multiple of 16 use the same entry in the game&#039;s trig table.&lt;br /&gt;
* &#039;&#039;&#039;Constrain to One Revolution&#039;&#039;&#039;: Toggles whether the angle&#039;s value is constrained to one revolution. For example, an angle that&#039;s unsigned and in angle units would be constrained to the range [0, 65535], whereas an angle that&#039;s signed and in angle units would be constrained to the range [-32768, 32767].&lt;br /&gt;
* &#039;&#039;&#039;Reverse&#039;&#039;&#039;: Toggles whether the angle is displayed as the reverse of what it actually is.&lt;br /&gt;
&lt;br /&gt;
Address variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;View Address&#039;&#039;&#039;: Views the variable&#039;s value as an address in the Memory Tab.&lt;br /&gt;
&lt;br /&gt;
Object variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Display as Object&#039;&#039;&#039;: Displays the variable&#039;s value as an Object. Values include:&lt;br /&gt;
** &#039;&#039;&#039;Slot n&#039;&#039;&#039;: The nth loaded slot.&lt;br /&gt;
** &#039;&#039;&#039;Slot VSn&#039;&#039;&#039;: The nth vacant slot.&lt;br /&gt;
** &#039;&#039;&#039;PG n&#039;&#039;&#039;: Process Group n&#039;s node.&lt;br /&gt;
** &#039;&#039;&#039;(none)&#039;&#039;&#039;: The value 0.&lt;br /&gt;
** &#039;&#039;&#039;(unused object)&#039;&#039;&#039;: The unused object slot.&lt;br /&gt;
** &#039;&#039;&#039;(unknown object)&#039;&#039;&#039;: A value that&#039;s not recognized as a valid object reference.&lt;br /&gt;
* &#039;&#039;&#039;Select Object&#039;&#039;&#039;: Selects the object slot whose object&#039;s address equals the variable&#039;s value.&lt;br /&gt;
&lt;br /&gt;
Triangle variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Select Triangle&#039;&#039;&#039;: Selects a custom triangle in the Triangle Tab whose address equals the variable&#039;s value.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* &#039;&#039;&#039;Display as Checkbox&#039;&#039;&#039;: Toggles whether the variable is displayed as a checkbox.&lt;br /&gt;
* &#039;&#039;&#039;Display as Inverted&#039;&#039;&#039;: Toggles whether the checkbox&#039;s checked state is inverted.&lt;br /&gt;
&lt;br /&gt;
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&#039;s selected, then you&#039;ll see a different set of options from normal, and these options will affect all selected variables. Options prefixed with &amp;quot;Angle:&amp;quot; only affect angles. Choosing the &amp;quot;Default&amp;quot; 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:&lt;br /&gt;
* &#039;&#039;&#039;Highlight...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Lock...&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;Fix Address...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Copy...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Paste&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Round to...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Display as Hex...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Angle: Signed...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Angle: Units...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Angle: Truncate to Multiple of 16...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Angle: Constrain to One Revolution...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Angle: Reverse...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Angle: Display as Hex...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Show Variable XML&#039;&#039;&#039;: Shows the XML that represents the variables.&lt;br /&gt;
* &#039;&#039;&#039;Show Variable Info&#039;&#039;&#039;: Shows info on the variables in table form, including Name, Type, Base + Offset, N64 Address, and Emulator Address.&lt;br /&gt;
* &#039;&#039;&#039;Background Color...&#039;&#039;&#039;: Changes the variables background color.&lt;br /&gt;
* &#039;&#039;&#039;Move...&#039;&#039;&#039;: Options for moving variables.&lt;br /&gt;
** &#039;&#039;&#039;Start Move&#039;&#039;&#039;: Adds the selected variables to the moving-variables-clipboard.&lt;br /&gt;
** &#039;&#039;&#039;End Move&#039;&#039;&#039;: Moves the variables on the moving-variables-clipboard to the location of the selected variables.&lt;br /&gt;
** &#039;&#039;&#039;Clear Move&#039;&#039;&#039;: Clears the selected-variables-clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Remove&#039;&#039;&#039;: Removes the &lt;br /&gt;
* &#039;&#039;&#039;Rename&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Controller&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Triplet Controller&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Pop Out&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Add to Tab...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Add to Custom Tab&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* &#039;&#039;&#039;Double Click&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;Click + Shift + Number&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Number&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + S&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + T&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + M&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + P&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + N&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + F&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + H&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + L&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + D&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + R&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + C&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + B&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Escape&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Backspace&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Delete&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + X&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Backtick&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Z&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Minus&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Plus&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Q&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + O&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The various kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are various kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A Simple Controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons are inverted, i.e. swapping whether subtraction is on the left and addition is on the right or vice versa. Simple Controllers are found on the left panel of several tabs of STROOP.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;: A Triplet Controller is in charge of manipulating a triplet of variables, usually a set of (x,y,z) Euler coordinates or (theta,phi,radius) spherical coordinates. It consists of 2 sets of controls:&lt;br /&gt;
** &#039;&#039;&#039;Square Controls&#039;&#039;&#039;: On the left are the Square Controls, consisting of 8 buttons and a textbox arranged in square formation. For Euler coordinates, these controls manipulate the x and z coordinates. For spherical coordinates, these controls manipulate the theta and phi coordinates. In both cases, the buttons will add to or subtract from the corresponding variable(s) by the amount in the textbox. Note that you can right click on the buttons for more options so that you can customize the orientation of the buttons. Specifically, this allows you to rotate the buttons any one of eight ways, as well as invert the orientation (i.e. flip it).&lt;br /&gt;
** &#039;&#039;&#039;Line Controls&#039;&#039;&#039;: One the right are the Line Controls, consisting of 2 buttons and a textbox arranged in a vertical line formation. For Euler coordinates, these controls manipulate the y coordinate. For spherical coordinates, these controls manipulate the radius coordinate. In both cases, the buttons will add to or subtract from the corresponding variable by the amount in the textbox. Note that you can right click on the buttons for options to invert the buttons.&lt;br /&gt;
: Triplet controllers also frequently have a Relative Checkbox in the upper right, which toggles whether the controls manipulate the variables absolutely or relative to some angle. When in relative mode, the labels on the buttons will change to emphasize this. Specifically, F = forward, B = backward, L = left, R = right, U = up, D = down. Triplet Controllers are found on the left panel of several tabs of STROOP. However, you can also create your own Triplet Controller by selecting 3 or 4 variables to represent the x,y,z and optional angle variables, right clicking, and choosing to open a Triplet Controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;: An advanced controller is in charge of manipulating one or more variables. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name(s) of the variable(s) being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Fix Address Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are using fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Value Textbox&#039;&#039;&#039;: This displays the current value(s) of the variable(s). The background color is red if the variable(s) have fixed addresses, blue if the variable(s) don&#039;t have fixed addresses, and purple if some variables do and some variables don&#039;t have fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Lock Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are locked.&lt;br /&gt;
** &#039;&#039;&#039;Subtraction Button&#039;&#039;&#039;: This is used to subtract a value from the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Addition/Subtraction Textbox&#039;&#039;&#039;: This is the value that&#039;s used by the Addition Button and Subtraction Button.&lt;br /&gt;
** &#039;&#039;&#039;Addition Button&#039;&#039;&#039;: This is used to add a value to the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get Button&#039;&#039;&#039;: This gets the value(s) of the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get/Set Textbox&#039;&#039;&#039;: This is the value used by the Get Button and Set Button.&lt;br /&gt;
** &#039;&#039;&#039;Set Button&#039;&#039;&#039;: This sets the value(s) of the variable(s).&lt;br /&gt;
: Additional notes:&lt;br /&gt;
:* In the case of setting multiple variables, you can set all of the variables to different values by separating the values in the textbox with commas. Alternatively, leave just one value in the textbox to set all variables to that one value. The same applies to adding and subtracting values.&lt;br /&gt;
:* The add and subtract buttons can be inverted by right clicking on them and choosing to invert.&lt;br /&gt;
:* You can click on the add/subtract button and hold the mouse down while holding control in order to continuously add to or subtract from the variables. Alternatively, right click on either button and choose to Start Continuous Add (or Subtract) and then later choose to Stop Continuous Add (or Subtract).&lt;br /&gt;
: You can create an Advanced Controller for a variable by clicking on the variable while holding C. Alternatively, you can create an Advanced Controller for multiple variables by selecting multiple variables, right clicking, and choosing to open a controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bit Controller&#039;&#039;&#039;: A Bit Controller is in charge of manipulating one variable. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name of the variable being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Decimal Value&#039;&#039;&#039;: This shows the decimal value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Hex Value&#039;&#039;&#039;: This shows the hex value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Binary Value&#039;&#039;&#039;: This shows the binary value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Value Table&#039;&#039;&#039;: This shows various representations of the bytes of the variable, including the decimal representation, hex representation, and binary representation. It also provides a set of checkboxes that can be used to toggle each bit of the variable. For floats, these checkboxes are colored according to the bits&#039; role in the float, as blue represents sign, red represents exponent, and green represents mantissa.&lt;br /&gt;
: Note that for floats, you can right click on the empty space of the controller, and change what the textboxes display. Specifically, they can be set to display the sign, exponent, and mantissa values of the float. You can create a Bit Controller for a variable by clicking on the variable while holding B.&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;br /&gt;
&lt;br /&gt;
== Painting Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7732</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7732"/>
		<updated>2019-04-14T18:30:08Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Variables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variable Panel ==&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
Variables are found in a Variable Panel. A variable has 2 parts to it: a name (on the left) and a value (on the right). On every STROOP update, the value updates. You can set a variable&#039;s value by double clicking on the value, entering text, and then pressing enter. Some variables are values in memory, while other variables are calculated manually (referred to as special variables). While memory variables can always be set, special variables may or may not be able to be set. If you try to set a variable and it doesn&#039;t go through (either because the variable can&#039;t be set or because you entered an illegal value), then the variable will flash red to indicate this.&lt;br /&gt;
&lt;br /&gt;
All variables come with the following options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Highlight&#039;&#039;&#039;: Highlights the variable by giving it a red outline.&lt;br /&gt;
* &#039;&#039;&#039;Lock&#039;&#039;&#039;: Locks the variable&#039;s value. Note that the variable&#039;s value can still be edited while it&#039;s locked.&lt;br /&gt;
* &#039;&#039;&#039;Copy&#039;&#039;&#039;: Copies the variable&#039;s value (with no rounding) to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste&#039;&#039;&#039;: Pastes the clipboard value to the variable.&lt;br /&gt;
* &#039;&#039;&#039;Panel Options&#039;&#039;&#039;: Opens up the Variable Panel options.&lt;br /&gt;
* &#039;&#039;&#039;Open Controller&#039;&#039;&#039;: Opens up an Advanced Controller for the variable.&lt;br /&gt;
* &#039;&#039;&#039;Add to Custom Tab&#039;&#039;&#039;: Adds the variable to the Custom Tab.&lt;br /&gt;
* &#039;&#039;&#039;Fix Address&#039;&#039;&#039;: Fixes the address of the variable.&lt;br /&gt;
* &#039;&#039;&#039;Rename&#039;&#039;&#039;: Allows you to rename the variable.&lt;br /&gt;
* &#039;&#039;&#039;Remove&#039;&#039;&#039;: Removes the variable from the Variable Panel.&lt;br /&gt;
&lt;br /&gt;
Number variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Round to ...&#039;&#039;&#039;: Sets how many digits to round the variable to.&lt;br /&gt;
* &#039;&#039;&#039;Display as Hex&#039;&#039;&#039;: Toggles whether the variable is displayed as hex or decimal.&lt;br /&gt;
&lt;br /&gt;
Angle variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Signed&#039;&#039;&#039;: Toggles whether the variable is displayed as signed or not.&lt;br /&gt;
* &#039;&#039;&#039;Units...&#039;&#039;&#039;: Sets the units for the angle variable. The unit options are:&lt;br /&gt;
** &#039;&#039;&#039;In-Game Units&#039;&#039;&#039;: These are the units that the game uses. One revolution is 65536 in-game units.&lt;br /&gt;
** &#039;&#039;&#039;HAU&#039;&#039;&#039;: Standing for hexadecimal angle units, these are in-game units divided by 16. Thus, one revolution is 4096 HAU. These are useful because angles that fall under the same HAU value use the same entry in the game&#039;s trig table, since angles are truncated to the closest multiple of 16 before accessing the table.&lt;br /&gt;
** &#039;&#039;&#039;Degrees&#039;&#039;&#039;: One revolution is 360 degrees.&lt;br /&gt;
** &#039;&#039;&#039;Radians&#039;&#039;&#039;: One revolution is 2*pi radians.&lt;br /&gt;
** &#039;&#039;&#039;Revolutions&#039;&#039;&#039;: One revolution is one revolution.&lt;br /&gt;
* &#039;&#039;&#039;Truncate to Multiple of 16&#039;&#039;&#039;: Toggles whether the angle&#039;s value is truncated to a multiple of 16. This is useful since angles that truncated to same the closest multiple of 16 use the same entry in the game&#039;s trig table.&lt;br /&gt;
* &#039;&#039;&#039;Constrain to One Revolution&#039;&#039;&#039;: Toggles whether the angle&#039;s value is constrained to one revolution. For example, an angle that&#039;s unsigned and in angle units would be constrained to the range [0, 65535], whereas an angle that&#039;s signed and in angle units would be constrained to the range [-32768, 32767].&lt;br /&gt;
* &#039;&#039;&#039;Reverse&#039;&#039;&#039;: Toggles whether the angle is displayed as the reverse of what it actually is.&lt;br /&gt;
&lt;br /&gt;
Address variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;View Address&#039;&#039;&#039;: Views the variable&#039;s value as an address in the Memory Tab.&lt;br /&gt;
&lt;br /&gt;
Object variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Display as Object&#039;&#039;&#039;: Displays the variable&#039;s value as an Object. Values include:&lt;br /&gt;
** &#039;&#039;&#039;Slot n&#039;&#039;&#039;: The nth loaded slot.&lt;br /&gt;
** &#039;&#039;&#039;Slot VSn&#039;&#039;&#039;: The nth vacant slot.&lt;br /&gt;
** &#039;&#039;&#039;PG n&#039;&#039;&#039;: Process Group n&#039;s node.&lt;br /&gt;
** &#039;&#039;&#039;(none)&#039;&#039;&#039;: The value 0.&lt;br /&gt;
** &#039;&#039;&#039;(unused object)&#039;&#039;&#039;: The unused object slot.&lt;br /&gt;
** &#039;&#039;&#039;(unknown object)&#039;&#039;&#039;: A value that&#039;s not recognized as a valid object reference.&lt;br /&gt;
* &#039;&#039;&#039;Select Object&#039;&#039;&#039;: Selects the object slot whose object&#039;s address equals the variable&#039;s value.&lt;br /&gt;
&lt;br /&gt;
Triangle variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Select Triangle&#039;&#039;&#039;: Selects a custom triangle in the Triangle Tab whose address equals the variable&#039;s value.&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* &#039;&#039;&#039;Display as Checkbox&#039;&#039;&#039;: Toggles whether the variable is displayed as a checkbox.&lt;br /&gt;
* &#039;&#039;&#039;Display as Inverted&#039;&#039;&#039;: Toggles whether the checkbox&#039;s checked state is inverted.&lt;br /&gt;
&lt;br /&gt;
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&#039;s selected, then you&#039;ll see a different set of options from normal, and these options will affect all selected variables. Options prefixed with &amp;quot;Angle:&amp;quot; only affect angles. Many of these options have just been covered, but the ones which haven&#039;t been are:&lt;br /&gt;
* &#039;&#039;&#039;Show Variable XML&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Show Variable Info&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Show Background Color...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Move...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Remove&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Rename&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Controller&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Triplet Controller&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Pop Out&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Add to Tab...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Add to Custom Tab&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* &#039;&#039;&#039;Double Click&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;Click + Shift + Number&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Number&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + S&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + T&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + M&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + P&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + N&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + F&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + H&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + L&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + D&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + R&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + C&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + B&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Escape&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Backspace&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Delete&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + X&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Backtick&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Z&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Minus&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Plus&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Q&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + O&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The various kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are various kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A Simple Controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons are inverted, i.e. swapping whether subtraction is on the left and addition is on the right or vice versa. Simple Controllers are found on the left panel of several tabs of STROOP.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;: A Triplet Controller is in charge of manipulating a triplet of variables, usually a set of (x,y,z) Euler coordinates or (theta,phi,radius) spherical coordinates. It consists of 2 sets of controls:&lt;br /&gt;
** &#039;&#039;&#039;Square Controls&#039;&#039;&#039;: On the left are the Square Controls, consisting of 8 buttons and a textbox arranged in square formation. For Euler coordinates, these controls manipulate the x and z coordinates. For spherical coordinates, these controls manipulate the theta and phi coordinates. In both cases, the buttons will add to or subtract from the corresponding variable(s) by the amount in the textbox. Note that you can right click on the buttons for more options so that you can customize the orientation of the buttons. Specifically, this allows you to rotate the buttons any one of eight ways, as well as invert the orientation (i.e. flip it).&lt;br /&gt;
** &#039;&#039;&#039;Line Controls&#039;&#039;&#039;: One the right are the Line Controls, consisting of 2 buttons and a textbox arranged in a vertical line formation. For Euler coordinates, these controls manipulate the y coordinate. For spherical coordinates, these controls manipulate the radius coordinate. In both cases, the buttons will add to or subtract from the corresponding variable by the amount in the textbox. Note that you can right click on the buttons for options to invert the buttons.&lt;br /&gt;
: Triplet controllers also frequently have a Relative Checkbox in the upper right, which toggles whether the controls manipulate the variables absolutely or relative to some angle. When in relative mode, the labels on the buttons will change to emphasize this. Specifically, F = forward, B = backward, L = left, R = right, U = up, D = down. Triplet Controllers are found on the left panel of several tabs of STROOP. However, you can also create your own Triplet Controller by selecting 3 or 4 variables to represent the x,y,z and optional angle variables, right clicking, and choosing to open a Triplet Controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;: An advanced controller is in charge of manipulating one or more variables. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name(s) of the variable(s) being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Fix Address Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are using fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Value Textbox&#039;&#039;&#039;: This displays the current value(s) of the variable(s). The background color is red if the variable(s) have fixed addresses, blue if the variable(s) don&#039;t have fixed addresses, and purple if some variables do and some variables don&#039;t have fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Lock Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are locked.&lt;br /&gt;
** &#039;&#039;&#039;Subtraction Button&#039;&#039;&#039;: This is used to subtract a value from the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Addition/Subtraction Textbox&#039;&#039;&#039;: This is the value that&#039;s used by the Addition Button and Subtraction Button.&lt;br /&gt;
** &#039;&#039;&#039;Addition Button&#039;&#039;&#039;: This is used to add a value to the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get Button&#039;&#039;&#039;: This gets the value(s) of the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get/Set Textbox&#039;&#039;&#039;: This is the value used by the Get Button and Set Button.&lt;br /&gt;
** &#039;&#039;&#039;Set Button&#039;&#039;&#039;: This sets the value(s) of the variable(s).&lt;br /&gt;
: Additional notes:&lt;br /&gt;
:* In the case of setting multiple variables, you can set all of the variables to different values by separating the values in the textbox with commas. Alternatively, leave just one value in the textbox to set all variables to that one value. The same applies to adding and subtracting values.&lt;br /&gt;
:* The add and subtract buttons can be inverted by right clicking on them and choosing to invert.&lt;br /&gt;
:* You can click on the add/subtract button and hold the mouse down while holding control in order to continuously add to or subtract from the variables. Alternatively, right click on either button and choose to Start Continuous Add (or Subtract) and then later choose to Stop Continuous Add (or Subtract).&lt;br /&gt;
: You can create an Advanced Controller for a variable by clicking on the variable while holding C. Alternatively, you can create an Advanced Controller for multiple variables by selecting multiple variables, right clicking, and choosing to open a controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bit Controller&#039;&#039;&#039;: A Bit Controller is in charge of manipulating one variable. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name of the variable being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Decimal Value&#039;&#039;&#039;: This shows the decimal value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Hex Value&#039;&#039;&#039;: This shows the hex value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Binary Value&#039;&#039;&#039;: This shows the binary value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Value Table&#039;&#039;&#039;: This shows various representations of the bytes of the variable, including the decimal representation, hex representation, and binary representation. It also provides a set of checkboxes that can be used to toggle each bit of the variable. For floats, these checkboxes are colored according to the bits&#039; role in the float, as blue represents sign, red represents exponent, and green represents mantissa.&lt;br /&gt;
: Note that for floats, you can right click on the empty space of the controller, and change what the textboxes display. Specifically, they can be set to display the sign, exponent, and mantissa values of the float. You can create a Bit Controller for a variable by clicking on the variable while holding B.&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;br /&gt;
&lt;br /&gt;
== Painting Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7731</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7731"/>
		<updated>2019-04-14T18:24:05Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Variables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variable Panel ==&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
Variables are found in a Variable Panel. A variable has 2 parts to it: a name (on the left) and a value (on the right). On every STROOP update, the value updates. You can set a variable&#039;s value by double clicking on the value, entering text, and then pressing enter. Some variables are values in memory, while other variables are calculated manually (referred to as special variables). While memory variables can always be set, special variables may or may not be able to be set. If you try to set a variable and it doesn&#039;t go through (either because the variable can&#039;t be set or because you entered an illegal value), then the variable will flash red to indicate this.&lt;br /&gt;
&lt;br /&gt;
All variables come with the following options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Highlight&#039;&#039;&#039;: Highlights the variable by giving it a red outline.&lt;br /&gt;
* &#039;&#039;&#039;Lock&#039;&#039;&#039;: Locks the variable&#039;s value. Note that the variable&#039;s value can still be edited while it&#039;s locked.&lt;br /&gt;
* &#039;&#039;&#039;Copy&#039;&#039;&#039;: Copies the variable&#039;s value (with no rounding) to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste&#039;&#039;&#039;: Pastes the clipboard value to the variable.&lt;br /&gt;
* &#039;&#039;&#039;Panel Options&#039;&#039;&#039;: Opens up the Variable Panel options.&lt;br /&gt;
* &#039;&#039;&#039;Open Controller&#039;&#039;&#039;: Opens up an Advanced Controller for the variable.&lt;br /&gt;
* &#039;&#039;&#039;Add to Custom Tab&#039;&#039;&#039;: Adds the variable to the Custom Tab.&lt;br /&gt;
* &#039;&#039;&#039;Fix Address&#039;&#039;&#039;: Fixes the address of the variable.&lt;br /&gt;
* &#039;&#039;&#039;Rename&#039;&#039;&#039;: Allows you to rename the variable.&lt;br /&gt;
* &#039;&#039;&#039;Remove&#039;&#039;&#039;: Removes the variable from the Variable Panel.&lt;br /&gt;
&lt;br /&gt;
Number variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Round to ...&#039;&#039;&#039;: Sets how many digits to round the variable to.&lt;br /&gt;
* &#039;&#039;&#039;Display as Hex&#039;&#039;&#039;: Toggles whether the variable is displayed as hex or decimal.&lt;br /&gt;
&lt;br /&gt;
Angle variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Signed&#039;&#039;&#039;: Toggles whether the variable is displayed as signed or not.&lt;br /&gt;
* &#039;&#039;&#039;Units...&#039;&#039;&#039;: Sets the units for the angle variable. The unit options are:&lt;br /&gt;
** &#039;&#039;&#039;In-Game Units&#039;&#039;&#039;: These are the units that the game uses. One revolution is 65536 in-game units.&lt;br /&gt;
** &#039;&#039;&#039;HAU&#039;&#039;&#039;: Standing for hexadecimal angle units, these are in-game units divided by 16. Thus, one revolution is 4096 HAU. These are useful because angles that fall under the same HAU value use the same entry in the game&#039;s trig table, since angles are truncated to the closest multiple of 16 before accessing the table.&lt;br /&gt;
** &#039;&#039;&#039;Degrees&#039;&#039;&#039;: One revolution is 360 degrees.&lt;br /&gt;
** &#039;&#039;&#039;Radians&#039;&#039;&#039;: One revolution is 2*pi radians.&lt;br /&gt;
** &#039;&#039;&#039;Revolutions&#039;&#039;&#039;: One revolution is one revolution.&lt;br /&gt;
* &#039;&#039;&#039;Truncate to Multiple of 16&#039;&#039;&#039;: Toggles whether the angle&#039;s value is truncated to a multiple of 16. This is useful since angles that truncated to same the closest multiple of 16 use the same entry in the game&#039;s trig table.&lt;br /&gt;
* &#039;&#039;&#039;Constrain to One Revolution&#039;&#039;&#039;: Toggles whether the angle&#039;s value is constrained to one revolution. For example, an angle that&#039;s unsigned and in angle units would be constrained to the range [0, 65535], whereas an angle that&#039;s signed and in angle units would be constrained to the range [-32768, 32767].&lt;br /&gt;
* &#039;&#039;&#039;Reverse&#039;&#039;&#039;: Toggles whether the angle is displayed as the reverse of what it actually is.&lt;br /&gt;
&lt;br /&gt;
Address variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;View Address&#039;&#039;&#039;: Views the variable&#039;s value as an address in the Memory Tab.&lt;br /&gt;
&lt;br /&gt;
Object variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Display as Object&#039;&#039;&#039;: Displays the variable&#039;s value as an Object. Values include:&lt;br /&gt;
** &#039;&#039;&#039;Slot n&#039;&#039;&#039;: The nth loaded slot.&lt;br /&gt;
** &#039;&#039;&#039;Slot VSn&#039;&#039;&#039;: The nth vacant slot.&lt;br /&gt;
** &#039;&#039;&#039;PG n&#039;&#039;&#039;: Process Group n&#039;s node.&lt;br /&gt;
** &#039;&#039;&#039;(none)&#039;&#039;&#039;: The value 0.&lt;br /&gt;
** &#039;&#039;&#039;(unused object)&#039;&#039;&#039;: The unused object slot.&lt;br /&gt;
** &#039;&#039;&#039;(unknown object)&#039;&#039;&#039;: A value that&#039;s not recognized as a valid object reference.&lt;br /&gt;
* &#039;&#039;&#039;Select Object&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Triangle variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Select Triangle&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Boolean variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Display as Checkbox&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Display as Inverted&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
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&#039;s selected, then you&#039;ll see a different set of options from normal, and these options will affect all selected variables. Options prefixed with &amp;quot;Angle:&amp;quot; only affect angles. Many of these options have just been covered, but the ones which haven&#039;t been are:&lt;br /&gt;
* &#039;&#039;&#039;Show Variable XML&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Show Variable Info&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Show Background Color...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Move...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Remove&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Rename&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Controller&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Triplet Controller&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Pop Out&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Add to Tab...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Add to Custom Tab&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* &#039;&#039;&#039;Double Click&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;Click + Shift + Number&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Number&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + S&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + T&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + M&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + P&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + N&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + F&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + H&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + L&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + D&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + R&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + C&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + B&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Escape&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Backspace&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Delete&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + X&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Backtick&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Z&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Minus&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Plus&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Q&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + O&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The various kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are various kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A Simple Controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons are inverted, i.e. swapping whether subtraction is on the left and addition is on the right or vice versa. Simple Controllers are found on the left panel of several tabs of STROOP.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;: A Triplet Controller is in charge of manipulating a triplet of variables, usually a set of (x,y,z) Euler coordinates or (theta,phi,radius) spherical coordinates. It consists of 2 sets of controls:&lt;br /&gt;
** &#039;&#039;&#039;Square Controls&#039;&#039;&#039;: On the left are the Square Controls, consisting of 8 buttons and a textbox arranged in square formation. For Euler coordinates, these controls manipulate the x and z coordinates. For spherical coordinates, these controls manipulate the theta and phi coordinates. In both cases, the buttons will add to or subtract from the corresponding variable(s) by the amount in the textbox. Note that you can right click on the buttons for more options so that you can customize the orientation of the buttons. Specifically, this allows you to rotate the buttons any one of eight ways, as well as invert the orientation (i.e. flip it).&lt;br /&gt;
** &#039;&#039;&#039;Line Controls&#039;&#039;&#039;: One the right are the Line Controls, consisting of 2 buttons and a textbox arranged in a vertical line formation. For Euler coordinates, these controls manipulate the y coordinate. For spherical coordinates, these controls manipulate the radius coordinate. In both cases, the buttons will add to or subtract from the corresponding variable by the amount in the textbox. Note that you can right click on the buttons for options to invert the buttons.&lt;br /&gt;
: Triplet controllers also frequently have a Relative Checkbox in the upper right, which toggles whether the controls manipulate the variables absolutely or relative to some angle. When in relative mode, the labels on the buttons will change to emphasize this. Specifically, F = forward, B = backward, L = left, R = right, U = up, D = down. Triplet Controllers are found on the left panel of several tabs of STROOP. However, you can also create your own Triplet Controller by selecting 3 or 4 variables to represent the x,y,z and optional angle variables, right clicking, and choosing to open a Triplet Controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;: An advanced controller is in charge of manipulating one or more variables. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name(s) of the variable(s) being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Fix Address Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are using fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Value Textbox&#039;&#039;&#039;: This displays the current value(s) of the variable(s). The background color is red if the variable(s) have fixed addresses, blue if the variable(s) don&#039;t have fixed addresses, and purple if some variables do and some variables don&#039;t have fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Lock Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are locked.&lt;br /&gt;
** &#039;&#039;&#039;Subtraction Button&#039;&#039;&#039;: This is used to subtract a value from the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Addition/Subtraction Textbox&#039;&#039;&#039;: This is the value that&#039;s used by the Addition Button and Subtraction Button.&lt;br /&gt;
** &#039;&#039;&#039;Addition Button&#039;&#039;&#039;: This is used to add a value to the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get Button&#039;&#039;&#039;: This gets the value(s) of the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get/Set Textbox&#039;&#039;&#039;: This is the value used by the Get Button and Set Button.&lt;br /&gt;
** &#039;&#039;&#039;Set Button&#039;&#039;&#039;: This sets the value(s) of the variable(s).&lt;br /&gt;
: Additional notes:&lt;br /&gt;
:* In the case of setting multiple variables, you can set all of the variables to different values by separating the values in the textbox with commas. Alternatively, leave just one value in the textbox to set all variables to that one value. The same applies to adding and subtracting values.&lt;br /&gt;
:* The add and subtract buttons can be inverted by right clicking on them and choosing to invert.&lt;br /&gt;
:* You can click on the add/subtract button and hold the mouse down while holding control in order to continuously add to or subtract from the variables. Alternatively, right click on either button and choose to Start Continuous Add (or Subtract) and then later choose to Stop Continuous Add (or Subtract).&lt;br /&gt;
: You can create an Advanced Controller for a variable by clicking on the variable while holding C. Alternatively, you can create an Advanced Controller for multiple variables by selecting multiple variables, right clicking, and choosing to open a controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bit Controller&#039;&#039;&#039;: A Bit Controller is in charge of manipulating one variable. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name of the variable being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Decimal Value&#039;&#039;&#039;: This shows the decimal value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Hex Value&#039;&#039;&#039;: This shows the hex value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Binary Value&#039;&#039;&#039;: This shows the binary value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Value Table&#039;&#039;&#039;: This shows various representations of the bytes of the variable, including the decimal representation, hex representation, and binary representation. It also provides a set of checkboxes that can be used to toggle each bit of the variable. For floats, these checkboxes are colored according to the bits&#039; role in the float, as blue represents sign, red represents exponent, and green represents mantissa.&lt;br /&gt;
: Note that for floats, you can right click on the empty space of the controller, and change what the textboxes display. Specifically, they can be set to display the sign, exponent, and mantissa values of the float. You can create a Bit Controller for a variable by clicking on the variable while holding B.&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;br /&gt;
&lt;br /&gt;
== Painting Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7730</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7730"/>
		<updated>2019-04-14T18:18:23Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Variables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variable Panel ==&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
Variables are found in a Variable Panel. A variable has 2 parts to it: a name (on the left) and a value (on the right). On every STROOP update, the value updates. You can set a variable&#039;s value by double clicking on the value, entering text, and then pressing enter. Some variables are values in memory, while other variables are calculated manually (referred to as special variables). While memory variables can always be set, special variables may or may not be able to be set. If you try to set a variable and it doesn&#039;t go through (either because the variable can&#039;t be set or because you entered an illegal value), then the variable will flash red to indicate this.&lt;br /&gt;
&lt;br /&gt;
All variables come with the following options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Highlight&#039;&#039;&#039;: Highlights the variable by giving it a red outline.&lt;br /&gt;
* &#039;&#039;&#039;Lock&#039;&#039;&#039;: Locks the variable&#039;s value. Note that the variable&#039;s value can still be edited while it&#039;s locked.&lt;br /&gt;
* &#039;&#039;&#039;Copy&#039;&#039;&#039;: Copies the variable&#039;s value (with no rounding) to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste&#039;&#039;&#039;: Pastes the clipboard value to the variable.&lt;br /&gt;
* &#039;&#039;&#039;Panel Options&#039;&#039;&#039;: Opens up the Variable Panel options.&lt;br /&gt;
* &#039;&#039;&#039;Open Controller&#039;&#039;&#039;: Opens up an Advanced Controller for the variable.&lt;br /&gt;
* &#039;&#039;&#039;Add to Custom Tab&#039;&#039;&#039;: Adds the variable to the Custom Tab.&lt;br /&gt;
* &#039;&#039;&#039;Fix Address&#039;&#039;&#039;: Fixes the address of the variable.&lt;br /&gt;
* &#039;&#039;&#039;Rename&#039;&#039;&#039;: Allows you to rename the variable.&lt;br /&gt;
* &#039;&#039;&#039;Remove&#039;&#039;&#039;: Removes the variable from the Variable Panel.&lt;br /&gt;
&lt;br /&gt;
Number variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Round to ...&#039;&#039;&#039;: Sets how many digits to round the variable to.&lt;br /&gt;
* &#039;&#039;&#039;Display as Hex&#039;&#039;&#039;: Toggles whether the variable is displayed as hex or decimal.&lt;br /&gt;
&lt;br /&gt;
Angle variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Signed&#039;&#039;&#039;: Toggles whether the variable is displayed as signed or not.&lt;br /&gt;
* &#039;&#039;&#039;Units...&#039;&#039;&#039;: Sets the units for the angle variable. The unit options are:&lt;br /&gt;
** &#039;&#039;&#039;In-Game Units&#039;&#039;&#039;: These are the units that the game uses. One revolution is 65536 in-game units.&lt;br /&gt;
** &#039;&#039;&#039;HAU&#039;&#039;&#039;: Standing for hexadecimal angle units, these are in-game units divided by 16. Thus, one revolution is 4096 HAU. These are useful because angles that fall under the same HAU value use the same entry in the game&#039;s trig table, since angles are truncated to the closest multiple of 16 before accessing the table.&lt;br /&gt;
** &#039;&#039;&#039;Degrees&#039;&#039;&#039;: One revolution is 360 degrees.&lt;br /&gt;
** &#039;&#039;&#039;Radians&#039;&#039;&#039;: One revolution is 2*pi radians.&lt;br /&gt;
** &#039;&#039;&#039;Revolutions&#039;&#039;&#039;: One revolution is one revolution.&lt;br /&gt;
* &#039;&#039;&#039;Truncate to Multiple of 16&#039;&#039;&#039;: Toggles whether the angle&#039;s value is truncated to a multiple of 16. This is useful since angles that truncated to same the closest multiple of 16 use the same entry in the game&#039;s trig table.&lt;br /&gt;
* &#039;&#039;&#039;Constrain to One Revolution&#039;&#039;&#039;: Toggles whether the angle&#039;s value is constrained to one revolution. For example, an angle that&#039;s unsigned and in angle units would be constrained to the range [0, 65535], whereas an angle that&#039;s signed and in angle units would be constrained to the range [-32768, 32767].&lt;br /&gt;
* &#039;&#039;&#039;Reverse&#039;&#039;&#039;: Toggles whether the angle is displayed as the reverse of what it actually is.&lt;br /&gt;
&lt;br /&gt;
Address variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;View Address&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Object variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Display as Object&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Select Object&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Triangle variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Select Triangle&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Boolean variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Display as Checkbox&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Display as Inverted&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
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&#039;s selected, then you&#039;ll see a different set of options from normal, and these options will affect all selected variables. Options prefixed with &amp;quot;Angle:&amp;quot; only affect angles. Many of these options have just been covered, but the ones which haven&#039;t been are:&lt;br /&gt;
* &#039;&#039;&#039;Show Variable XML&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Show Variable Info&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Show Background Color...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Move...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Remove&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Rename&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Controller&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Triplet Controller&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Pop Out&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Add to Tab...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Add to Custom Tab&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* &#039;&#039;&#039;Double Click&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;Click + Shift + Number&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Number&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + S&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + T&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + M&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + P&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + N&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + F&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + H&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + L&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + D&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + R&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + C&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + B&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Escape&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Backspace&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Delete&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + X&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Backtick&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Z&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Minus&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Plus&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Q&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + O&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The various kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are various kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A Simple Controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons are inverted, i.e. swapping whether subtraction is on the left and addition is on the right or vice versa. Simple Controllers are found on the left panel of several tabs of STROOP.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;: A Triplet Controller is in charge of manipulating a triplet of variables, usually a set of (x,y,z) Euler coordinates or (theta,phi,radius) spherical coordinates. It consists of 2 sets of controls:&lt;br /&gt;
** &#039;&#039;&#039;Square Controls&#039;&#039;&#039;: On the left are the Square Controls, consisting of 8 buttons and a textbox arranged in square formation. For Euler coordinates, these controls manipulate the x and z coordinates. For spherical coordinates, these controls manipulate the theta and phi coordinates. In both cases, the buttons will add to or subtract from the corresponding variable(s) by the amount in the textbox. Note that you can right click on the buttons for more options so that you can customize the orientation of the buttons. Specifically, this allows you to rotate the buttons any one of eight ways, as well as invert the orientation (i.e. flip it).&lt;br /&gt;
** &#039;&#039;&#039;Line Controls&#039;&#039;&#039;: One the right are the Line Controls, consisting of 2 buttons and a textbox arranged in a vertical line formation. For Euler coordinates, these controls manipulate the y coordinate. For spherical coordinates, these controls manipulate the radius coordinate. In both cases, the buttons will add to or subtract from the corresponding variable by the amount in the textbox. Note that you can right click on the buttons for options to invert the buttons.&lt;br /&gt;
: Triplet controllers also frequently have a Relative Checkbox in the upper right, which toggles whether the controls manipulate the variables absolutely or relative to some angle. When in relative mode, the labels on the buttons will change to emphasize this. Specifically, F = forward, B = backward, L = left, R = right, U = up, D = down. Triplet Controllers are found on the left panel of several tabs of STROOP. However, you can also create your own Triplet Controller by selecting 3 or 4 variables to represent the x,y,z and optional angle variables, right clicking, and choosing to open a Triplet Controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;: An advanced controller is in charge of manipulating one or more variables. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name(s) of the variable(s) being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Fix Address Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are using fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Value Textbox&#039;&#039;&#039;: This displays the current value(s) of the variable(s). The background color is red if the variable(s) have fixed addresses, blue if the variable(s) don&#039;t have fixed addresses, and purple if some variables do and some variables don&#039;t have fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Lock Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are locked.&lt;br /&gt;
** &#039;&#039;&#039;Subtraction Button&#039;&#039;&#039;: This is used to subtract a value from the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Addition/Subtraction Textbox&#039;&#039;&#039;: This is the value that&#039;s used by the Addition Button and Subtraction Button.&lt;br /&gt;
** &#039;&#039;&#039;Addition Button&#039;&#039;&#039;: This is used to add a value to the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get Button&#039;&#039;&#039;: This gets the value(s) of the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get/Set Textbox&#039;&#039;&#039;: This is the value used by the Get Button and Set Button.&lt;br /&gt;
** &#039;&#039;&#039;Set Button&#039;&#039;&#039;: This sets the value(s) of the variable(s).&lt;br /&gt;
: Additional notes:&lt;br /&gt;
:* In the case of setting multiple variables, you can set all of the variables to different values by separating the values in the textbox with commas. Alternatively, leave just one value in the textbox to set all variables to that one value. The same applies to adding and subtracting values.&lt;br /&gt;
:* The add and subtract buttons can be inverted by right clicking on them and choosing to invert.&lt;br /&gt;
:* You can click on the add/subtract button and hold the mouse down while holding control in order to continuously add to or subtract from the variables. Alternatively, right click on either button and choose to Start Continuous Add (or Subtract) and then later choose to Stop Continuous Add (or Subtract).&lt;br /&gt;
: You can create an Advanced Controller for a variable by clicking on the variable while holding C. Alternatively, you can create an Advanced Controller for multiple variables by selecting multiple variables, right clicking, and choosing to open a controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bit Controller&#039;&#039;&#039;: A Bit Controller is in charge of manipulating one variable. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name of the variable being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Decimal Value&#039;&#039;&#039;: This shows the decimal value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Hex Value&#039;&#039;&#039;: This shows the hex value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Binary Value&#039;&#039;&#039;: This shows the binary value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Value Table&#039;&#039;&#039;: This shows various representations of the bytes of the variable, including the decimal representation, hex representation, and binary representation. It also provides a set of checkboxes that can be used to toggle each bit of the variable. For floats, these checkboxes are colored according to the bits&#039; role in the float, as blue represents sign, red represents exponent, and green represents mantissa.&lt;br /&gt;
: Note that for floats, you can right click on the empty space of the controller, and change what the textboxes display. Specifically, they can be set to display the sign, exponent, and mantissa values of the float. You can create a Bit Controller for a variable by clicking on the variable while holding B.&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;br /&gt;
&lt;br /&gt;
== Painting Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7729</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7729"/>
		<updated>2019-04-14T18:17:56Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Variables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variable Panel ==&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
Variables are found in a Variable Panel. A variable has 2 parts to it: a name (on the left) and a value (on the right). On every STROOP update, the value updates. You can set a variable&#039;s value by double clicking on the value, entering text, and then pressing enter. Some variables are values in memory, while other variables are calculated manually (referred to as special variables). While memory variables can always be set, special variables may or may not be able to be set. If you try to set a variable and it doesn&#039;t go through (either because the variable can&#039;t be set or because you entered an illegal value), then the variable will flash red to indicate this.&lt;br /&gt;
&lt;br /&gt;
All variables come with the following options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Highlight&#039;&#039;&#039;: Highlights the variable by giving it a red outline.&lt;br /&gt;
* &#039;&#039;&#039;Lock&#039;&#039;&#039;: Locks the variable&#039;s value. Note that the variable&#039;s value can still be edited while it&#039;s locked.&lt;br /&gt;
* &#039;&#039;&#039;Copy&#039;&#039;&#039;: Copies the variable&#039;s value (with no rounding) to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste&#039;&#039;&#039;: Pastes the clipboard value to the variable.&lt;br /&gt;
* &#039;&#039;&#039;Panel Options&#039;&#039;&#039;: Opens up the Variable Panel options.&lt;br /&gt;
* &#039;&#039;&#039;Open Controller&#039;&#039;&#039;: Opens up an Advanced Controller for the variable.&lt;br /&gt;
* &#039;&#039;&#039;Add to Custom Tab&#039;&#039;&#039;: Adds the variable to the Custom Tab.&lt;br /&gt;
* &#039;&#039;&#039;Fix Address&#039;&#039;&#039;: Fixes the address of the variable.&lt;br /&gt;
* &#039;&#039;&#039;Rename&#039;&#039;&#039;: Allows you to rename the variable.&lt;br /&gt;
* &#039;&#039;&#039;Remove&#039;&#039;&#039;: Removes the variable from the Variable Panel.&lt;br /&gt;
&lt;br /&gt;
Number variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Round to ...&#039;&#039;&#039;: Sets how many digits you want to round the variable to.&lt;br /&gt;
* &#039;&#039;&#039;Display as Hex&#039;&#039;&#039;: Toggles whether the variable is displayed as hex or decimal.&lt;br /&gt;
&lt;br /&gt;
Angle variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Signed&#039;&#039;&#039;: Toggles whether the variable is displayed as signed or not.&lt;br /&gt;
* &#039;&#039;&#039;Units...&#039;&#039;&#039;: Sets the units for the angle variable. The unit options are:&lt;br /&gt;
** &#039;&#039;&#039;In-Game Units&#039;&#039;&#039;: These are the units that the game uses. One revolution is 65536 in-game units.&lt;br /&gt;
** &#039;&#039;&#039;HAU&#039;&#039;&#039;: Standing for hexadecimal angle units, these are in-game units divided by 16. Thus, one revolution is 4096 HAU. These are useful because angles that fall under the same HAU value use the same entry in the game&#039;s trig table, since angles are truncated to the closest multiple of 16 before accessing the table.&lt;br /&gt;
** &#039;&#039;&#039;Degrees&#039;&#039;&#039;: One revolution is 360 degrees.&lt;br /&gt;
** &#039;&#039;&#039;Radians&#039;&#039;&#039;: One revolution is 2*pi radians.&lt;br /&gt;
** &#039;&#039;&#039;Revolutions&#039;&#039;&#039;: One revolution is one revolution.&lt;br /&gt;
* &#039;&#039;&#039;Truncate to Multiple of 16&#039;&#039;&#039;: Toggles whether the angle&#039;s value is truncated to a multiple of 16. This is useful since angles that truncated to same the closest multiple of 16 use the same entry in the game&#039;s trig table.&lt;br /&gt;
* &#039;&#039;&#039;Constrain to One Revolution&#039;&#039;&#039;: Toggles whether the angle&#039;s value is constrained to one revolution. For example, an angle that&#039;s unsigned and in angle units would be constrained to the range [0, 65535], whereas an angle that&#039;s signed and in angle units would be constrained to the range [-32768, 32767].&lt;br /&gt;
* &#039;&#039;&#039;Reverse&#039;&#039;&#039;: Toggles whether the angle is displayed as the reverse of what it actually is.&lt;br /&gt;
&lt;br /&gt;
Address variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;View Address&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Object variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Display as Object&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Select Object&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Triangle variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Select Triangle&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Boolean variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Display as Checkbox&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Display as Inverted&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
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&#039;s selected, then you&#039;ll see a different set of options from normal, and these options will affect all selected variables. Options prefixed with &amp;quot;Angle:&amp;quot; only affect angles. Many of these options have just been covered, but the ones which haven&#039;t been are:&lt;br /&gt;
* &#039;&#039;&#039;Show Variable XML&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Show Variable Info&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Show Background Color...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Move...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Remove&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Rename&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Controller&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Triplet Controller&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Pop Out&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Add to Tab...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Add to Custom Tab&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* &#039;&#039;&#039;Double Click&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;Click + Shift + Number&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Number&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + S&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + T&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + M&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + P&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + N&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + F&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + H&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + L&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + D&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + R&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + C&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + B&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Escape&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Backspace&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Delete&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + X&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Backtick&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Z&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Minus&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Plus&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Q&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + O&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The various kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are various kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A Simple Controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons are inverted, i.e. swapping whether subtraction is on the left and addition is on the right or vice versa. Simple Controllers are found on the left panel of several tabs of STROOP.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;: A Triplet Controller is in charge of manipulating a triplet of variables, usually a set of (x,y,z) Euler coordinates or (theta,phi,radius) spherical coordinates. It consists of 2 sets of controls:&lt;br /&gt;
** &#039;&#039;&#039;Square Controls&#039;&#039;&#039;: On the left are the Square Controls, consisting of 8 buttons and a textbox arranged in square formation. For Euler coordinates, these controls manipulate the x and z coordinates. For spherical coordinates, these controls manipulate the theta and phi coordinates. In both cases, the buttons will add to or subtract from the corresponding variable(s) by the amount in the textbox. Note that you can right click on the buttons for more options so that you can customize the orientation of the buttons. Specifically, this allows you to rotate the buttons any one of eight ways, as well as invert the orientation (i.e. flip it).&lt;br /&gt;
** &#039;&#039;&#039;Line Controls&#039;&#039;&#039;: One the right are the Line Controls, consisting of 2 buttons and a textbox arranged in a vertical line formation. For Euler coordinates, these controls manipulate the y coordinate. For spherical coordinates, these controls manipulate the radius coordinate. In both cases, the buttons will add to or subtract from the corresponding variable by the amount in the textbox. Note that you can right click on the buttons for options to invert the buttons.&lt;br /&gt;
: Triplet controllers also frequently have a Relative Checkbox in the upper right, which toggles whether the controls manipulate the variables absolutely or relative to some angle. When in relative mode, the labels on the buttons will change to emphasize this. Specifically, F = forward, B = backward, L = left, R = right, U = up, D = down. Triplet Controllers are found on the left panel of several tabs of STROOP. However, you can also create your own Triplet Controller by selecting 3 or 4 variables to represent the x,y,z and optional angle variables, right clicking, and choosing to open a Triplet Controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;: An advanced controller is in charge of manipulating one or more variables. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name(s) of the variable(s) being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Fix Address Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are using fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Value Textbox&#039;&#039;&#039;: This displays the current value(s) of the variable(s). The background color is red if the variable(s) have fixed addresses, blue if the variable(s) don&#039;t have fixed addresses, and purple if some variables do and some variables don&#039;t have fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Lock Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are locked.&lt;br /&gt;
** &#039;&#039;&#039;Subtraction Button&#039;&#039;&#039;: This is used to subtract a value from the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Addition/Subtraction Textbox&#039;&#039;&#039;: This is the value that&#039;s used by the Addition Button and Subtraction Button.&lt;br /&gt;
** &#039;&#039;&#039;Addition Button&#039;&#039;&#039;: This is used to add a value to the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get Button&#039;&#039;&#039;: This gets the value(s) of the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get/Set Textbox&#039;&#039;&#039;: This is the value used by the Get Button and Set Button.&lt;br /&gt;
** &#039;&#039;&#039;Set Button&#039;&#039;&#039;: This sets the value(s) of the variable(s).&lt;br /&gt;
: Additional notes:&lt;br /&gt;
:* In the case of setting multiple variables, you can set all of the variables to different values by separating the values in the textbox with commas. Alternatively, leave just one value in the textbox to set all variables to that one value. The same applies to adding and subtracting values.&lt;br /&gt;
:* The add and subtract buttons can be inverted by right clicking on them and choosing to invert.&lt;br /&gt;
:* You can click on the add/subtract button and hold the mouse down while holding control in order to continuously add to or subtract from the variables. Alternatively, right click on either button and choose to Start Continuous Add (or Subtract) and then later choose to Stop Continuous Add (or Subtract).&lt;br /&gt;
: You can create an Advanced Controller for a variable by clicking on the variable while holding C. Alternatively, you can create an Advanced Controller for multiple variables by selecting multiple variables, right clicking, and choosing to open a controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bit Controller&#039;&#039;&#039;: A Bit Controller is in charge of manipulating one variable. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name of the variable being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Decimal Value&#039;&#039;&#039;: This shows the decimal value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Hex Value&#039;&#039;&#039;: This shows the hex value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Binary Value&#039;&#039;&#039;: This shows the binary value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Value Table&#039;&#039;&#039;: This shows various representations of the bytes of the variable, including the decimal representation, hex representation, and binary representation. It also provides a set of checkboxes that can be used to toggle each bit of the variable. For floats, these checkboxes are colored according to the bits&#039; role in the float, as blue represents sign, red represents exponent, and green represents mantissa.&lt;br /&gt;
: Note that for floats, you can right click on the empty space of the controller, and change what the textboxes display. Specifically, they can be set to display the sign, exponent, and mantissa values of the float. You can create a Bit Controller for a variable by clicking on the variable while holding B.&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;br /&gt;
&lt;br /&gt;
== Painting Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7728</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7728"/>
		<updated>2019-04-14T17:19:12Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Variables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variable Panel ==&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
Variables are found in a Variable Panel. A variable has 2 parts to it: a name (on the left) and a value (on the right). On every STROOP update, the value updates. Some variables are values in memory, while other variables are calculated manually (referred to as special variables). While memory variables can always be set, special variables may or may not be able to be set. If you try to set a variable and it doesn&#039;t go through (either because the variable can&#039;t be set or because you entered an illegal value), then the variable will flash red to indicate this.&lt;br /&gt;
&lt;br /&gt;
All variables come with the following options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Highlight&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Lock&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Copy&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Paste&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Panel Options&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Controller&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Add to Custom Tab&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Fix Address&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Rename&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Remove&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Number variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Round to ...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Display as Hex&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Angle variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Signed&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Units...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Truncate to Multiple of 16&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Constrain to One Revolution&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Reverse&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Address variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;View Address&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Object variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Display as Object&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Select Object&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Triangle variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Select Triangle&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Boolean variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Display as Checkbox&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Display as Inverted&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
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&#039;s selected, then you&#039;ll see a different set of options from normal, and these options will affect all selected variables. Options prefixed with &amp;quot;Angle:&amp;quot; only affect angles. Many of these options have just been covered, but the ones which haven&#039;t been are:&lt;br /&gt;
* &#039;&#039;&#039;Show Variable XML&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Show Variable Info&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Show Background Color...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Move...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Remove&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Rename&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Controller&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Triplet Controller&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Pop Out&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Add to Tab...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Add to Custom Tab&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* &#039;&#039;&#039;Double Click&#039;&#039;&#039;:&lt;br /&gt;
* &#039;&#039;&#039;Click + Shift + Number&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Number&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + S&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + T&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + M&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + P&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + N&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + F&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + H&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + L&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + D&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + R&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + C&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + B&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Escape&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Backspace&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Delete&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + X&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Backtick&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Z&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Minus&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Plus&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Q&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + O&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The various kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are various kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A Simple Controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons are inverted, i.e. swapping whether subtraction is on the left and addition is on the right or vice versa. Simple Controllers are found on the left panel of several tabs of STROOP.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;: A Triplet Controller is in charge of manipulating a triplet of variables, usually a set of (x,y,z) Euler coordinates or (theta,phi,radius) spherical coordinates. It consists of 2 sets of controls:&lt;br /&gt;
** &#039;&#039;&#039;Square Controls&#039;&#039;&#039;: On the left are the Square Controls, consisting of 8 buttons and a textbox arranged in square formation. For Euler coordinates, these controls manipulate the x and z coordinates. For spherical coordinates, these controls manipulate the theta and phi coordinates. In both cases, the buttons will add to or subtract from the corresponding variable(s) by the amount in the textbox. Note that you can right click on the buttons for more options so that you can customize the orientation of the buttons. Specifically, this allows you to rotate the buttons any one of eight ways, as well as invert the orientation (i.e. flip it).&lt;br /&gt;
** &#039;&#039;&#039;Line Controls&#039;&#039;&#039;: One the right are the Line Controls, consisting of 2 buttons and a textbox arranged in a vertical line formation. For Euler coordinates, these controls manipulate the y coordinate. For spherical coordinates, these controls manipulate the radius coordinate. In both cases, the buttons will add to or subtract from the corresponding variable by the amount in the textbox. Note that you can right click on the buttons for options to invert the buttons.&lt;br /&gt;
: Triplet controllers also frequently have a Relative Checkbox in the upper right, which toggles whether the controls manipulate the variables absolutely or relative to some angle. When in relative mode, the labels on the buttons will change to emphasize this. Specifically, F = forward, B = backward, L = left, R = right, U = up, D = down. Triplet Controllers are found on the left panel of several tabs of STROOP. However, you can also create your own Triplet Controller by selecting 3 or 4 variables to represent the x,y,z and optional angle variables, right clicking, and choosing to open a Triplet Controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;: An advanced controller is in charge of manipulating one or more variables. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name(s) of the variable(s) being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Fix Address Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are using fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Value Textbox&#039;&#039;&#039;: This displays the current value(s) of the variable(s). The background color is red if the variable(s) have fixed addresses, blue if the variable(s) don&#039;t have fixed addresses, and purple if some variables do and some variables don&#039;t have fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Lock Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are locked.&lt;br /&gt;
** &#039;&#039;&#039;Subtraction Button&#039;&#039;&#039;: This is used to subtract a value from the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Addition/Subtraction Textbox&#039;&#039;&#039;: This is the value that&#039;s used by the Addition Button and Subtraction Button.&lt;br /&gt;
** &#039;&#039;&#039;Addition Button&#039;&#039;&#039;: This is used to add a value to the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get Button&#039;&#039;&#039;: This gets the value(s) of the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get/Set Textbox&#039;&#039;&#039;: This is the value used by the Get Button and Set Button.&lt;br /&gt;
** &#039;&#039;&#039;Set Button&#039;&#039;&#039;: This sets the value(s) of the variable(s).&lt;br /&gt;
: Additional notes:&lt;br /&gt;
:* In the case of setting multiple variables, you can set all of the variables to different values by separating the values in the textbox with commas. Alternatively, leave just one value in the textbox to set all variables to that one value. The same applies to adding and subtracting values.&lt;br /&gt;
:* The add and subtract buttons can be inverted by right clicking on them and choosing to invert.&lt;br /&gt;
:* You can click on the add/subtract button and hold the mouse down while holding control in order to continuously add to or subtract from the variables. Alternatively, right click on either button and choose to Start Continuous Add (or Subtract) and then later choose to Stop Continuous Add (or Subtract).&lt;br /&gt;
: You can create an Advanced Controller for a variable by clicking on the variable while holding C. Alternatively, you can create an Advanced Controller for multiple variables by selecting multiple variables, right clicking, and choosing to open a controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bit Controller&#039;&#039;&#039;: A Bit Controller is in charge of manipulating one variable. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name of the variable being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Decimal Value&#039;&#039;&#039;: This shows the decimal value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Hex Value&#039;&#039;&#039;: This shows the hex value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Binary Value&#039;&#039;&#039;: This shows the binary value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Value Table&#039;&#039;&#039;: This shows various representations of the bytes of the variable, including the decimal representation, hex representation, and binary representation. It also provides a set of checkboxes that can be used to toggle each bit of the variable. For floats, these checkboxes are colored according to the bits&#039; role in the float, as blue represents sign, red represents exponent, and green represents mantissa.&lt;br /&gt;
: Note that for floats, you can right click on the empty space of the controller, and change what the textboxes display. Specifically, they can be set to display the sign, exponent, and mantissa values of the float. You can create a Bit Controller for a variable by clicking on the variable while holding B.&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;br /&gt;
&lt;br /&gt;
== Painting Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7727</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7727"/>
		<updated>2019-04-14T17:14:15Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Variables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variable Panel ==&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
Variables are found in a Variable Panel. An variable has 2 parts to it: a name (on the left) and a value (on the right). On every STROOP update, the value updates. Some variables are values in memory, while other variables are calculated manually (referred to as special variables). While memory variables can always be set, special variables may or may not be able to be set.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All variables come with the following options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Highlight&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Lock&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Copy&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Paste&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Panel Options&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Controller&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Add to Custom Tab&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Fix Address&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Rename&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Remove&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Number variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Round to ...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Display as Hex&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Angle variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Signed&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Units...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Truncate to Multiple of 16&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Constrain to One Revolution&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Reverse&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Address variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;View Address&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Object variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Display as Object&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Select Object&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Triangle variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Select Triangle&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Boolean variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Display as Checkbox&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Display as Inverted&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Separately, if you right click on a variable that&#039;s selected, then you&#039;ll see a different set of options, which affect all selected variables. Options prefixed with &amp;quot;Angle:&amp;quot; only affect angles. Many of these options have just been covered, but the ones which haven&#039;t been are:&lt;br /&gt;
* &#039;&#039;&#039;Show Variable XML&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Show Variable Info&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Show Background Color...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Move...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Remove&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Rename&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Controller&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Triplet Controller&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Pop Out&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Add to Tab...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Add to Custom Tab&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* &#039;&#039;&#039;Click + Shift + Number&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Number&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + S&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + T&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + M&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + P&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + N&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + F&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + H&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + L&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + D&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + R&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + C&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + B&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Escape&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Backspace&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Delete&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + X&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Backtick&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Z&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Minus&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Plus&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + Q&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Click + O&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Double Click&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The various kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are various kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A Simple Controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons are inverted, i.e. swapping whether subtraction is on the left and addition is on the right or vice versa. Simple Controllers are found on the left panel of several tabs of STROOP.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;: A Triplet Controller is in charge of manipulating a triplet of variables, usually a set of (x,y,z) Euler coordinates or (theta,phi,radius) spherical coordinates. It consists of 2 sets of controls:&lt;br /&gt;
** &#039;&#039;&#039;Square Controls&#039;&#039;&#039;: On the left are the Square Controls, consisting of 8 buttons and a textbox arranged in square formation. For Euler coordinates, these controls manipulate the x and z coordinates. For spherical coordinates, these controls manipulate the theta and phi coordinates. In both cases, the buttons will add to or subtract from the corresponding variable(s) by the amount in the textbox. Note that you can right click on the buttons for more options so that you can customize the orientation of the buttons. Specifically, this allows you to rotate the buttons any one of eight ways, as well as invert the orientation (i.e. flip it).&lt;br /&gt;
** &#039;&#039;&#039;Line Controls&#039;&#039;&#039;: One the right are the Line Controls, consisting of 2 buttons and a textbox arranged in a vertical line formation. For Euler coordinates, these controls manipulate the y coordinate. For spherical coordinates, these controls manipulate the radius coordinate. In both cases, the buttons will add to or subtract from the corresponding variable by the amount in the textbox. Note that you can right click on the buttons for options to invert the buttons.&lt;br /&gt;
: Triplet controllers also frequently have a Relative Checkbox in the upper right, which toggles whether the controls manipulate the variables absolutely or relative to some angle. When in relative mode, the labels on the buttons will change to emphasize this. Specifically, F = forward, B = backward, L = left, R = right, U = up, D = down. Triplet Controllers are found on the left panel of several tabs of STROOP. However, you can also create your own Triplet Controller by selecting 3 or 4 variables to represent the x,y,z and optional angle variables, right clicking, and choosing to open a Triplet Controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;: An advanced controller is in charge of manipulating one or more variables. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name(s) of the variable(s) being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Fix Address Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are using fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Value Textbox&#039;&#039;&#039;: This displays the current value(s) of the variable(s). The background color is red if the variable(s) have fixed addresses, blue if the variable(s) don&#039;t have fixed addresses, and purple if some variables do and some variables don&#039;t have fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Lock Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are locked.&lt;br /&gt;
** &#039;&#039;&#039;Subtraction Button&#039;&#039;&#039;: This is used to subtract a value from the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Addition/Subtraction Textbox&#039;&#039;&#039;: This is the value that&#039;s used by the Addition Button and Subtraction Button.&lt;br /&gt;
** &#039;&#039;&#039;Addition Button&#039;&#039;&#039;: This is used to add a value to the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get Button&#039;&#039;&#039;: This gets the value(s) of the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get/Set Textbox&#039;&#039;&#039;: This is the value used by the Get Button and Set Button.&lt;br /&gt;
** &#039;&#039;&#039;Set Button&#039;&#039;&#039;: This sets the value(s) of the variable(s).&lt;br /&gt;
: Additional notes:&lt;br /&gt;
:* In the case of setting multiple variables, you can set all of the variables to different values by separating the values in the textbox with commas. Alternatively, leave just one value in the textbox to set all variables to that one value. The same applies to adding and subtracting values.&lt;br /&gt;
:* The add and subtract buttons can be inverted by right clicking on them and choosing to invert.&lt;br /&gt;
:* You can click on the add/subtract button and hold the mouse down while holding control in order to continuously add to or subtract from the variables. Alternatively, right click on either button and choose to Start Continuous Add (or Subtract) and then later choose to Stop Continuous Add (or Subtract).&lt;br /&gt;
: You can create an Advanced Controller for a variable by clicking on the variable while holding C. Alternatively, you can create an Advanced Controller for multiple variables by selecting multiple variables, right clicking, and choosing to open a controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bit Controller&#039;&#039;&#039;: A Bit Controller is in charge of manipulating one variable. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name of the variable being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Decimal Value&#039;&#039;&#039;: This shows the decimal value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Hex Value&#039;&#039;&#039;: This shows the hex value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Binary Value&#039;&#039;&#039;: This shows the binary value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Value Table&#039;&#039;&#039;: This shows various representations of the bytes of the variable, including the decimal representation, hex representation, and binary representation. It also provides a set of checkboxes that can be used to toggle each bit of the variable. For floats, these checkboxes are colored according to the bits&#039; role in the float, as blue represents sign, red represents exponent, and green represents mantissa.&lt;br /&gt;
: Note that for floats, you can right click on the empty space of the controller, and change what the textboxes display. Specifically, they can be set to display the sign, exponent, and mantissa values of the float. You can create a Bit Controller for a variable by clicking on the variable while holding B.&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;br /&gt;
&lt;br /&gt;
== Painting Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7722</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7722"/>
		<updated>2019-04-14T16:14:25Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Variables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variable Panel ==&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
Variables are found in a Variable Panel. An variable has 2 parts to it: a name (on the left) and a value (on the right). On every STROOP update, the value updates. Some variables are values in memory, while other variables are calculated manually (referred to as special variables). While memory variables can always be set, special variables may or may not be able to be set. All variables come with the following options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Highlight&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Lock&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Copy&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Paste&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Panel Options&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Controller&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Add to Custom Tab&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Fix Address&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Rename&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Remove&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Number variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Round to ...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Display as Hex&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Angle variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Signed&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Units...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Truncate to Multiple of 16&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Constrain to One Revolution&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Reverse&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Address variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;View Address&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Object variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Display as Object&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Select Object&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Triangle variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Select Triangle&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Boolean variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Display as Checkbox&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Display as Inverted&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Separately, if you right click on a variable that&#039;s selected, then you&#039;ll see a different set of options, which affect all selected variables. Options prefixed with &amp;quot;Angle:&amp;quot; only affect angles. Many of these options have just been covered, but the ones which haven&#039;t been are:&lt;br /&gt;
* &#039;&#039;&#039;Show Variable XML&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Show Variable Info&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Show Background Color...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Move...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Remove&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Rename&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Controller&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Triplet Controller&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Pop Out&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Add to Tab...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Add to Custom Tab&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The various kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are various kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A Simple Controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons are inverted, i.e. swapping whether subtraction is on the left and addition is on the right or vice versa. Simple Controllers are found on the left panel of several tabs of STROOP.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;: A Triplet Controller is in charge of manipulating a triplet of variables, usually a set of (x,y,z) Euler coordinates or (theta,phi,radius) spherical coordinates. It consists of 2 sets of controls:&lt;br /&gt;
** &#039;&#039;&#039;Square Controls&#039;&#039;&#039;: On the left are the Square Controls, consisting of 8 buttons and a textbox arranged in square formation. For Euler coordinates, these controls manipulate the x and z coordinates. For spherical coordinates, these controls manipulate the theta and phi coordinates. In both cases, the buttons will add to or subtract from the corresponding variable(s) by the amount in the textbox. Note that you can right click on the buttons for more options so that you can customize the orientation of the buttons. Specifically, this allows you to rotate the buttons any one of eight ways, as well as invert the orientation (i.e. flip it).&lt;br /&gt;
** &#039;&#039;&#039;Line Controls&#039;&#039;&#039;: One the right are the Line Controls, consisting of 2 buttons and a textbox arranged in a vertical line formation. For Euler coordinates, these controls manipulate the y coordinate. For spherical coordinates, these controls manipulate the radius coordinate. In both cases, the buttons will add to or subtract from the corresponding variable by the amount in the textbox. Note that you can right click on the buttons for options to invert the buttons.&lt;br /&gt;
: Triplet controllers also frequently have a Relative Checkbox in the upper right, which toggles whether the controls manipulate the variables absolutely or relative to some angle. When in relative mode, the labels on the buttons will change to emphasize this. Specifically, F = forward, B = backward, L = left, R = right, U = up, D = down. Triplet Controllers are found on the left panel of several tabs of STROOP. However, you can also create your own Triplet Controller by selecting 3 or 4 variables to represent the x,y,z and optional angle variables, right clicking, and choosing to open a Triplet Controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;: An advanced controller is in charge of manipulating one or more variables. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name(s) of the variable(s) being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Fix Address Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are using fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Value Textbox&#039;&#039;&#039;: This displays the current value(s) of the variable(s). The background color is red if the variable(s) have fixed addresses, blue if the variable(s) don&#039;t have fixed addresses, and purple if some variables do and some variables don&#039;t have fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Lock Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are locked.&lt;br /&gt;
** &#039;&#039;&#039;Subtraction Button&#039;&#039;&#039;: This is used to subtract a value from the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Addition/Subtraction Textbox&#039;&#039;&#039;: This is the value that&#039;s used by the Addition Button and Subtraction Button.&lt;br /&gt;
** &#039;&#039;&#039;Addition Button&#039;&#039;&#039;: This is used to add a value to the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get Button&#039;&#039;&#039;: This gets the value(s) of the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get/Set Textbox&#039;&#039;&#039;: This is the value used by the Get Button and Set Button.&lt;br /&gt;
** &#039;&#039;&#039;Set Button&#039;&#039;&#039;: This sets the value(s) of the variable(s).&lt;br /&gt;
: Additional notes:&lt;br /&gt;
:* In the case of setting multiple variables, you can set all of the variables to different values by separating the values in the textbox with commas. Alternatively, leave just one value in the textbox to set all variables to that one value. The same applies to adding and subtracting values.&lt;br /&gt;
:* The add and subtract buttons can be inverted by right clicking on them and choosing to invert.&lt;br /&gt;
:* You can click on the add/subtract button and hold the mouse down while holding control in order to continuously add to or subtract from the variables. Alternatively, right click on either button and choose to Start Continuous Add (or Subtract) and then later choose to Stop Continuous Add (or Subtract).&lt;br /&gt;
: You can create an Advanced Controller for a variable by clicking on the variable while holding C. Alternatively, you can create an Advanced Controller for multiple variables by selecting multiple variables, right clicking, and choosing to open a controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bit Controller&#039;&#039;&#039;: A Bit Controller is in charge of manipulating one variable. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name of the variable being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Decimal Value&#039;&#039;&#039;: This shows the decimal value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Hex Value&#039;&#039;&#039;: This shows the hex value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Binary Value&#039;&#039;&#039;: This shows the binary value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Value Table&#039;&#039;&#039;: This shows various representations of the bytes of the variable, including the decimal representation, hex representation, and binary representation. It also provides a set of checkboxes that can be used to toggle each bit of the variable. For floats, these checkboxes are colored according to the bits&#039; role in the float, as blue represents sign, red represents exponent, and green represents mantissa.&lt;br /&gt;
: Note that for floats, you can right click on the empty space of the controller, and change what the textboxes display. Specifically, they can be set to display the sign, exponent, and mantissa values of the float. You can create a Bit Controller for a variable by clicking on the variable while holding B.&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7721</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7721"/>
		<updated>2019-04-14T16:03:27Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Variables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variable Panel ==&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
Variables are found in a Variable Panel. An variable has 2 parts to it: a name (on the left) and a value (on the right). On every STROOP update, the value updates. Some variables are values in memory, while other variables are calculated manually (referred to as special variables). While memory variables can always be set, special variables may or may not be able to be set. All variables come with the following options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Highlight&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Lock&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Copy&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Paste&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Panel Options&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Controller&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Add to Custom Tab&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Fix Address&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Rename&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Remove&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Number variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Round to ...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Display as Hex&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Angle variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Signed&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Units...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Truncate to Multiple of 16&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Constrain to One Revolution&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Reverse&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Address variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;View Address&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Object variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Display as Object&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Select Object&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Triangle variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Select Triangle&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Boolean variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Display as Checkbox&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Display as Inverted&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Separately,&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The various kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are various kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A Simple Controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons are inverted, i.e. swapping whether subtraction is on the left and addition is on the right or vice versa. Simple Controllers are found on the left panel of several tabs of STROOP.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;: A Triplet Controller is in charge of manipulating a triplet of variables, usually a set of (x,y,z) Euler coordinates or (theta,phi,radius) spherical coordinates. It consists of 2 sets of controls:&lt;br /&gt;
** &#039;&#039;&#039;Square Controls&#039;&#039;&#039;: On the left are the Square Controls, consisting of 8 buttons and a textbox arranged in square formation. For Euler coordinates, these controls manipulate the x and z coordinates. For spherical coordinates, these controls manipulate the theta and phi coordinates. In both cases, the buttons will add to or subtract from the corresponding variable(s) by the amount in the textbox. Note that you can right click on the buttons for more options so that you can customize the orientation of the buttons. Specifically, this allows you to rotate the buttons any one of eight ways, as well as invert the orientation (i.e. flip it).&lt;br /&gt;
** &#039;&#039;&#039;Line Controls&#039;&#039;&#039;: One the right are the Line Controls, consisting of 2 buttons and a textbox arranged in a vertical line formation. For Euler coordinates, these controls manipulate the y coordinate. For spherical coordinates, these controls manipulate the radius coordinate. In both cases, the buttons will add to or subtract from the corresponding variable by the amount in the textbox. Note that you can right click on the buttons for options to invert the buttons.&lt;br /&gt;
: Triplet controllers also frequently have a Relative Checkbox in the upper right, which toggles whether the controls manipulate the variables absolutely or relative to some angle. When in relative mode, the labels on the buttons will change to emphasize this. Specifically, F = forward, B = backward, L = left, R = right, U = up, D = down. Triplet Controllers are found on the left panel of several tabs of STROOP. However, you can also create your own Triplet Controller by selecting 3 or 4 variables to represent the x,y,z and optional angle variables, right clicking, and choosing to open a Triplet Controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;: An advanced controller is in charge of manipulating one or more variables. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name(s) of the variable(s) being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Fix Address Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are using fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Value Textbox&#039;&#039;&#039;: This displays the current value(s) of the variable(s). The background color is red if the variable(s) have fixed addresses, blue if the variable(s) don&#039;t have fixed addresses, and purple if some variables do and some variables don&#039;t have fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Lock Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are locked.&lt;br /&gt;
** &#039;&#039;&#039;Subtraction Button&#039;&#039;&#039;: This is used to subtract a value from the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Addition/Subtraction Textbox&#039;&#039;&#039;: This is the value that&#039;s used by the Addition Button and Subtraction Button.&lt;br /&gt;
** &#039;&#039;&#039;Addition Button&#039;&#039;&#039;: This is used to add a value to the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get Button&#039;&#039;&#039;: This gets the value(s) of the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get/Set Textbox&#039;&#039;&#039;: This is the value used by the Get Button and Set Button.&lt;br /&gt;
** &#039;&#039;&#039;Set Button&#039;&#039;&#039;: This sets the value(s) of the variable(s).&lt;br /&gt;
: Additional notes:&lt;br /&gt;
:* In the case of setting multiple variables, you can set all of the variables to different values by separating the values in the textbox with commas. Alternatively, leave just one value in the textbox to set all variables to that one value. The same applies to adding and subtracting values.&lt;br /&gt;
:* The add and subtract buttons can be inverted by right clicking on them and choosing to invert.&lt;br /&gt;
:* You can click on the add/subtract button and hold the mouse down while holding control in order to continuously add to or subtract from the variables. Alternatively, right click on either button and choose to Start Continuous Add (or Subtract) and then later choose to Stop Continuous Add (or Subtract).&lt;br /&gt;
: You can create an Advanced Controller for a variable by clicking on the variable while holding C. Alternatively, you can create an Advanced Controller for multiple variables by selecting multiple variables, right clicking, and choosing to open a controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bit Controller&#039;&#039;&#039;: A Bit Controller is in charge of manipulating one variable. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name of the variable being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Decimal Value&#039;&#039;&#039;: This shows the decimal value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Hex Value&#039;&#039;&#039;: This shows the hex value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Binary Value&#039;&#039;&#039;: This shows the binary value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Value Table&#039;&#039;&#039;: This shows various representations of the bytes of the variable, including the decimal representation, hex representation, and binary representation. It also provides a set of checkboxes that can be used to toggle each bit of the variable. For floats, these checkboxes are colored according to the bits&#039; role in the float, as blue represents sign, red represents exponent, and green represents mantissa.&lt;br /&gt;
: Note that for floats, you can right click on the empty space of the controller, and change what the textboxes display. Specifically, they can be set to display the sign, exponent, and mantissa values of the float. You can create a Bit Controller for a variable by clicking on the variable while holding B.&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7720</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7720"/>
		<updated>2019-04-14T15:59:02Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Variables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variable Panel ==&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
Variables are found in a Variable Panel. An variable has 2 parts to it: a name (on the left) and a value (on the right). On every STROOP update, the value updates. Some variables are values in memory, while other variables are calculated manually (referred to as special variables). While memory variables can always be set, special variables may or may not be able to be set. All variables come with the following options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Highlight&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Lock&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Copy&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Paste&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Panel Options&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Open Controller&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Add to Custom Tab&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Fix Address&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Rename&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Remove&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Number variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Round to ...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Display as Hex&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Angle variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Signed&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Units...&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Truncate to Multiple of 16&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Constrain to One Revolution&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Reverse&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Address variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;View Address&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Object variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Display as Object&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Select Object&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Triangle variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Select Triangle&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Boolean variables come with the following additional options when right clicked:&lt;br /&gt;
* &#039;&#039;&#039;Display as Checkbox&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Display as Inverted&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The various kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are various kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A Simple Controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons are inverted, i.e. swapping whether subtraction is on the left and addition is on the right or vice versa. Simple Controllers are found on the left panel of several tabs of STROOP.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;: A Triplet Controller is in charge of manipulating a triplet of variables, usually a set of (x,y,z) Euler coordinates or (theta,phi,radius) spherical coordinates. It consists of 2 sets of controls:&lt;br /&gt;
** &#039;&#039;&#039;Square Controls&#039;&#039;&#039;: On the left are the Square Controls, consisting of 8 buttons and a textbox arranged in square formation. For Euler coordinates, these controls manipulate the x and z coordinates. For spherical coordinates, these controls manipulate the theta and phi coordinates. In both cases, the buttons will add to or subtract from the corresponding variable(s) by the amount in the textbox. Note that you can right click on the buttons for more options so that you can customize the orientation of the buttons. Specifically, this allows you to rotate the buttons any one of eight ways, as well as invert the orientation (i.e. flip it).&lt;br /&gt;
** &#039;&#039;&#039;Line Controls&#039;&#039;&#039;: One the right are the Line Controls, consisting of 2 buttons and a textbox arranged in a vertical line formation. For Euler coordinates, these controls manipulate the y coordinate. For spherical coordinates, these controls manipulate the radius coordinate. In both cases, the buttons will add to or subtract from the corresponding variable by the amount in the textbox. Note that you can right click on the buttons for options to invert the buttons.&lt;br /&gt;
: Triplet controllers also frequently have a Relative Checkbox in the upper right, which toggles whether the controls manipulate the variables absolutely or relative to some angle. When in relative mode, the labels on the buttons will change to emphasize this. Specifically, F = forward, B = backward, L = left, R = right, U = up, D = down. Triplet Controllers are found on the left panel of several tabs of STROOP. However, you can also create your own Triplet Controller by selecting 3 or 4 variables to represent the x,y,z and optional angle variables, right clicking, and choosing to open a Triplet Controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;: An advanced controller is in charge of manipulating one or more variables. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name(s) of the variable(s) being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Fix Address Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are using fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Value Textbox&#039;&#039;&#039;: This displays the current value(s) of the variable(s). The background color is red if the variable(s) have fixed addresses, blue if the variable(s) don&#039;t have fixed addresses, and purple if some variables do and some variables don&#039;t have fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Lock Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are locked.&lt;br /&gt;
** &#039;&#039;&#039;Subtraction Button&#039;&#039;&#039;: This is used to subtract a value from the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Addition/Subtraction Textbox&#039;&#039;&#039;: This is the value that&#039;s used by the Addition Button and Subtraction Button.&lt;br /&gt;
** &#039;&#039;&#039;Addition Button&#039;&#039;&#039;: This is used to add a value to the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get Button&#039;&#039;&#039;: This gets the value(s) of the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get/Set Textbox&#039;&#039;&#039;: This is the value used by the Get Button and Set Button.&lt;br /&gt;
** &#039;&#039;&#039;Set Button&#039;&#039;&#039;: This sets the value(s) of the variable(s).&lt;br /&gt;
: Additional notes:&lt;br /&gt;
:* In the case of setting multiple variables, you can set all of the variables to different values by separating the values in the textbox with commas. Alternatively, leave just one value in the textbox to set all variables to that one value. The same applies to adding and subtracting values.&lt;br /&gt;
:* The add and subtract buttons can be inverted by right clicking on them and choosing to invert.&lt;br /&gt;
:* You can click on the add/subtract button and hold the mouse down while holding control in order to continuously add to or subtract from the variables. Alternatively, right click on either button and choose to Start Continuous Add (or Subtract) and then later choose to Stop Continuous Add (or Subtract).&lt;br /&gt;
: You can create an Advanced Controller for a variable by clicking on the variable while holding C. Alternatively, you can create an Advanced Controller for multiple variables by selecting multiple variables, right clicking, and choosing to open a controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bit Controller&#039;&#039;&#039;: A Bit Controller is in charge of manipulating one variable. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name of the variable being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Decimal Value&#039;&#039;&#039;: This shows the decimal value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Hex Value&#039;&#039;&#039;: This shows the hex value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Binary Value&#039;&#039;&#039;: This shows the binary value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Value Table&#039;&#039;&#039;: This shows various representations of the bytes of the variable, including the decimal representation, hex representation, and binary representation. It also provides a set of checkboxes that can be used to toggle each bit of the variable. For floats, these checkboxes are colored according to the bits&#039; role in the float, as blue represents sign, red represents exponent, and green represents mantissa.&lt;br /&gt;
: Note that for floats, you can right click on the empty space of the controller, and change what the textboxes display. Specifically, they can be set to display the sign, exponent, and mantissa values of the float. You can create a Bit Controller for a variable by clicking on the variable while holding B.&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7719</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7719"/>
		<updated>2019-04-14T15:47:32Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Variables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variable Panel ==&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
Variables are found in a Variable Panel. An variable has 2 parts to it: a name (on the left) and a value (on the right). On every STROOP update, the value updates. Some variables are values in memory, while other variables are calculated manually (referred to as special variables). While memory variables can always be set, special variables may or may not be able to be set.&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The various kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are various kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A Simple Controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons are inverted, i.e. swapping whether subtraction is on the left and addition is on the right or vice versa. Simple Controllers are found on the left panel of several tabs of STROOP.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;: A Triplet Controller is in charge of manipulating a triplet of variables, usually a set of (x,y,z) Euler coordinates or (theta,phi,radius) spherical coordinates. It consists of 2 sets of controls:&lt;br /&gt;
** &#039;&#039;&#039;Square Controls&#039;&#039;&#039;: On the left are the Square Controls, consisting of 8 buttons and a textbox arranged in square formation. For Euler coordinates, these controls manipulate the x and z coordinates. For spherical coordinates, these controls manipulate the theta and phi coordinates. In both cases, the buttons will add to or subtract from the corresponding variable(s) by the amount in the textbox. Note that you can right click on the buttons for more options so that you can customize the orientation of the buttons. Specifically, this allows you to rotate the buttons any one of eight ways, as well as invert the orientation (i.e. flip it).&lt;br /&gt;
** &#039;&#039;&#039;Line Controls&#039;&#039;&#039;: One the right are the Line Controls, consisting of 2 buttons and a textbox arranged in a vertical line formation. For Euler coordinates, these controls manipulate the y coordinate. For spherical coordinates, these controls manipulate the radius coordinate. In both cases, the buttons will add to or subtract from the corresponding variable by the amount in the textbox. Note that you can right click on the buttons for options to invert the buttons.&lt;br /&gt;
: Triplet controllers also frequently have a Relative Checkbox in the upper right, which toggles whether the controls manipulate the variables absolutely or relative to some angle. When in relative mode, the labels on the buttons will change to emphasize this. Specifically, F = forward, B = backward, L = left, R = right, U = up, D = down. Triplet Controllers are found on the left panel of several tabs of STROOP. However, you can also create your own Triplet Controller by selecting 3 or 4 variables to represent the x,y,z and optional angle variables, right clicking, and choosing to open a Triplet Controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;: An advanced controller is in charge of manipulating one or more variables. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name(s) of the variable(s) being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Fix Address Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are using fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Value Textbox&#039;&#039;&#039;: This displays the current value(s) of the variable(s). The background color is red if the variable(s) have fixed addresses, blue if the variable(s) don&#039;t have fixed addresses, and purple if some variables do and some variables don&#039;t have fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Lock Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are locked.&lt;br /&gt;
** &#039;&#039;&#039;Subtraction Button&#039;&#039;&#039;: This is used to subtract a value from the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Addition/Subtraction Textbox&#039;&#039;&#039;: This is the value that&#039;s used by the Addition Button and Subtraction Button.&lt;br /&gt;
** &#039;&#039;&#039;Addition Button&#039;&#039;&#039;: This is used to add a value to the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get Button&#039;&#039;&#039;: This gets the value(s) of the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get/Set Textbox&#039;&#039;&#039;: This is the value used by the Get Button and Set Button.&lt;br /&gt;
** &#039;&#039;&#039;Set Button&#039;&#039;&#039;: This sets the value(s) of the variable(s).&lt;br /&gt;
: Additional notes:&lt;br /&gt;
:* In the case of setting multiple variables, you can set all of the variables to different values by separating the values in the textbox with commas. Alternatively, leave just one value in the textbox to set all variables to that one value. The same applies to adding and subtracting values.&lt;br /&gt;
:* The add and subtract buttons can be inverted by right clicking on them and choosing to invert.&lt;br /&gt;
:* You can click on the add/subtract button and hold the mouse down while holding control in order to continuously add to or subtract from the variables. Alternatively, right click on either button and choose to Start Continuous Add (or Subtract) and then later choose to Stop Continuous Add (or Subtract).&lt;br /&gt;
: You can create an Advanced Controller for a variable by clicking on the variable while holding C. Alternatively, you can create an Advanced Controller for multiple variables by selecting multiple variables, right clicking, and choosing to open a controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bit Controller&#039;&#039;&#039;: A Bit Controller is in charge of manipulating one variable. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name of the variable being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Decimal Value&#039;&#039;&#039;: This shows the decimal value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Hex Value&#039;&#039;&#039;: This shows the hex value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Binary Value&#039;&#039;&#039;: This shows the binary value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Value Table&#039;&#039;&#039;: This shows various representations of the bytes of the variable, including the decimal representation, hex representation, and binary representation. It also provides a set of checkboxes that can be used to toggle each bit of the variable. For floats, these checkboxes are colored according to the bits&#039; role in the float, as blue represents sign, red represents exponent, and green represents mantissa.&lt;br /&gt;
: Note that for floats, you can right click on the empty space of the controller, and change what the textboxes display. Specifically, they can be set to display the sign, exponent, and mantissa values of the float. You can create a Bit Controller for a variable by clicking on the variable while holding B.&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7718</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7718"/>
		<updated>2019-04-14T15:43:57Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Variables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variable Panel ==&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
Variables are found in a Variable Panel. An object slot has 2 parts to it: a name (on the left) and a value (on the right). On every STROOP update, the value updates. Some variables are values in memory, while other variables are calculated manually (referred to as special variables). While memory variables can always be set, special variables may or may not be able to be set.&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The various kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are various kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A Simple Controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons are inverted, i.e. swapping whether subtraction is on the left and addition is on the right or vice versa. Simple Controllers are found on the left panel of several tabs of STROOP.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;: A Triplet Controller is in charge of manipulating a triplet of variables, usually a set of (x,y,z) Euler coordinates or (theta,phi,radius) spherical coordinates. It consists of 2 sets of controls:&lt;br /&gt;
** &#039;&#039;&#039;Square Controls&#039;&#039;&#039;: On the left are the Square Controls, consisting of 8 buttons and a textbox arranged in square formation. For Euler coordinates, these controls manipulate the x and z coordinates. For spherical coordinates, these controls manipulate the theta and phi coordinates. In both cases, the buttons will add to or subtract from the corresponding variable(s) by the amount in the textbox. Note that you can right click on the buttons for more options so that you can customize the orientation of the buttons. Specifically, this allows you to rotate the buttons any one of eight ways, as well as invert the orientation (i.e. flip it).&lt;br /&gt;
** &#039;&#039;&#039;Line Controls&#039;&#039;&#039;: One the right are the Line Controls, consisting of 2 buttons and a textbox arranged in a vertical line formation. For Euler coordinates, these controls manipulate the y coordinate. For spherical coordinates, these controls manipulate the radius coordinate. In both cases, the buttons will add to or subtract from the corresponding variable by the amount in the textbox. Note that you can right click on the buttons for options to invert the buttons.&lt;br /&gt;
: Triplet controllers also frequently have a Relative Checkbox in the upper right, which toggles whether the controls manipulate the variables absolutely or relative to some angle. When in relative mode, the labels on the buttons will change to emphasize this. Specifically, F = forward, B = backward, L = left, R = right, U = up, D = down. Triplet Controllers are found on the left panel of several tabs of STROOP. However, you can also create your own Triplet Controller by selecting 3 or 4 variables to represent the x,y,z and optional angle variables, right clicking, and choosing to open a Triplet Controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;: An advanced controller is in charge of manipulating one or more variables. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name(s) of the variable(s) being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Fix Address Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are using fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Value Textbox&#039;&#039;&#039;: This displays the current value(s) of the variable(s). The background color is red if the variable(s) have fixed addresses, blue if the variable(s) don&#039;t have fixed addresses, and purple if some variables do and some variables don&#039;t have fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Lock Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are locked.&lt;br /&gt;
** &#039;&#039;&#039;Subtraction Button&#039;&#039;&#039;: This is used to subtract a value from the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Addition/Subtraction Textbox&#039;&#039;&#039;: This is the value that&#039;s used by the Addition Button and Subtraction Button.&lt;br /&gt;
** &#039;&#039;&#039;Addition Button&#039;&#039;&#039;: This is used to add a value to the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get Button&#039;&#039;&#039;: This gets the value(s) of the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get/Set Textbox&#039;&#039;&#039;: This is the value used by the Get Button and Set Button.&lt;br /&gt;
** &#039;&#039;&#039;Set Button&#039;&#039;&#039;: This sets the value(s) of the variable(s).&lt;br /&gt;
: Additional notes:&lt;br /&gt;
:* In the case of setting multiple variables, you can set all of the variables to different values by separating the values in the textbox with commas. Alternatively, leave just one value in the textbox to set all variables to that one value. The same applies to adding and subtracting values.&lt;br /&gt;
:* The add and subtract buttons can be inverted by right clicking on them and choosing to invert.&lt;br /&gt;
:* You can click on the add/subtract button and hold the mouse down while holding control in order to continuously add to or subtract from the variables. Alternatively, right click on either button and choose to Start Continuous Add (or Subtract) and then later choose to Stop Continuous Add (or Subtract).&lt;br /&gt;
: You can create an Advanced Controller for a variable by clicking on the variable while holding C. Alternatively, you can create an Advanced Controller for multiple variables by selecting multiple variables, right clicking, and choosing to open a controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bit Controller&#039;&#039;&#039;: A Bit Controller is in charge of manipulating one variable. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name of the variable being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Decimal Value&#039;&#039;&#039;: This shows the decimal value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Hex Value&#039;&#039;&#039;: This shows the hex value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Binary Value&#039;&#039;&#039;: This shows the binary value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Value Table&#039;&#039;&#039;: This shows various representations of the bytes of the variable, including the decimal representation, hex representation, and binary representation. It also provides a set of checkboxes that can be used to toggle each bit of the variable. For floats, these checkboxes are colored according to the bits&#039; role in the float, as blue represents sign, red represents exponent, and green represents mantissa.&lt;br /&gt;
: Note that for floats, you can right click on the empty space of the controller, and change what the textboxes display. Specifically, they can be set to display the sign, exponent, and mantissa values of the float. You can create a Bit Controller for a variable by clicking on the variable while holding B.&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7717</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7717"/>
		<updated>2019-04-14T15:36:03Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Controllers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variable Panel ==&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
Variables are found in a Variable Panel. An object slot has 2 parts to it: a name and a value. &lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The various kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are various kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A Simple Controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons are inverted, i.e. swapping whether subtraction is on the left and addition is on the right or vice versa. Simple Controllers are found on the left panel of several tabs of STROOP.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;: A Triplet Controller is in charge of manipulating a triplet of variables, usually a set of (x,y,z) Euler coordinates or (theta,phi,radius) spherical coordinates. It consists of 2 sets of controls:&lt;br /&gt;
** &#039;&#039;&#039;Square Controls&#039;&#039;&#039;: On the left are the Square Controls, consisting of 8 buttons and a textbox arranged in square formation. For Euler coordinates, these controls manipulate the x and z coordinates. For spherical coordinates, these controls manipulate the theta and phi coordinates. In both cases, the buttons will add to or subtract from the corresponding variable(s) by the amount in the textbox. Note that you can right click on the buttons for more options so that you can customize the orientation of the buttons. Specifically, this allows you to rotate the buttons any one of eight ways, as well as invert the orientation (i.e. flip it).&lt;br /&gt;
** &#039;&#039;&#039;Line Controls&#039;&#039;&#039;: One the right are the Line Controls, consisting of 2 buttons and a textbox arranged in a vertical line formation. For Euler coordinates, these controls manipulate the y coordinate. For spherical coordinates, these controls manipulate the radius coordinate. In both cases, the buttons will add to or subtract from the corresponding variable by the amount in the textbox. Note that you can right click on the buttons for options to invert the buttons.&lt;br /&gt;
: Triplet controllers also frequently have a Relative Checkbox in the upper right, which toggles whether the controls manipulate the variables absolutely or relative to some angle. When in relative mode, the labels on the buttons will change to emphasize this. Specifically, F = forward, B = backward, L = left, R = right, U = up, D = down. Triplet Controllers are found on the left panel of several tabs of STROOP. However, you can also create your own Triplet Controller by selecting 3 or 4 variables to represent the x,y,z and optional angle variables, right clicking, and choosing to open a Triplet Controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;: An advanced controller is in charge of manipulating one or more variables. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name(s) of the variable(s) being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Fix Address Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are using fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Value Textbox&#039;&#039;&#039;: This displays the current value(s) of the variable(s). The background color is red if the variable(s) have fixed addresses, blue if the variable(s) don&#039;t have fixed addresses, and purple if some variables do and some variables don&#039;t have fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Lock Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are locked.&lt;br /&gt;
** &#039;&#039;&#039;Subtraction Button&#039;&#039;&#039;: This is used to subtract a value from the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Addition/Subtraction Textbox&#039;&#039;&#039;: This is the value that&#039;s used by the Addition Button and Subtraction Button.&lt;br /&gt;
** &#039;&#039;&#039;Addition Button&#039;&#039;&#039;: This is used to add a value to the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get Button&#039;&#039;&#039;: This gets the value(s) of the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get/Set Textbox&#039;&#039;&#039;: This is the value used by the Get Button and Set Button.&lt;br /&gt;
** &#039;&#039;&#039;Set Button&#039;&#039;&#039;: This sets the value(s) of the variable(s).&lt;br /&gt;
: Additional notes:&lt;br /&gt;
:* In the case of setting multiple variables, you can set all of the variables to different values by separating the values in the textbox with commas. Alternatively, leave just one value in the textbox to set all variables to that one value. The same applies to adding and subtracting values.&lt;br /&gt;
:* The add and subtract buttons can be inverted by right clicking on them and choosing to invert.&lt;br /&gt;
:* You can click on the add/subtract button and hold the mouse down while holding control in order to continuously add to or subtract from the variables. Alternatively, right click on either button and choose to Start Continuous Add (or Subtract) and then later choose to Stop Continuous Add (or Subtract).&lt;br /&gt;
: You can create an Advanced Controller for a variable by clicking on the variable while holding C. Alternatively, you can create an Advanced Controller for multiple variables by selecting multiple variables, right clicking, and choosing to open a controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bit Controller&#039;&#039;&#039;: A Bit Controller is in charge of manipulating one variable. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name of the variable being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Decimal Value&#039;&#039;&#039;: This shows the decimal value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Hex Value&#039;&#039;&#039;: This shows the hex value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Binary Value&#039;&#039;&#039;: This shows the binary value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Value Table&#039;&#039;&#039;: This shows various representations of the bytes of the variable, including the decimal representation, hex representation, and binary representation. It also provides a set of checkboxes that can be used to toggle each bit of the variable. For floats, these checkboxes are colored according to the bits&#039; role in the float, as blue represents sign, red represents exponent, and green represents mantissa.&lt;br /&gt;
: Note that for floats, you can right click on the empty space of the controller, and change what the textboxes display. Specifically, they can be set to display the sign, exponent, and mantissa values of the float. You can create a Bit Controller for a variable by clicking on the variable while holding B.&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7716</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7716"/>
		<updated>2019-04-14T15:30:00Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variable Panel ==&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
Variables are found in a Variable Panel. An object slot has 2 parts to it: a name and a value. &lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The various kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are various kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A Simple Controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons are inverted, i.e. swapping whether subtraction is on the left and addition is on the right or vice versa. Simple Controllers are found on the left panel of several tabs of STROOP.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;: A Triplet Controller is in charge of manipulating a triplet of variables, usually a set of (x,y,z) Euler coordinates or (theta,phi,radius) spherical coordinates. It consists of 2 sets of controls:&lt;br /&gt;
** &#039;&#039;&#039;Square Controls&#039;&#039;&#039;: On the left are the Square Controls, consisting of 8 buttons and a textbox arranged in square formation. For Euler coordinates, these controls manipulate the x and z coordinates. For spherical coordinates, these controls manipulate the theta and phi coordinates. In both cases, the buttons will add to or subtract from the corresponding variable(s) by the amount in the textbox. Note that you can right click on the buttons for more options so that you can customize the orientation of the buttons. Specifically, this allows you to rotate the buttons any one of eight ways, as well as invert the orientation (i.e. flip it).&lt;br /&gt;
** &#039;&#039;&#039;Line Controls&#039;&#039;&#039;: One the right are the Line Controls, consisting of 2 buttons and a textbox arranged in a vertical line formation. For Euler coordinates, these controls manipulate the y coordinate. For spherical coordinates, these controls manipulate the radius coordinate. In both cases, the buttons will add to or subtract from the corresponding variable by the amount in the textbox. Note that you can right click on the buttons for options to invert the buttons.&lt;br /&gt;
: Triplet controllers also frequently have a Relative Checkbox in the upper right, which toggles whether the controls manipulate the variables absolutely or relative to some angle. When in relative mode, the labels on the buttons will change to emphasize this. Specifically, F = forward, B = backward, L = left, R = right, U = up, D = down. Triplet Controllers are found on the left panel of several tabs of STROOP. However, you can also create your own Triplet Controller by selecting 3 or 4 variables to represent the x,y,z and optional angle variables, right clicking, and choosing to open a Triplet Controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;: An advanced controller is in charge of manipulating one or more variables. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name(s) of the variable(s) being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Fix Address Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are using fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Value Textbox&#039;&#039;&#039;: This displays the current value(s) of the variable(s). The background color is red if the variable(s) have fixed addresses, blue if the variable(s) don&#039;t have fixed addresses, and purple if some variables do and some variables don&#039;t have fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Lock Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are locked.&lt;br /&gt;
** &#039;&#039;&#039;Subtraction Button&#039;&#039;&#039;: This is used to subtract a value from the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Addition/Subtraction Textbox&#039;&#039;&#039;: This is the value that&#039;s used by the Addition Button and Subtraction Button.&lt;br /&gt;
** &#039;&#039;&#039;Addition Button&#039;&#039;&#039;: This is used to add a value to the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get Button&#039;&#039;&#039;: This gets the value(s) of the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get/Set Textbox&#039;&#039;&#039;: This is the value used by the Get Button and Set Button.&lt;br /&gt;
** &#039;&#039;&#039;Set Button&#039;&#039;&#039;: This sets the value(s) of the variable(s).&lt;br /&gt;
: Additional notes:&lt;br /&gt;
:* In the case of setting multiple variables, you can set all of the variables to different values by separating the values in the textbox with commas. Alternatively, leave just one value in the textbox to set all variables to that one value. The same applies to adding and subtracting values.&lt;br /&gt;
:* The add and subtract buttons can be inverted by right clicking on them and choosing to invert.&lt;br /&gt;
:* You can click on the add/subtract button and hold the mouse down while holding control in order to continuously add to or subtract from the variables. Alternatively, right click on either button and choose to Start Continuous Add (or Subtract) and then later choose to Stop Continuous Add (or Subtract).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bit Controller&#039;&#039;&#039;: A Bit Controller is in charge of manipulating one variable. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name of the variable being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Decimal Value&#039;&#039;&#039;: This shows the decimal value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Hex Value&#039;&#039;&#039;: This shows the hex value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Binary Value&#039;&#039;&#039;: This shows the binary value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Value Table&#039;&#039;&#039;: This shows various representations of the bytes of the variable, including the decimal representation, hex representation, and binary representation. It also provides a set of checkboxes that can be used to toggle each bit of the variable. For floats, these checkboxes are colored according to the bits&#039; role in the float, as blue represents sign, red represents exponent, and green represents mantissa.&lt;br /&gt;
: Note that for floats, you can right click on the empty space of the controller, and change what the textboxes display. Specifically, they can be set to display the sign, exponent, and mantissa values of the float.&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7714</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7714"/>
		<updated>2019-04-14T15:23:23Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Controllers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The various kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are various kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A Simple Controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons are inverted, i.e. swapping whether subtraction is on the left and addition is on the right or vice versa. Simple Controllers are found on the left panel of several tabs of STROOP.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;: A Triplet Controller is in charge of manipulating a triplet of variables, usually a set of (x,y,z) Euler coordinates or (theta,phi,radius) spherical coordinates. It consists of 2 sets of controls:&lt;br /&gt;
** &#039;&#039;&#039;Square Controls&#039;&#039;&#039;: On the left are the Square Controls, consisting of 8 buttons and a textbox arranged in square formation. For Euler coordinates, these controls manipulate the x and z coordinates. For spherical coordinates, these controls manipulate the theta and phi coordinates. In both cases, the buttons will add to or subtract from the corresponding variable(s) by the amount in the textbox. Note that you can right click on the buttons for more options so that you can customize the orientation of the buttons. Specifically, this allows you to rotate the buttons any one of eight ways, as well as invert the orientation (i.e. flip it).&lt;br /&gt;
** &#039;&#039;&#039;Line Controls&#039;&#039;&#039;: One the right are the Line Controls, consisting of 2 buttons and a textbox arranged in a vertical line formation. For Euler coordinates, these controls manipulate the y coordinate. For spherical coordinates, these controls manipulate the radius coordinate. In both cases, the buttons will add to or subtract from the corresponding variable by the amount in the textbox. Note that you can right click on the buttons for options to invert the buttons.&lt;br /&gt;
: Triplet controllers also frequently have a Relative Checkbox in the upper right, which toggles whether the controls manipulate the variables absolutely or relative to some angle. When in relative mode, the labels on the buttons will change to emphasize this. Specifically, F = forward, B = backward, L = left, R = right, U = up, D = down. Triplet Controllers are found on the left panel of several tabs of STROOP. However, you can also create your own Triplet Controller by selecting 3 or 4 variables to represent the x,y,z and optional angle variables, right clicking, and choosing to open a Triplet Controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;: An advanced controller is in charge of manipulating one or more variables. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name(s) of the variable(s) being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Fix Address Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are using fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Value Textbox&#039;&#039;&#039;: This displays the current value(s) of the variable(s). The background color is red if the variable(s) have fixed addresses, blue if the variable(s) don&#039;t have fixed addresses, and purple if some variables do and some variables don&#039;t have fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Lock Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are locked.&lt;br /&gt;
** &#039;&#039;&#039;Subtraction Button&#039;&#039;&#039;: This is used to subtract a value from the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Addition/Subtraction Textbox&#039;&#039;&#039;: This is the value that&#039;s used by the Addition Button and Subtraction Button.&lt;br /&gt;
** &#039;&#039;&#039;Addition Button&#039;&#039;&#039;: This is used to add a value to the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get Button&#039;&#039;&#039;: This gets the value(s) of the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get/Set Textbox&#039;&#039;&#039;: This is the value used by the Get Button and Set Button.&lt;br /&gt;
** &#039;&#039;&#039;Set Button&#039;&#039;&#039;: This sets the value(s) of the variable(s).&lt;br /&gt;
: Additional notes:&lt;br /&gt;
:* In the case of setting multiple variables, you can set all of the variables to different values by separating the values in the textbox with commas. Alternatively, leave just one value in the textbox to set all variables to that one value. The same applies to adding and subtracting values.&lt;br /&gt;
:* The add and subtract buttons can be inverted by right clicking on them and choosing to invert.&lt;br /&gt;
:* You can click on the add/subtract button and hold the mouse down while holding control in order to continuously add to or subtract from the variables. Alternatively, right click on either button and choose to Start Continuous Add (or Subtract) and then later choose to Stop Continuous Add (or Subtract).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bit Controller&#039;&#039;&#039;: A Bit Controller is in charge of manipulating one variable. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name of the variable being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Decimal Value&#039;&#039;&#039;: This shows the decimal value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Hex Value&#039;&#039;&#039;: This shows the hex value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Binary Value&#039;&#039;&#039;: This shows the binary value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Value Table&#039;&#039;&#039;: This shows various representations of the bytes of the variable, including the decimal representation, hex representation, and binary representation. It also provides a set of checkboxes that can be used to toggle each bit of the variable. For floats, these checkboxes are colored according to the bits&#039; role in the float, as blue represents sign, red represents exponent, and green represents mantissa.&lt;br /&gt;
: Note that for floats, you can right click on the empty space of the controller, and change what the textboxes display. Specifically, they can be set to display the sign, exponent, and mantissa values of the float.&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7713</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7713"/>
		<updated>2019-04-14T15:22:43Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Controllers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The 3 kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are various kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A Simple Controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons are inverted, i.e. swapping whether subtraction is on the left and addition is on the right or vice versa. Simple Controllers are found on the left panel of several tabs of STROOP.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;: A Triplet Controller is in charge of manipulating a triplet of variables, usually a set of (x,y,z) Euler coordinates or (theta,phi,radius) spherical coordinates. It consists of 2 sets of controls:&lt;br /&gt;
** &#039;&#039;&#039;Square Controls&#039;&#039;&#039;: On the left are the Square Controls, consisting of 8 buttons and a textbox arranged in square formation. For Euler coordinates, these controls manipulate the x and z coordinates. For spherical coordinates, these controls manipulate the theta and phi coordinates. In both cases, the buttons will add to or subtract from the corresponding variable(s) by the amount in the textbox. Note that you can right click on the buttons for more options so that you can customize the orientation of the buttons. Specifically, this allows you to rotate the buttons any one of eight ways, as well as invert the orientation (i.e. flip it).&lt;br /&gt;
** &#039;&#039;&#039;Line Controls&#039;&#039;&#039;: One the right are the Line Controls, consisting of 2 buttons and a textbox arranged in a vertical line formation. For Euler coordinates, these controls manipulate the y coordinate. For spherical coordinates, these controls manipulate the radius coordinate. In both cases, the buttons will add to or subtract from the corresponding variable by the amount in the textbox. Note that you can right click on the buttons for options to invert the buttons.&lt;br /&gt;
: Triplet controllers also frequently have a Relative Checkbox in the upper right, which toggles whether the controls manipulate the variables absolutely or relative to some angle. When in relative mode, the labels on the buttons will change to emphasize this. Specifically, F = forward, B = backward, L = left, R = right, U = up, D = down. Triplet Controllers are found on the left panel of several tabs of STROOP. However, you can also create your own Triplet Controller by selecting 3 or 4 variables to represent the x,y,z and optional angle variables, right clicking, and choosing to open a Triplet Controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;: An advanced controller is in charge of manipulating one or more variables. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name(s) of the variable(s) being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Fix Address Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are using fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Value Textbox&#039;&#039;&#039;: This displays the current value(s) of the variable(s). The background color is red if the variable(s) have fixed addresses, blue if the variable(s) don&#039;t have fixed addresses, and purple if some variables do and some variables don&#039;t have fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Lock Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are locked.&lt;br /&gt;
** &#039;&#039;&#039;Subtraction Button&#039;&#039;&#039;: This is used to subtract a value from the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Addition/Subtraction Textbox&#039;&#039;&#039;: This is the value that&#039;s used by the Addition Button and Subtraction Button.&lt;br /&gt;
** &#039;&#039;&#039;Addition Button&#039;&#039;&#039;: This is used to add a value to the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get Button&#039;&#039;&#039;: This gets the value(s) of the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get/Set Textbox&#039;&#039;&#039;: This is the value used by the Get Button and Set Button.&lt;br /&gt;
** &#039;&#039;&#039;Set Button&#039;&#039;&#039;: This sets the value(s) of the variable(s).&lt;br /&gt;
: Additional notes:&lt;br /&gt;
:* In the case of setting multiple variables, you can set all of the variables to different values by separating the values in the textbox with commas. Alternatively, leave just one value in the textbox to set all variables to that one value. The same applies to adding and subtracting values.&lt;br /&gt;
:* The add and subtract buttons can be inverted by right clicking on them and choosing to invert.&lt;br /&gt;
:* You can click on the add/subtract button and hold the mouse down while holding control in order to continuously add to or subtract from the variables. Alternatively, right click on either button and choose to Start Continuous Add (or Subtract) and then later choose to Stop Continuous Add (or Subtract).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bit Controller&#039;&#039;&#039;: A Bit Controller is in charge of manipulating one variable. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name of the variable being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Decimal Value&#039;&#039;&#039;: This shows the decimal value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Hex Value&#039;&#039;&#039;: This shows the hex value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Binary Value&#039;&#039;&#039;: This shows the binary value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Value Table&#039;&#039;&#039;: This shows various representations of the bytes of the variable, including the decimal representation, hex representation, and binary representation. It also provides a set of checkboxes that can be used to toggle each bit of the variable. For floats, these checkboxes are colored according to the bits&#039; role in the float, as blue represents sign, red represents exponent, and green represents mantissa.&lt;br /&gt;
: Note that for floats, you can right click on the empty space of the controller, and change what the textboxes display. Specifically, they can be set to display the sign, exponent, and mantissa values of the float.&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7712</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7712"/>
		<updated>2019-04-14T15:18:29Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Controllers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The 3 kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are various kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A Simple Controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons are inverted, i.e. swapping whether subtraction is on the left and addition is on the right or vice versa. Simple Controllers are found on the left panel of several tabs of STROOP.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;: A Triplet Controller is in charge of manipulating a triplet of variables, usually a set of (x,y,z) Euler coordinates or (theta,phi,radius) spherical coordinates. It consists of 2 sets of controls:&lt;br /&gt;
** &#039;&#039;&#039;Square Controls&#039;&#039;&#039;: On the left are the Square Controls, consisting of 8 buttons and a textbox arranged in square formation. For Euler coordinates, these controls manipulate the x and z coordinates. For spherical coordinates, these controls manipulate the theta and phi coordinates. In both cases, the buttons will add to or subtract from the corresponding variable(s) by the amount in the textbox. Note that you can right click on the buttons for more options so that you can customize the orientation of the buttons. Specifically, this allows you to rotate the buttons any one of eight ways, as well as invert the orientation (i.e. flip it).&lt;br /&gt;
** &#039;&#039;&#039;Line Controls&#039;&#039;&#039;: One the right are the Line Controls, consisting of 2 buttons and a textbox arranged in a vertical line formation. For Euler coordinates, these controls manipulate the y coordinate. For spherical coordinates, these controls manipulate the radius coordinate. In both cases, the buttons will add to or subtract from the corresponding variable by the amount in the textbox. Note that you can right click on the buttons for options to invert the buttons.&lt;br /&gt;
: Triplet controllers also frequently have a Relative Checkbox in the upper right, which toggles whether the controls manipulate the variables absolutely or relative to some angle. When in relative mode, the labels on the buttons will change to emphasize this. Specifically, F = forward, B = backward, L = left, R = right, U = up, D = down. Triplet Controllers are found on the left panel of several tabs of STROOP. However, you can also create your own Triplet Controller by selecting 3 or 4 variables to represent the x,y,z and optional angle variables, right clicking, and choosing to open a Triplet Controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;: An advanced controller is in charge of manipulating one or more variables. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name(s) of the variable(s) being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Fix Address Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are using fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Value Textbox&#039;&#039;&#039;: This displays the current value(s) of the variable(s). The background color is red if the variable(s) have fixed addresses, blue if the variable(s) don&#039;t have fixed addresses, and purple if some variables do and some variables don&#039;t have fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Lock Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are locked.&lt;br /&gt;
** &#039;&#039;&#039;Subtraction Button&#039;&#039;&#039;: This is used to subtract a value from the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Addition/Subtraction Textbox&#039;&#039;&#039;: This is the value that&#039;s used by the Addition Button and Subtraction Button.&lt;br /&gt;
** &#039;&#039;&#039;Addition Button&#039;&#039;&#039;: This is used to add a value to the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get Button&#039;&#039;&#039;: This gets the value(s) of the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get/Set Textbox&#039;&#039;&#039;: This is the value used by the Get Button and Set Button.&lt;br /&gt;
** &#039;&#039;&#039;Set Button&#039;&#039;&#039;: This sets the value(s) of the variable(s).&lt;br /&gt;
: Additional notes:&lt;br /&gt;
:* In the case of setting multiple variables, you can set all of the variables to different values by separating the values in the textbox with commas. Alternatively, leave just one value in the textbox to set all variables to that one value. The same applies to adding and subtracting values.&lt;br /&gt;
:* The add and subtract buttons can be inverted by right clicking on them and choosing to invert.&lt;br /&gt;
:* You can click on the add/subtract button and hold the mouse down while holding control in order to continuously add to or subtract from the variables. Alternatively, right click on either button and choose to Start Continuous Add (or Subtract) and then later choose to Stop Continuous Add (or Subtract).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bit Controller&#039;&#039;&#039;: A Bit Controller is in charge of manipulating one variable. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name of the variable being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Decimal Value&#039;&#039;&#039;: This shows the decimal value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Hex Value&#039;&#039;&#039;: This shows the hex value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Binary Value&#039;&#039;&#039;: This shows the binary value of the variable.&lt;br /&gt;
** &#039;&#039;&#039;Value Table&#039;&#039;&#039;: This shows various representations of the bytes of the variable, including the decimal representation, hex representation, and binary representation. It also provides a set of checkboxes that can be used to toggle each bit of the variable.&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=File:STROOP_Controllers.png&amp;diff=7707</id>
		<title>File:STROOP Controllers.png</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=File:STROOP_Controllers.png&amp;diff=7707"/>
		<updated>2019-04-14T14:52:17Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: Pannenkoek2012 uploaded a new version of File:STROOP Controllers.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7662</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7662"/>
		<updated>2019-04-13T19:22:46Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Controllers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The 3 kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are 3 kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A Simple Controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons are inverted, i.e. swapping whether subtraction is on the left and addition is on the right or vice versa. Simple Controllers are found on the left panel of several tabs of STROOP.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;: A Triplet Controller is in charge of manipulating a triplet of variables, usually a set of (x,y,z) Euler coordinates or (theta,phi,radius) spherical coordinates. It consists of 2 sets of controls:&lt;br /&gt;
** &#039;&#039;&#039;Square Controls&#039;&#039;&#039;: On the left are the Square Controls, consisting of 8 buttons and a textbox arranged in square formation. For Euler coordinates, these controls manipulate the x and z coordinates. For spherical coordinates, these controls manipulate the theta and phi coordinates. In both cases, the buttons will add to or subtract from the corresponding variable(s) by the amount in the textbox. Note that you can right click on the buttons for more options so that you can customize the orientation of the buttons. Specifically, this allows you to rotate the buttons any one of eight ways, as well as invert the orientation (i.e. flip it).&lt;br /&gt;
** &#039;&#039;&#039;Line Controls&#039;&#039;&#039;: One the right are the Line Controls, consisting of 2 buttons and a textbox arranged in a vertical line formation. For Euler coordinates, these controls manipulate the y coordinate. For spherical coordinates, these controls manipulate the radius coordinate. In both cases, the buttons will add to or subtract from the corresponding variable by the amount in the textbox. Note that you can right click on the buttons for options to invert the buttons.&lt;br /&gt;
: Triplet controllers also frequently have a Relative Checkbox in the upper right, which toggles whether the controls manipulate the variables absolutely or relative to some angle. When in relative mode, the labels on the buttons will change to emphasize this. Specifically, F = forward, B = backward, L = left, R = right, U = up, D = down. Triplet Controllers are found on the left panel of several tabs of STROOP. However, you can also create your own Triplet Controller by selecting 3 or 4 variables to represent the x,y,z and optional angle variables, right clicking, and choosing to open a Triplet Controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;: An advanced controller is in charge of manipulating one or more variables. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name(s) of the variable(s) being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Fix Address Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are using fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Value Textbox&#039;&#039;&#039;: This displays the current value(s) of the variable(s). The background color is red if the variable(s) have fixed addresses, blue if the variable(s) don&#039;t have fixed addresses, and purple if some variables do and some variables don&#039;t have fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Lock Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are locked.&lt;br /&gt;
** &#039;&#039;&#039;Subtraction Button&#039;&#039;&#039;: This is used to subtract a value from the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Addition/Subtraction Textbox&#039;&#039;&#039;: This is the value that&#039;s used by the Addition Button and Subtraction Button.&lt;br /&gt;
** &#039;&#039;&#039;Addition Button&#039;&#039;&#039;: This is used to add a value to the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get Button&#039;&#039;&#039;: This gets the value(s) of the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get/Set Textbox&#039;&#039;&#039;: This is the value used by the Get Button and Set Button.&lt;br /&gt;
** &#039;&#039;&#039;Set Button&#039;&#039;&#039;: This sets the value(s) of the variable(s).&lt;br /&gt;
: Additional notes:&lt;br /&gt;
:* In the case of setting multiple variables, you can set all of the variables to different values by separating the values in the textbox with commas. Alternatively, leave just one value in the textbox to set all variables to that one value. The same applies to adding and subtracting values.&lt;br /&gt;
:* The add and subtract buttons can be inverted by right clicking on them and choosing to invert.&lt;br /&gt;
:* You can click on the add/subtract button and hold the mouse down while holding control in order to continuously add to or subtract from the variables. Alternatively, right click on either button and choose to Start Continuous Add (or Subtract) and then later choose to Stop Continuous Add (or Subtract).&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7661</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7661"/>
		<updated>2019-04-13T19:21:00Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Controllers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The 3 kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are 3 kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A Simple Controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons are inverted, i.e. swapping whether subtraction is on the left and addition is on the right or vice versa. Simple Controllers are found on the left panel of several tabs of STROOP.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;: A Triplet Controller is in charge of manipulating a triplet of variables, usually a set of (x,y,z) Euler coordinates or (theta,phi,radius) spherical coordinates. It consists of 2 sets of controls:&lt;br /&gt;
** &#039;&#039;&#039;Square Controls&#039;&#039;&#039;: On the left are the Square Controls, consisting of 8 buttons and a textbox arranged in square formation. For Euler coordinates, these controls manipulate the x and z coordinates. For spherical coordinates, these controls manipulate the theta and phi coordinates. In both cases, the buttons will add to or subtract from the corresponding variable(s) by the amount in the textbox. Note that you can right click on the buttons for more options so that you can customize the orientation of the buttons. Specifically, this allows you to rotate the buttons any one of eight ways, as well as invert the orientation (i.e. flip it).&lt;br /&gt;
** &#039;&#039;&#039;Line Controls&#039;&#039;&#039;: One the right are the Line Controls, consisting of 2 buttons and a textbox arranged in a vertical line formation. For Euler coordinates, these controls manipulate the y coordinate. For spherical coordinates, these controls manipulate the radius coordinate. In both cases, the buttons will add to or subtract from the corresponding variable by the amount in the textbox. Note that you can right click on the buttons for options to invert the buttons.&lt;br /&gt;
: Triplet controllers also frequently have a Relative Checkbox in the upper right, which toggles whether the controls manipulate the variables absolutely or relative to some angle. When in relative mode, the labels on the buttons will change to emphasize this. Specifically, F = forward, B = backward, L = left, R = right, U = up, D = down. Triplet Controllers are found on the left panel of several tabs of STROOP. However, you can also create your own Triplet Controller by selecting 3 or 4 variables to represent the x,y,z and optional angle variables, right clicking, and choosing to open a Triplet Controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;: An advanced controller is in charge of manipulating one or more variables. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name(s) of the variable(s) being manipulated. Note that this can be edited.&lt;br /&gt;
** &#039;&#039;&#039;Fix Address Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are using fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Value Textbox&#039;&#039;&#039;: This displays the current value(s) of the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Lock Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are locked.&lt;br /&gt;
** &#039;&#039;&#039;Subtraction Button&#039;&#039;&#039;: This is used to subtract a value from the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Addition/Subtraction Textbox&#039;&#039;&#039;: This is the value that&#039;s used by the Addition Button and Subtraction Button.&lt;br /&gt;
** &#039;&#039;&#039;Addition Button&#039;&#039;&#039;: This is used to add a value to the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get Button&#039;&#039;&#039;: This gets the value(s) of the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get/Set Textbox&#039;&#039;&#039;: This is the value used by the Get Button and Set Button.&lt;br /&gt;
** &#039;&#039;&#039;Set Button&#039;&#039;&#039;: This sets the value(s) of the variable(s).&lt;br /&gt;
: Additional notes:&lt;br /&gt;
:* In the case of setting multiple variables, you can set all of the variables to different values by separating the values in the textbox with commas. Alternatively, leave just one value in the textbox to set all variables to that one value. The same applies to adding and subtracting variables.&lt;br /&gt;
:* The add and subtract buttons can be inverted by right clicking on them and choosing to invert.&lt;br /&gt;
:* You can click on the add/subtract button and hold the mouse down while holding control in order to continuously add to or subtract from the variables. Alternatively, right click on either button and choose to Start Continuous Add (or Subtract) and then later choose to Stop Continuous Add (or Subtract).&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7660</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7660"/>
		<updated>2019-04-13T19:11:04Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Controllers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The 3 kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are 3 kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A Simple Controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons are inverted, i.e. swapping whether subtraction is on the left and addition is on the right or vice versa. Simple Controllers are found on the left panel of several tabs of STROOP.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;: A Triplet Controller is in charge of manipulating a triplet of variables, usually a set of (x,y,z) Euler coordinates or (theta,phi,radius) spherical coordinates. It consists of 2 sets of controls:&lt;br /&gt;
** &#039;&#039;&#039;Square Controls&#039;&#039;&#039;: On the left are the Square Controls, consisting of 8 buttons and a textbox arranged in square formation. For Euler coordinates, these controls manipulate the x and z coordinates. For spherical coordinates, these controls manipulate the theta and phi coordinates. In both cases, the buttons will add to or subtract from the corresponding variable(s) by the amount in the textbox. Note that you can right click on the buttons for more options so that you can customize the orientation of the buttons. Specifically, this allows you to rotate the buttons any one of eight ways, as well as invert the orientation (i.e. flip it).&lt;br /&gt;
** &#039;&#039;&#039;Line Controls&#039;&#039;&#039;: One the right are the Line Controls, consisting of 2 buttons and a textbox arranged in a vertical line formation. For Euler coordinates, these controls manipulate the y coordinate. For spherical coordinates, these controls manipulate the radius coordinate. In both cases, the buttons will add to or subtract from the corresponding variable by the amount in the textbox. Note that you can right click on the buttons for options to invert the buttons.&lt;br /&gt;
: Triplet controllers also frequently have a Relative Checkbox in the upper right, which toggles whether the controls manipulate the variables absolutely or relative to some angle. When in relative mode, the labels on the buttons will change to emphasize this. Specifically, F = forward, B = backward, L = left, R = right, U = up, D = down. Triplet Controllers are found on the left panel of several tabs of STROOP. However, you can also create your own Triplet Controller by selecting 3 or 4 variables to represent the x,y,z and optional angle variables, right clicking, and choosing to open a Triplet Controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;: An advanced controller is in charge of manipulating one or more variables. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;: This shows the name(s) of the variable(s) being manipulated.&lt;br /&gt;
** &#039;&#039;&#039;Fix Address Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are using fixed addresses.&lt;br /&gt;
** &#039;&#039;&#039;Value Textbox&#039;&#039;&#039;: This displays the current value(s) of the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Lock Checkbox&#039;&#039;&#039;: This is used to toggle whether the variable(s) are locked.&lt;br /&gt;
** &#039;&#039;&#039;Subtraction Button&#039;&#039;&#039;: This is used to subtract a value from the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Addition/Subtraction Textbox&#039;&#039;&#039;: This is the value that&#039;s used by the Addition Button and Subtraction Button.&lt;br /&gt;
** &#039;&#039;&#039;Addition Button&#039;&#039;&#039;: This is used to add a value to the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get Button&#039;&#039;&#039;: This gets the value(s) of the variable(s).&lt;br /&gt;
** &#039;&#039;&#039;Get/Set Textbox&#039;&#039;&#039;: This is the value used by the Get Button and Set Button.&lt;br /&gt;
** &#039;&#039;&#039;Set Button&#039;&#039;&#039;: This sets the value(s) of the variable(s).&lt;br /&gt;
: In the case of&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7659</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7659"/>
		<updated>2019-04-13T19:05:53Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Controllers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The 3 kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are 3 kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A Simple Controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons are inverted, i.e. swapping whether subtraction is on the left and addition is on the right or vice versa. Simple Controllers are found on the left panel of several tabs of STROOP.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;: A Triplet Controller is in charge of manipulating a triplet of variables, usually a set of (x,y,z) Euler coordinates or (theta,phi,radius) spherical coordinates. It consists of 2 sets of controls:&lt;br /&gt;
** &#039;&#039;&#039;Square Controls&#039;&#039;&#039;: On the left are the Square Controls, consisting of 8 buttons and a textbox arranged in square formation. For Euler coordinates, these controls manipulate the x and z coordinates. For spherical coordinates, these controls manipulate the theta and phi coordinates. In both cases, the buttons will add to or subtract from the corresponding variable(s) by the amount in the textbox. Note that you can right click on the buttons for more options so that you can customize the orientation of the buttons. Specifically, this allows you to rotate the buttons any one of eight ways, as well as invert the orientation (i.e. flip it).&lt;br /&gt;
** &#039;&#039;&#039;Line Controls&#039;&#039;&#039;: One the right are the Line Controls, consisting of 2 buttons and a textbox arranged in a vertical line formation. For Euler coordinates, these controls manipulate the y coordinate. For spherical coordinates, these controls manipulate the radius coordinate. In both cases, the buttons will add to or subtract from the corresponding variable by the amount in the textbox. Note that you can right click on the buttons for options to invert the buttons.&lt;br /&gt;
: Triplet controllers also frequently have a Relative Checkbox in the upper right, which toggles whether the controls manipulate the variables absolutely or relative to some angle. When in relative mode, the labels on the buttons will change to emphasize this. Specifically, F = forward, B = backward, L = left, R = right, U = up, D = down. Triplet Controllers are found on the left panel of several tabs of STROOP. However, you can also create your own Triplet Controller by selecting 3 or 4 variables to represent the x,y,z and optional angle variables, right clicking, and choosing to open a Triplet Controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;: An advanced controller is in charge of manipulating one or more variables. It consists of the following controls:&lt;br /&gt;
** &#039;&#039;&#039;Name Textbox&#039;&#039;&#039;:&lt;br /&gt;
** &#039;&#039;&#039;Fix Address Checkbox&#039;&#039;&#039;:&lt;br /&gt;
** &#039;&#039;&#039;Value Textbox&#039;&#039;&#039;:&lt;br /&gt;
** &#039;&#039;&#039;Lock Checkbox&#039;&#039;&#039;:&lt;br /&gt;
** &#039;&#039;&#039;Subtraction Button&#039;&#039;&#039;:&lt;br /&gt;
** &#039;&#039;&#039;Addition/Subtraction Textbox&#039;&#039;&#039;:&lt;br /&gt;
** &#039;&#039;&#039;Addition Button&#039;&#039;&#039;:&lt;br /&gt;
** &#039;&#039;&#039;Get Button&#039;&#039;&#039;:&lt;br /&gt;
** &#039;&#039;&#039;Get/Set Textbox&#039;&#039;&#039;:&lt;br /&gt;
** &#039;&#039;&#039;Set Button&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7658</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7658"/>
		<updated>2019-04-13T19:01:00Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Controllers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The 3 kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are 3 kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A Simple Controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons are inverted, i.e. swapping whether subtraction is on the left and addition is on the right or vice versa. Simple Controllers are found on the left panel of several tabs of STROOP.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;: A Triplet Controller is in charge of manipulating a triplet of variables, usually a set of (x,y,z) Euler coordinates or (theta,phi,radius) spherical coordinates. It consists of 2 sets of controls:&lt;br /&gt;
** &#039;&#039;&#039;Square Controls&#039;&#039;&#039;: On the left are the Square Controls, consisting of 8 buttons and a textbox arranged in square formation. For Euler coordinates, these controls manipulate the x and z coordinates. For spherical coordinates, these controls manipulate the theta and phi coordinates. In both cases, the buttons will add to or subtract from the corresponding variable(s) by the amount in the textbox. Note that you can right click on the buttons for more options so that you can customize the orientation of the buttons. Specifically, this allows you to rotate the buttons any one of eight ways, as well as invert the orientation (i.e. flip it).&lt;br /&gt;
** &#039;&#039;&#039;Line Controls&#039;&#039;&#039;: One the right are the Line Controls, consisting of 2 buttons and a textbox arranged in a vertical line formation. For Euler coordinates, these controls manipulate the y coordinate. For spherical coordinates, these controls manipulate the radius coordinate. In both cases, the buttons will add to or subtract from the corresponding variable by the amount in the textbox. Note that you can right click on the buttons for options to invert the buttons.&lt;br /&gt;
: Triplet controllers also frequently have a Relative Checkbox in the upper right, which toggles whether the controls manipulate the variables absolutely or relative to some angle. When in relative mode, the labels on the buttons will change to emphasize this. Specifically, F = forward, B = backward, L = left, R = right, U = up, D = down. Triplet Controllers are found on the left panel of several tabs of STROOP. However, you can also create your own Triplet Controller by selecting 3 or 4 variables to represent the x,y,z and optional angle variables, right clicking, and choosing to open a Triplet Controller.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;: An advanced controller&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7657</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7657"/>
		<updated>2019-04-13T18:50:01Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Controllers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The 3 kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are 3 kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A Simple Controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons are inverted, i.e. swapping whether subtraction is on the left and addition is on the right or vice versa.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;: A Triplet Controller is in charge of manipulating a triplet of variables, usually a set of (x,y,z) Euler coordinates or (theta,phi,radius) spherical coordinates. It consists of 2 sets of controls:&lt;br /&gt;
** &#039;&#039;&#039;Square Controls&#039;&#039;&#039;: On the left are the Square Controls, consisting of 8 buttons and a textbox arranged in square formation. For Euler coordinates, these controls manipulate the x and z coordinates. For spherical coordinates, these controls manipulate the theta and phi coordinates. In both cases, the buttons will add to or subtract from the corresponding variable(s) by the amount in the textbox. Note that you can right click on the buttons for more options so that you can customize the orientation of the buttons. Specifically, this allows you to rotate the buttons any one of eight ways, as well as invert the orientation (i.e. flip it).&lt;br /&gt;
** &#039;&#039;&#039;Line Controls&#039;&#039;&#039;: One the right are the Line Controls, consisting of 2 buttons and a textbox arranged in a vertical line formation. For Euler coordinates, these controls manipulate the y coordinate. For spherical coordinates, these controls manipulate the radius coordinate. In both cases, the buttons will add to or subtract from the corresponding variable by the amount in the textbox. Note that you can right click on the buttons for options to invert the buttons.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;: An advanced controller&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7655</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7655"/>
		<updated>2019-04-13T18:29:18Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Controllers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The 3 kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are 3 kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A Simple Controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons have the normal orientation (i.e. subtraction on the left, addition on the right) or the inverted orientation (addition on the left, subtraction on the right).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;: A Triplet Controller is in charge of manipulating a triplet of variables, usually a set of (x,y,z) Euler coordinates or (theta,phi,radius) spherical coordinates. It consists of 2 sets of controls:&lt;br /&gt;
** &#039;&#039;&#039;Square Controls&#039;&#039;&#039;: On the left are the Square Controls, consisting of 8 buttons and a textbox arranged in square formation. For Euler coordinates, these controls manipulate the x and z coordinates. For spherical coordinates, these controls manipulate the theta and phi coordinates. In both cases, the buttons will add to or subtract from the corresponding variable(s) by the amount in the textbox. Note that you can right click on the buttons for more options so that you can customize the orientation of the buttons. Specifically, this allows you to rotate the buttons any one of eight ways, as well as reverse the orientation (i.e. flip it).&lt;br /&gt;
** &#039;&#039;&#039;Line Controls&#039;&#039;&#039;: One the right are the Line Controls, consisting of 2 buttons and a textbox arranged in a vertical line formation. For Euler coordinates, these controls manipulate the y coordinate. For spherical coordinates, these controls manipulate the radius coordinate. In both cases, the buttons will add to or subtract from the corresponding variable by the amount in the textbox. Note that you can right click on the buttons for options to invert the buttons.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;: An advanced controller&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7650</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7650"/>
		<updated>2019-04-13T17:55:58Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Controllers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The 3 kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are 3 kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A Simple Controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons have the normal orientation (i.e. subtraction on the left, addition on the right) or the inverted orientation (addition on the left, subtraction on the right).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;: A Triplet Controller is in charge of manipulating a triplet of variables, usually a set of (x,y,z) Euler coordinates or (theta,phi,radius) spherical coordinates. It consists of 2 sets of controls:&lt;br /&gt;
** &#039;&#039;&#039;Square Controls&#039;&#039;&#039;: On the left are the Square Controls, consisting of 8 buttons and a textbox arranged in square formation. For Euler coordinates, these controls manipulate the x and z coordinates. For spherical coordinates, these controls manipulate the theta and phi coordinates. In both cases, the buttons will add to or subtract from the corresponding variable(s) by the amount in the textbox. Note that you can right click on the buttons for more options so that you can customize the orientation of the buttons. Specifically, this allows you to rotate the buttons any one of eight ways, as well as reverse the orientation (i.e. flip it).&lt;br /&gt;
** &#039;&#039;&#039;Line Controls&#039;&#039;&#039;: One the right are the Line Controls, consisting of 2 buttons and a textbox arranged in a vertical line formation. For Euler coordinates, these controls manipulate the y coordinate. For spherical coordinates, these controls manipulate the radius coordinate. In both cases, the buttons will add to or subtract from the corresponding variable by the amount in the textbox. Note that you can right click on the buttons for options to invert the buttons.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7649</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7649"/>
		<updated>2019-04-13T17:53:12Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Controllers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The 3 kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are 3 kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A Simple Controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons have the normal orientation (i.e. subtraction on the left, addition on the right) or the inverted orientation (addition on the left, subtraction on the right).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;: A Triplet Controller is in charge of manipulating a triplet of variables, usually a set of (x,y,z) Euler coordinates or (theta,phi,radius) spherical coordinates. It consists of 2 sets of controls:&lt;br /&gt;
** &#039;&#039;&#039;Square Controls&#039;&#039;&#039;: On the left are the Square Controls, consisting of 8 buttons and a textbox arranged in square formation. For Euler coordinates, these controls manipulate the x and z coordinates. For spherical coordinates, these controls manipulate the theta and phi coordinates. In both cases, the buttons will add/subtract from the corresponding variable(s) by the amount in the textbox. Note that you can right click on the buttons for more options so that you can customize the orientation of the buttons. Specifically, this allows you to rotate the buttons any one of eight ways, as well as reverse the orientation (i.e. flip it).&lt;br /&gt;
** &#039;&#039;&#039;Line Controls&#039;&#039;&#039;: One the right are the Line Controls, consisting of 2 buttons and a textbox arranged in a vertical line formation. For Euler coordinates, these controls manipulate the y coordinate. For spherical coordinates, these controls manipulate the radius coordinate. In both cases, the buttons will add/subtract from the corresponding variable by the amount in the textbox. Note that you can right click on the buttons for options to invert the buttons.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7648</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7648"/>
		<updated>2019-04-13T17:48:38Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Controllers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The 3 kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are 3 kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A Simple Controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons have the normal orientation (i.e. subtraction on the left, addition on the right) or the inverted orientation (addition on the left, subtraction on the right).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;: A Triplet Controller is in charge of manipulating a triplet of variables, usually a set of (x,y,z) Euler coordinates or (theta,phi,radius) spherical coordinates. It consists of 2 sets of controls:&lt;br /&gt;
** &#039;&#039;&#039;Square Controls&#039;&#039;&#039;: On the left are the Square Controls, consisting of 8 buttons and a textbox arranged in square formation. For Euler coordinates, these controls manipulate the x and z coordinates. For spherical coordinates, these controls manipulate the theta and phi coordinates. In both cases, the buttons will add/subtract from the corresponding variable(s) by the amount in the textbox.&lt;br /&gt;
** &#039;&#039;&#039;Line Controls&#039;&#039;&#039;: One the right are the Line Controls, consisting of 2 buttons and a textbox arranged in a vertical line formation. For Euler coordinates, these controls manipulate the y coordinate. For spherical coordinates, these controls manipulate the radius coordinate. In both cases, the buttons will add/subtract from the corresponding variable by the amount in the textbox.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7644</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7644"/>
		<updated>2019-04-13T17:36:51Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Controllers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The 3 kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are 3 kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A Simple Controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons have the normal orientation (i.e. subtraction on the left, addition on the right) or the inverted orientation (addition on the left, subtraction on the right).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;: A Triplet Controller is in charge of manipulating a triplet of variables, usually a set of (x,y,z) Euler coordinates or (theta,phi,radius) spherical coordinates.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7643</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7643"/>
		<updated>2019-04-13T17:31:15Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Controllers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The 3 kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are 3 kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A simple controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons have the normal orientation (i.e. subtraction on the left, addition on the right) or the inverted orientation (addition on the left, subtraction on the right).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7642</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7642"/>
		<updated>2019-04-13T17:30:31Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Controllers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The 3 kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are 3 kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: A simple controller is in charge of manipulating one variable. It consists of 2 buttons and a textbox. The buttons are used for subtracting from and adding to the variable using the value that&#039;s in the textbox. Right clicking on one of the buttons shows the option to toggle whether the buttons have the normal orientation (i.e. subtraction button on the left, addition button on the right) or the inverted orientation (addition on the left, subtraction on the right).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7641</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7641"/>
		<updated>2019-04-13T17:26:45Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
[[File:STROOP Controllers.png|350px|thumb|The 3 kinds of controllers]] &lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are 3 kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=File:STROOP_Controllers.png&amp;diff=7640</id>
		<title>File:STROOP Controllers.png</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=File:STROOP_Controllers.png&amp;diff=7640"/>
		<updated>2019-04-13T17:25:50Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7638</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7638"/>
		<updated>2019-04-13T17:25:21Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Controllers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
Controllers are a set of controls used for manipulating one or more variables. There are 3 kinds of controllers:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Simple Controller&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Triplet Controller&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Advanced Controller&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7625</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7625"/>
		<updated>2019-04-13T15:59:44Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Object Slots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: Selects the object slot in the Object Tab, and switches to the Object Tab.&lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: Selects the object slot in the Memory Tab, and switches to the Memory Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: Sends Mario to the object, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: Sends the object to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: Sends Mario to the object&#039;s home, offset by the &amp;quot;Go to offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: Sends the object&#039;s home to Mario, offset by the &amp;quot;Retrieve offset&amp;quot; in the Options Tab.&lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: Releases the object by settings its Release Status. This is identical to releasing a clone of an object that isn&#039;t meant to be released.&lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: Undoes the releasing of an object.&lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: Interacts with an object by setting its Interaction Status to 0xFFFFFFFF. This can be useful if you don&#039;t want to interact with a clone, e.g. making a fire clone inert.&lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: Undoes the interacting of an object by setting its Interaction Status to 0x00000000.&lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: Clones the object into Mario&#039;s hands.&lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: Undoes the cloning of the object by clearing what&#039;s in Mario&#039;s hands. This doesn&#039;t actually release the object.&lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: Sets the object to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: Revives an unloaded object into a loaded state.&lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: Has Mario ride on the object. Specifically, sets Mario&#039;s ridden object to that object and puts Mario into a riding state.&lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: Undoes the riding of an object.&lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: Opens up the Ukikipedia page for an object.&lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: Copies the object&#039;s address to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: Copies the object&#039;s position to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s position.&lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: Copies the object&#039;s graphics value to the clipboard.&lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: Pastes the clipboard data onto an object&#039;s graphics value.&lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: Copies the object&#039;s bytes to a custom clipboard in STROOP.&lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;: Pastes STROOP&#039;s custom clipboard data onto the object. Note that this doesn&#039;t overwrite the object&#039;s next/previous memory/processed object slots references, since that would corrupt the linked list structure.&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7624</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7624"/>
		<updated>2019-04-13T15:34:02Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Object Slots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
You can right click on an object slot for even more options. Note that the option will by default only affect the object slot that was right clicked on. If instead you want to have the option affect all slots that are selected, then click the option while holding control. The options are as follows:&lt;br /&gt;
* &#039;&#039;&#039;Select in Object Tab&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Select in Memory Tab&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Go to&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Retrieve&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Go to Home&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Retrieve Home&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Release&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;UnRelease&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Interact&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;UnInteract&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Clone&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;UnClone&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Unload&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Revive&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Ride&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;UnRide&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Ukikipedia&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Copy Address&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Copy Position&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Paste Position&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Copy Graphics&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Paste Graphics&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Copy Object&#039;&#039;&#039;: &lt;br /&gt;
* &#039;&#039;&#039;Paste Object&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7604</id>
		<title>STROOP</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=STROOP&amp;diff=7604"/>
		<updated>2019-04-13T06:28:42Z</updated>

		<summary type="html">&lt;p&gt;Pannenkoek2012: /* Object Slots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[File:STROOP.jpg|350px|thumb|STROOP on [https://en.wikipedia.org/wiki/Windows_10 Windows 10]]] &lt;br /&gt;
[[File:ObjectSlotHack.png|350px|thumb|Tyler&#039;s ROM hack that displayed the object slots in text form]] &lt;br /&gt;
[[File:Blueprint.png|350px|thumb|A blueprint of what Pannenkoek2012 suggested the program should look like]] &lt;br /&gt;
[[File:SM64_diagnostic.png|350px|thumb|The SM64 Diagnostic]] &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;uperMario64 &#039;&#039;&#039;T&#039;&#039;&#039;echnical &#039;&#039;&#039;R&#039;&#039;&#039;untime &#039;&#039;&#039;O&#039;&#039;&#039;bserver and &#039;&#039;&#039;O&#039;&#039;&#039;bject &#039;&#039;&#039;P&#039;&#039;&#039;rocessor, or &#039;&#039;&#039;STROOP&#039;&#039;&#039; 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].&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
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&#039;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&#039;t be edited, and the checkbox variables used a confusing system.&lt;br /&gt;
&lt;br /&gt;
Some time later, Dane Bouchie created a new program called STROOP, which was based on the SM64 Diagnostic, but with many more features and improved functionality. Later, Pannenkoek2012 also began coding for STROOP, adding even more features and functionality. As of today, STROOP has object slots, object variables, Mario variables, HUD variables, camera variables, triangle variables, water variables, an input display, a file display, a map that can display objects in real time, an M64 editor, and savable options so that the user can customize their experience.&lt;br /&gt;
&lt;br /&gt;
== Loading Screen ==&lt;br /&gt;
[[File:STROOP loading screen.gif|350px|thumb|STROOP Loading Screen]]&lt;br /&gt;
When first opening STROOP, you&#039;ll be greeted with a loading screen. This displays what is currently being initialized, as well as a random helpful hint.&lt;br /&gt;
&lt;br /&gt;
== Connection Screen ==&lt;br /&gt;
&lt;br /&gt;
After STROOP finishes loading, you&#039;ll encounter a screen where you can choose what process or savestate to connect to. There are various buttons to use:&lt;br /&gt;
* &#039;&#039;&#039;Refresh&#039;&#039;&#039;: Refreshes the list of processes to choose from.&lt;br /&gt;
* &#039;&#039;&#039;Connect&#039;&#039;&#039;: Connects STROOP to the currently selected process.&lt;br /&gt;
* &#039;&#039;&#039;Bypass&#039;&#039;&#039;: Bypasses the start screen. Note that most functionality won&#039;t work if you press this, as most functionality relies on having a data stream to interact with. But this could be useful if you only want to use the M64 editor, for example.&lt;br /&gt;
* &#039;&#039;&#039;Refresh &amp;amp; Connect&#039;&#039;&#039;: Refreshes the list of processes to choose from, and then connects STROOP to the currently selected process. This can save a button press in the case that you need to press both Refresh and Connect.&lt;br /&gt;
* &#039;&#039;&#039;Open Savestate&#039;&#039;&#039;: Connects STROOP to a savestate, chosen from the File Manager. This can be useful if you want to modify values in a savestate, such as global timer or RNG. If you&#039;ve edited a savestate and want to save it, then right click on the Disconnect button on the top left of STROOP, and you&#039;ll see an option to save the savestate.&lt;br /&gt;
&lt;br /&gt;
== Top-Level Controls ==&lt;br /&gt;
On the top of STROOP are several controls that may be of use. These are:&lt;br /&gt;
* &#039;&#039;&#039;Disconnect Button&#039;&#039;&#039;: Disconnects from the current process or savestate. Right click on this for the option to save a savestate after it&#039;s been modified.&lt;br /&gt;
* &#039;&#039;&#039;FPS Counter&#039;&#039;&#039;: Displays the number of frames per second that STROOP is running at. By default, STROOP aims for 30 FPS. However, this can be changed in the Options tab.&lt;br /&gt;
* &#039;&#039;&#039;Connected To&#039;&#039;&#039;: Displays the process that STROOP is currently connected to.&lt;br /&gt;
* &#039;&#039;&#039;Left/Right Arrow Buttons&#039;&#039;&#039;: These can be used to reorder tabs. Simply click on one of the arrow buttons and the currently selected tab will move one spot over in that direction. Right click on these buttons for an option to restore the tabs to the recommended tab order. Separately, you can click on the arrow buttons while holding control, and this will move the currently selected object slots over one spot in that direction. Furthermore, you can click on the arrow buttons while holding a number n, and this will move the currently selected object slots over n spots in that direction.&lt;br /&gt;
* &#039;&#039;&#039;Add Tab Button&#039;&#039;&#039;: Click on this button to see a list of tabs that have been hidden. Click on one of these tabs to restore that tab. Alternatively, click on &amp;quot;Restore All Tabs&amp;quot; to restore all of the tabs.&lt;br /&gt;
* &#039;&#039;&#039;ROM Version&#039;&#039;&#039;: This displays the ROM version that STROOP is currently operating under. By default, it tries to auto-detect what ROM version is being used. However, if you want to use a specific ROM version instead of the auto-detected one, then choose one of the ROM version options without the &amp;quot;AUTO&amp;quot; prefix.&lt;br /&gt;
* &#039;&#039;&#039;ReadWrite/ReadOnly Mode&#039;&#039;&#039;: This displays whether STROOP is is ReadWrite mode or ReadOnly mode. By default, it will be in ReadWrite mode, allowing the user to modify variables. In ReadOnly mode, modifying variables won&#039;t work.&lt;br /&gt;
* &#039;&#039;&#039;Panel Hide/Show Buttons&#039;&#039;&#039;: These 6 buttons allow you to adjust which panels are hidden/shown in any tab of STROOP. In order from left to right, these are: Left Only, Left + Right, Right Only, Bottom Only, Bottom + Top, Top Only. By default, these buttons will only affect the outermost panels. However, for situations where there are nested panels (e.g. the Memory Tab), you can control which set of panels is being targeted by holding down a number key. Specifically, holding down the number n will target the nth set of panels, where panels are indexed from outermost to innermost. Thus, holding down the number 1 is equivalent to not holding down any number, since it automatically targets the outermost pair of panels. Holding down 2 or higher will affect other panels, assuming they&#039;re on screen.&lt;br /&gt;
* &#039;&#039;&#039;Cog&#039;&#039;&#039;: The cog can be used to quickly and easily toggle savable options, to reset saved options, or to go directly to the Options tab. For more information about the savable options, see the Options Tab section.&lt;br /&gt;
* &#039;&#039;&#039;Version Number&#039;&#039;&#039;: This displays the current version number of STROOP. Right clicking on this provides debugging/developer options, most of which aren&#039;t intended for the casual user. Nevertheless, some useful options include:&lt;br /&gt;
** &#039;&#039;&#039;Enable TASer Settings&#039;&#039;&#039;: Switches to the TAS tab, hides the left panel, filters variables to show only the TAS variables, and enables the STROOP ROM hack. This setting was created for Plush&#039;s convenience.&lt;br /&gt;
** &#039;&#039;&#039;Show MHS Vars&#039;&#039;&#039;: Opens a Pop Out with variables commonly found in MHS. This is a convenience for users that are used to using MHS.&lt;br /&gt;
** &#039;&#039;&#039;Download Latest STROOP Release&#039;&#039;&#039;: Downloads the latest STROOP release. This downloads as a separate file, instead of replacing the currently-being-used STROOP file.&lt;br /&gt;
** &#039;&#039;&#039;Show All Helpful Hints&#039;&#039;&#039;: Shows a list of all helpful hints from the loading screen.&lt;br /&gt;
** &#039;&#039;&#039;Show Skribblio Words&#039;&#039;&#039;: Shows a list of all Skribbl.io words in a randomized order.&lt;br /&gt;
&lt;br /&gt;
== Tabs ==&lt;br /&gt;
&lt;br /&gt;
STROOP has several tabs, each of which manages one specific domain. For example, there&#039;s a Mario tab, Triangles tab, M64 tab, Map tab, etc. In fact, there are so many tabs that it&#039;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&#039;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&#039;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.&lt;br /&gt;
&lt;br /&gt;
== Object Slot Panel ==&lt;br /&gt;
&lt;br /&gt;
The lower half of STROOP is the Object Slot Panel. This shows all 240 object slots in the game. There are various controls to use at the top of the panel:&lt;br /&gt;
* &#039;&#039;&#039;Lock Labels Checkbox&#039;&#039;&#039;: This locks the labels on the slots so that they&#039;ll no longer change. The labels will also turn blue to indicate that they are no longer changing. This can be useful if you want to see how the object slots change from one point in time to another, as you can know what positions the slots used to be in.&lt;br /&gt;
* &#039;&#039;&#039;Slot Size Slider&#039;&#039;&#039;: This controls the size of the object slots.&lt;br /&gt;
* &#039;&#039;&#039;Label Method&#039;&#039;&#039;: This controls what label method is used to determine the label for the object slots.&lt;br /&gt;
** &#039;&#039;&#039;Recommended&#039;&#039;&#039;: This uses the recommended label method for the current Sort Method. Specifically, it will use SlotPosVs for ProcessingOrder, SlotIndex for MemoryOrder, and SlotPosVs for DistanceToMario.&lt;br /&gt;
** &#039;&#039;&#039;SlotPosVs&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will use their processing index prefixed with &amp;quot;VS&amp;quot;.&lt;br /&gt;
** &#039;&#039;&#039;SlotPos&#039;&#039;&#039;: Loaded object slots will use their processing index, and unloaded object slots will continue the indexing from where the loaded slots left off.&lt;br /&gt;
** &#039;&#039;&#039;SlotIndex&#039;&#039;&#039;: Object slots will use their memory index.&lt;br /&gt;
* &#039;&#039;&#039;Sort Method&#039;&#039;&#039;: This controls how the object slots are sorted.&lt;br /&gt;
** &#039;&#039;&#039;ProcessingOrder&#039;&#039;&#039;: The object slots are sorted by their processing order. In other words, the loaded object slots are in the order by which they are processed (i.e. updated), and the unloaded object slots are in the order by which they would take on more objects.&lt;br /&gt;
** &#039;&#039;&#039;MemoryOrder&#039;&#039;&#039;: The object slots are sorted by their memory order. In other words, they are sorted by the memory addresses of the object structs that each object slot represents.&lt;br /&gt;
** &#039;&#039;&#039;DistanceToMario&#039;&#039;&#039;: The object slots are sorted by their distance to Mario, from closest to farthest. Note that the loaded object slots are presented first, then followed by the unloaded object slots.&lt;br /&gt;
&lt;br /&gt;
You can also right click on the Object Slot Panel for the option to select the object slot corresponding to the value that you&#039;ve copied (i.e. what&#039;s on the clipboard).&lt;br /&gt;
&lt;br /&gt;
== Object Slots ==&lt;br /&gt;
The object slots are found in the Object Slot Panel. An object slot has 4 parts to it: an image, a label, a background color, and zero or more overlays. &lt;br /&gt;
* &#039;&#039;&#039;Image&#039;&#039;&#039;: The image shows what object is represented by the object slot. The image is transparent when the object is unloaded or set to be unloaded.&lt;br /&gt;
* &#039;&#039;&#039;Label&#039;&#039;&#039;: The label represents the index of the slot by some indexing system (see Label Method under Object Slot Panel).&lt;br /&gt;
* &#039;&#039;&#039;Background Color&#039;&#039;&#039;: The background color represents what Process Group the object belongs to.&lt;br /&gt;
** Process Group 0x0B (Spawner) is Pink&lt;br /&gt;
** Process Group 0x09 (Surface) is Red&lt;br /&gt;
** Process Group 0x0A (Usable) is Red-Orange&lt;br /&gt;
** Process Group 0x00 (Player) is Orange&lt;br /&gt;
** Process Group 0x05 (Pushable) is Yellow&lt;br /&gt;
** Process Group 0x04 (Actor) is Green&lt;br /&gt;
** Process Group 0x02 (Respawning) is Light Blue&lt;br /&gt;
** Process Group 0x06 (Level) is Dark Blue&lt;br /&gt;
** Process Group 0x08 (Default) is Purple&lt;br /&gt;
** Process Group 0x0C (Unimportant) is Brown&lt;br /&gt;
** Vacant Group is Grey&lt;br /&gt;
[[File:Object Slot Overlays.png|350px|thumb|The object slot overlays]]&lt;br /&gt;
* &#039;&#039;&#039;Overlays&#039;&#039;&#039;: The overlays are images overlaid onto certain object slots to provide additional information. The object slots are as follows:&lt;br /&gt;
** &#039;&#039;&#039;Selected&#039;&#039;&#039;: The object(s) selected in the Object Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map&#039;&#039;&#039;: The object(s) that are shown on the map in the Map Tab and Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: The object(s) whose home(s) are shown on the map in the Map2 Tab.&lt;br /&gt;
** &#039;&#039;&#039;Model&#039;&#039;&#039;: The object that&#039;s shown in the Model Tab.&lt;br /&gt;
** &#039;&#039;&#039;Marked&#039;&#039;&#039;: The object(s) that are marked. Click on an object slot while holding Alt to mark it.&lt;br /&gt;
** &#039;&#039;&#039;Closest&#039;&#039;&#039;: The loaded object that&#039;s closest to Mario.&lt;br /&gt;
** &#039;&#039;&#039;Held&#039;&#039;&#039;: The object that Mario&#039;s holding.&lt;br /&gt;
** &#039;&#039;&#039;Stood On&#039;&#039;&#039;: The object that Mario&#039;s standing on.&lt;br /&gt;
** &#039;&#039;&#039;Interaction&#039;&#039;&#039;: The object that Mario&#039;s interacting with.&lt;br /&gt;
** &#039;&#039;&#039;Used&#039;&#039;&#039;: The object that Mario&#039;s using.&lt;br /&gt;
** &#039;&#039;&#039;Ridden&#039;&#039;&#039;: The object that Mario&#039;s riding on.&lt;br /&gt;
** &#039;&#039;&#039;Camera&#039;&#039;&#039;: The secondary object that the camera is set to focus on.&lt;br /&gt;
** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: The object that is being focused on using the Camera Hack.&lt;br /&gt;
** &#039;&#039;&#039;Floor&#039;&#039;&#039;: The object that Mario&#039;s floor triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Wall&#039;&#039;&#039;: The object that Mario&#039;s wall triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Ceiling&#039;&#039;&#039;: The object that Mario&#039;s ceiling triangle belongs to.&lt;br /&gt;
** &#039;&#039;&#039;Parent&#039;&#039;&#039;: The parent of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Parent Unused&#039;&#039;&#039;: The currently hovered object when the currently hovered object&#039;s parent is the unused slot.&lt;br /&gt;
** &#039;&#039;&#039;Parent None&#039;&#039;&#039;: The currently hovered object when the currently hovered object has no parent.&lt;br /&gt;
** &#039;&#039;&#039;Child&#039;&#039;&#039;: A child of the currently hovered object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 1&#039;&#039;&#039;: The 1st collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 2&#039;&#039;&#039;: The 2nd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 3&#039;&#039;&#039;: The 3rd collision object of the Mario object.&lt;br /&gt;
** &#039;&#039;&#039;Collision 4&#039;&#039;&#039;: The 4th collision object of the Mario object.&lt;br /&gt;
* Some additional notes on the overlays:&lt;br /&gt;
** Which overlays are displayed can be changed in the Options tab. By default, all overlays are displayed except for Parent and Child ones, as these are the only ones dependent on the currently hovered object. Nevertheless, there&#039;s a shortcut to quickly and temporarily see an object&#039;s parent/child, which is to hold down P while hovering over an object slot.&lt;br /&gt;
** By default, the collision objects are in reference to the Mario object. However, if you want to see the collision objects for a different object, then simply hold down C while hovering over that object&#039;s slot.&lt;br /&gt;
** The Selected, Map, Map Home, Marked, Model, and Camera Hack overlays represent overlays that the user can modify themselves by clicking on the object slots when under certain circumstances. For some of these, multi-selection is available, meaning that multiple slots can be selected at the same time. In these cases, the shortcut of holding shift can be used to select the range of object slots between the previously selected object slot and the currently selected object slot. When multi-selection is available, there&#039;s also the concept of toggle-ability, explained as follows. In some cases (e.g. Selected), clicking on an object slot will select that object slot and unselect all other object slots. In these cases, holding control will make it so that clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged. In other cases (e.g. Map, Marked), the situation is reversed. That is, clicking on an object slot will toggle that slot&#039;s selectedness while leaving all other slots&#039; selectednesses unchanged, whereas holding control will make it so that clicking on an object slot will select that object slot and unselect all other object slots. We say that these cases are toggle-able by default. In both situations, holding control will toggle whether we&#039;re in toggle-mode or not, but it&#039;s just that the default mode may or may not be toggle-able. Here is more information:&lt;br /&gt;
*** &#039;&#039;&#039;Selected&#039;&#039;&#039;: Modifiable when clicking on an object slot. Multi-selection allowed.&lt;br /&gt;
*** &#039;&#039;&#039;Map&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map Tab or Map2 Tab. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Map Home&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Map2 Tab with H held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Model&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Model Tab.&lt;br /&gt;
*** &#039;&#039;&#039;Marked&#039;&#039;&#039;: Modifiable when clicking on an object slot with Alt held. Multi-selection allowed. Toggle-able by default.&lt;br /&gt;
*** &#039;&#039;&#039;Camera Hack&#039;&#039;&#039;: Modifiable when clicking on an object slot in the Cam Hack Tab.&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
== Object Tab ==&lt;br /&gt;
&lt;br /&gt;
== Mario Tab ==&lt;br /&gt;
&lt;br /&gt;
== HUD Tab ==&lt;br /&gt;
&lt;br /&gt;
== Camera Tab ==&lt;br /&gt;
&lt;br /&gt;
== Triangles Tab ==&lt;br /&gt;
&lt;br /&gt;
== Actions Tab ==&lt;br /&gt;
&lt;br /&gt;
== File Tab ==&lt;br /&gt;
&lt;br /&gt;
== Input Tab ==&lt;br /&gt;
&lt;br /&gt;
== Water Tab ==&lt;br /&gt;
&lt;br /&gt;
== Misc Tab ==&lt;br /&gt;
&lt;br /&gt;
== M64 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Custom Tab ==&lt;br /&gt;
&lt;br /&gt;
== TAS Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map Tab ==&lt;br /&gt;
&lt;br /&gt;
== Map2 Tab ==&lt;br /&gt;
&lt;br /&gt;
== Options Tab ==&lt;br /&gt;
&lt;br /&gt;
== Memory Tab ==&lt;br /&gt;
&lt;br /&gt;
== PU Tab ==&lt;br /&gt;
&lt;br /&gt;
== Area Tab ==&lt;br /&gt;
&lt;br /&gt;
== Model Tab ==&lt;br /&gt;
&lt;br /&gt;
== Gfx Tab ==&lt;br /&gt;
&lt;br /&gt;
== Debug Tab ==&lt;br /&gt;
&lt;br /&gt;
== Hacks Tab ==&lt;br /&gt;
&lt;br /&gt;
== Cam Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Q Frames Tab ==&lt;br /&gt;
&lt;br /&gt;
== Var Hack Tab ==&lt;br /&gt;
&lt;br /&gt;
== Coin Tab ==&lt;br /&gt;
&lt;br /&gt;
== Disassembly Tab ==&lt;br /&gt;
&lt;br /&gt;
== Decompiler Tab ==&lt;br /&gt;
&lt;br /&gt;
== Scripts Tab ==&lt;br /&gt;
&lt;br /&gt;
== Testing Tab ==&lt;/div&gt;</summary>
		<author><name>Pannenkoek2012</name></author>
	</entry>
</feed>