<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-CA">
	<id>https://wiki.rhythm.cafe/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Camellia258</id>
	<title>Rhythm Doctor Wiki - User contributions [en-ca]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.rhythm.cafe/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Camellia258"/>
	<link rel="alternate" type="text/html" href="https://wiki.rhythm.cafe/page/Special:Contributions/Camellia258"/>
	<updated>2026-10-24T19:38:59Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://wiki.rhythm.cafe/index.php?title=RDCode&amp;diff=4213</id>
		<title>RDCode</title>
		<link rel="alternate" type="text/html" href="https://wiki.rhythm.cafe/index.php?title=RDCode&amp;diff=4213"/>
		<updated>2026-03-09T17:12:28Z</updated>

		<summary type="html">&lt;p&gt;Camellia258: minor typo fix&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;RDCode&#039;&#039;&#039; (abbreviation of &#039;&#039;Rhythm Doctor Code&#039;&#039;) is the set of features in Rhythm Doctor that encompass Custom Methods, Tags, Conditionals, and simple programming via reading and writing to variables. Here and elsewhere and in the community, the word &amp;quot;&#039;&#039;&#039;&#039;&#039;RDCode&#039;&#039;&#039;&#039;&#039;&amp;quot; on its own usually refers to its programming language.&lt;br /&gt;
&lt;br /&gt;
Note that all RDCode is affected by the player&#039;s &#039;&#039;&#039;Visual Offset&#039;&#039;&#039;, which can cause timing issues in certain cases.&lt;br /&gt;
&lt;br /&gt;
== Custom Methods ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Custom Methods&#039;&#039;&#039; are functions that can be executed for various uses, whether to manage audio, VFX, gameplay, or specific built-in cases like a &#039;&#039;Gameover&#039;&#039; or custom &#039;&#039;Rank&#039;&#039; screen.&lt;br /&gt;
&lt;br /&gt;
See [[Call Custom Method]] for how to execute Custom Methods and [https://docs.google.com/spreadsheets/d/1JAz6iRLqcn08ZeTeBHeeDrpdX6M5K0b1qRVQomua21s/edit List of Custom Methods] for a list of the available ones.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Note that Custom Methods are not officially endorsed to be used by the devs, and can break anytime when the game updates.&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Comment Commands ===&lt;br /&gt;
&lt;br /&gt;
See [[Comment#Advanced|Comment]].&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tags&#039;&#039;&#039; can be set on events to run them at any time, in order. If an event or series of events are tagged, they will run whenever the tag is run. This is useful for looping the same events or running them based on player inputs or choices (i.e. not bound to a specific beat nor bar).&lt;br /&gt;
&lt;br /&gt;
Tagged events only run at the same time if, on the timeline, they&#039;re placed on the same beat and bar. They&#039;re run in order, such that if a tagged event is placed on beat 1 and another on beat 2, when running the tag, the first event will run immediately and there will be a 1 beat delay to the next event. &amp;lt;!-- ive no idea how to word this better if anyone could check it thanks --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [[Tag Action]] for running and managing tags. ([[Call Custom Method]] also has a set of Custom Methods that equate to Tag Action&#039;s functionality.)&lt;br /&gt;
&lt;br /&gt;
To add a tag to an event, click on the &amp;quot;&#039;&#039;Bar&#039;&#039;&amp;quot; text in the top of the Event window, and it will turn into a &amp;quot;&#039;&#039;Tag&#039;&#039;&amp;quot; textbox.&lt;br /&gt;
&amp;lt;!--It&#039;s best practice to encompass individual and separate tags in square brackets (&amp;lt;code&amp;gt;[]&amp;lt;/code&amp;gt;).--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [[List_of_Custom_Methods#Tags|List of Tags]] for a set of special tags that can&#039;t be affected by Tag Action but rather are handled by game input.&lt;br /&gt;
&lt;br /&gt;
== Conditionals ==&lt;br /&gt;
&lt;br /&gt;
[[File:EditorConditionalsMenu.png|400px|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Conditionals&#039;&#039;&#039; are a way to check for conditions when running events. The list of conditionals can be accessed from the &#039;&#039;Conditionals&#039;&#039; button in the &#039;&#039;&#039;Actions&#039;&#039;&#039; (&#039;&#039;&#039;VFX&#039;&#039;&#039;) &#039;&#039;&#039;tab&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Click &#039;&#039;Add New...&#039;&#039; to create a new conditional. To edit an existing one, hover over it and click the wrench icon. The icon beside it is to duplicate it. &#039;&#039;Deselect All&#039;&#039; only appears when applying conditionals to events, and removes all of the applied ones from the event.&lt;br /&gt;
&lt;br /&gt;
Conditionals have a &#039;&#039;Tag&#039;&#039; (text identifier), &#039;&#039;ID&#039;&#039; (unique numerical identifier), and &#039;&#039;Name&#039;&#039; (text that appears in the conditional (select) list).&lt;br /&gt;
&lt;br /&gt;
Events can also have set &#039;&#039;&#039;durations&#039;&#039;&#039;. Though they aren&#039;t exclusively used in combination with conditionals, they nearly always go together. They allow an event to be triggered during a set timeframe defined by the &#039;&#039;&#039;duration&#039;&#039;&#039; in &#039;&#039;&#039;beats&#039;&#039;&#039;, as long as the conditionals are true at any point during that timeframe. E.g., setting a &amp;lt;code&amp;gt;numMistakes &amp;gt; 5&amp;lt;/code&amp;gt; conditional alongside an 8-beat &#039;&#039;&#039;duration&#039;&#039;&#039; will run the event when the mistake amount surpasses 5 &#039;&#039;at any point within those 8 beats&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Conditionals can have multiple &#039;&#039;type&#039;&#039;s:&lt;br /&gt;
&lt;br /&gt;
=== Last Hit ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Last Hit&#039;&#039;&#039; checks a hit type of the last hit. It can check for &#039;&#039;Perfect&#039;&#039;, &#039;&#039;Slightly Early&#039;&#039;, &#039;&#039;Slightly Late&#039;&#039;, &#039;&#039;Very Early&#039;&#039;, &#039;&#039;Very Late&#039;&#039;, &#039;&#039;Any Early or Late&#039;&#039;, and &#039;&#039;Missed completely&#039;&#039;. It can also check for individual rows or any row in the level. &lt;br /&gt;
&lt;br /&gt;
=== Max Times Executed ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Max Times Executed&#039;&#039;&#039; allows a looping or tagged event to stop executing after a certain number of executions. E.g., if a level has &#039;&#039;[[Set Play Style]]&#039;&#039; to &#039;&#039;loop&#039;&#039; and an event within this loop should only run thrice, &#039;&#039;&#039;Max Times Executed&#039;&#039;&#039; can stop its execution after 3 loops. Note that execution count is &#039;&#039;&#039;global&#039;&#039;&#039;, meaning that if two events have the same &#039;&#039;&#039;Max Times Executed&#039;&#039;&#039; conditional, both will contribute to its count.&lt;br /&gt;
&lt;br /&gt;
=== Player Mode ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Player Mode&#039;&#039;&#039; allows the detection of &#039;&#039;&#039;1-player&#039;&#039;&#039; or &#039;&#039;&#039;2-player&#039;&#039;&#039; within the same level file (useful in case &#039;&#039;&#039;both modes&#039;&#039;&#039; is selected in export settings and a different &#039;&#039;&#039;2-player&#039;&#039;&#039; file is not provided). Note that in the editor, if the player changes from 1-player to 2-player during playback, the &amp;quot;player mode&amp;quot; state (1P/2P) will update accordingly.&lt;br /&gt;
&lt;br /&gt;
=== Language ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Language&#039;&#039;&#039; allows the detection of the player&#039;s Rhythm Doctor language. Useful for localising text and vocals (e.g. [[One Shift More]]). It supports the languages &#039;&#039;English&#039;&#039;, &#039;&#039;Chinese (Simplified)&#039;&#039;, &#039;&#039;Chinese (Traditional)&#039;&#039;, &#039;&#039;Spanish&#039;&#039;, &#039;&#039;Korean&#039;&#039;, &#039;&#039;Portuguese&#039;&#039;, &#039;&#039;Polish&#039;&#039;, &#039;&#039;Japanese&#039;&#039;, &#039;&#039;French&#039;&#039;, &#039;&#039;German&#039;&#039;, and &#039;&#039;Arabic&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Custom ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Custom&#039;&#039;&#039; conditionals allow for &#039;&#039;&#039;RDCode&#039;&#039;&#039; conditional expressions to be inputted, such as comparisons (e.g. &amp;lt;code&amp;gt;i0 &amp;lt; 5&amp;lt;/code&amp;gt;) and boolean reading (e.g. &amp;lt;code&amp;gt;b0&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
See [[List of Custom Methods#Variables|List of Variables]] for variables that can be checked within these types of conditionals.&lt;br /&gt;
&lt;br /&gt;
== RDCode programming ==&lt;br /&gt;
&lt;br /&gt;
More commonly referred to as just &#039;&#039;&#039;RDCode&#039;&#039;&#039;, &#039;&#039;&#039;RDCode programming&#039;&#039;&#039; is the programming language built into Rhythm Doctor. It allows reading and writing to variables and performing basic arithmetic.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;RDCode&#039;&#039;&#039; can be input within &#039;&#039;&#039;conditionals&#039;&#039;&#039; to check or &#039;&#039;&#039;[[Call Custom Method]]&#039;&#039;&#039; events to run.&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Variables&#039;&#039;&#039; in RDCode are readable and writeable items to store numerical and boolean information. The 30 &#039;&#039;&#039;readable and writeable&#039;&#039;&#039; variables appear in the Level Editor&#039;s Event Window when nothing is selected. They update dynamically during runtime.&lt;br /&gt;
&lt;br /&gt;
The provided &#039;&#039;&#039;readable and writeable&#039;&#039;&#039; variables in RDCode are 10 &#039;&#039;&#039;boolean&#039;&#039;&#039; variables, 10 &#039;&#039;&#039;integer&#039;&#039;&#039; variables, and 10 &#039;&#039;&#039;float&#039;&#039;&#039; variables, with the naming &amp;lt;code&amp;gt;b/i/f&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;[0-9]&amp;lt;/code&amp;gt; (e.g. &amp;lt;code&amp;gt;i0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;f5&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;b9&amp;lt;/code&amp;gt;). Arrays can&#039;t be made, nor classes.&lt;br /&gt;
&lt;br /&gt;
Note that, when converting between data types (e.g. &amp;lt;code&amp;gt;i0 = f0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;b0 = i0&amp;lt;/code&amp;gt;), floats will be &#039;&#039;&#039;rounded&#039;&#039;&#039; (0.5 rounding is inconsistent, can be upwards or downwards), and integers to booleans will return &#039;&#039;&#039;false&#039;&#039;&#039; if its equal to 0, otherwise &#039;&#039;&#039;true&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Certain events that have text-boxes are able to read these 30 variables, using curly brackets (&amp;lt;code&amp;gt;{}&amp;lt;/code&amp;gt;), and having inside a valid RDCode arithmetic expression. (e.g. in a [[Floating Text]] event, &amp;lt;code&amp;gt;Current score: {i0}&amp;lt;/code&amp;gt; will display the current value of &amp;lt;code&amp;gt;i0&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
There are &#039;&#039;&#039;non-readable but writeable&#039;&#039;&#039; variables that affect gameplay and visuals, and they&#039;re only able to be used in &#039;&#039;&#039;[[Call Custom Method]]&#039;&#039;&#039; events. E.g. &amp;lt;code&amp;gt;wobblyLines&amp;lt;/code&amp;gt; (bool), &amp;lt;code&amp;gt;noHitFlashBorder&amp;lt;/code&amp;gt; (bool), and &amp;lt;code&amp;gt;room[]&amp;lt;/code&amp;gt; (this is a special &#039;&#039;&#039;array&#039;&#039;&#039; variable that can accept custom methods that affect individual rooms). See [https://docs.google.com/spreadsheets/d/1JAz6iRLqcn08ZeTeBHeeDrpdX6M5K0b1qRVQomua21s/edit List of Custom Methods] for a further list.&lt;br /&gt;
&lt;br /&gt;
Finally, there are &#039;&#039;&#039;non-writeable&#039;&#039;&#039; variables that can still be read and used only in &#039;&#039;&#039;conditionals&#039;&#039;&#039;, such as &amp;lt;code&amp;gt;autoplay&amp;lt;/code&amp;gt; (bool), &amp;lt;code&amp;gt;levelSpeed&amp;lt;/code&amp;gt; (float), and &amp;lt;code&amp;gt;numMistakes&amp;lt;/code&amp;gt; (float).&lt;br /&gt;
&lt;br /&gt;
=== Operations ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Operator&lt;br /&gt;
|- &lt;br /&gt;
| Addition || &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| Subtraction || &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| Multiplication || &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| Division || &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| Value writing || &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| Equal to || &amp;lt;code&amp;gt;==&amp;lt;/code&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| Not equal to || &amp;lt;code&amp;gt;!=&amp;lt;/code&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| Greater than || &amp;lt;code&amp;gt;&amp;lt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| Smaller than || &amp;lt;code&amp;gt;&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| Logical not || &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| Logical and || &amp;lt;code&amp;gt;&amp;amp;&amp;amp;&amp;lt;/code&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| Logical or || &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;||&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Camellia258</name></author>
	</entry>
</feed>