{"id":772,"date":"2024-06-10T13:24:40","date_gmt":"2024-06-10T13:24:40","guid":{"rendered":"https:\/\/x-change.life\/wiki\/?post_type=docs&#038;p=772"},"modified":"2025-06-26T20:30:42","modified_gmt":"2025-06-26T20:30:42","slug":"custom-x-change-life-macros-you-can-use-in-mods","status":"publish","type":"docs","link":"https:\/\/x-change.life\/wiki\/docs\/custom-x-change-life-macros-you-can-use-in-mods\/","title":{"rendered":"Custom X-Change Life macros you can use in mods"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Javascript Macros<\/h2>\n\n\n\n<p>X-Change Life uses a customized version of the Twine Harlowe engine. The following custom macros are for modders &#8211; these are some macros we have added to Twine Harlowe in order to extend its functionality. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. <code>average<\/code><\/h3>\n\n\n\n<p><strong>Function:<\/strong> Calculates the average of a series of numbers.<br><strong>Usage:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>(set: $avg to (average: 1, 2, 3, 4, 5))  &lt;!-- $avg will be 3 --&gt;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2. <code>rnd<\/code><\/h3>\n\n\n\n<p><strong>Function:<\/strong> Rounds a number to a specified precision.<br><strong>Usage:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>(set: $rounded to (rnd: 3.14159, 2))  &lt;!-- $rounded will be 3.14 --&gt;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3. <code>indexof<\/code><\/h3>\n\n\n\n<p><strong>Function:<\/strong> Finds the 1-based index of an item in an array. Returns -1 if the item is not found.<br><strong>Usage:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>(set: $index to (indexof: (a: \"apple\", \"banana\", \"cherry\"), \"banana\"))  &lt;!-- $index will be 2 --&gt;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4. <code>intersection<\/code><\/h3>\n\n\n\n<p><strong>Function:<\/strong> Calculates the intersection of two arrays, returning their common elements.<br><strong>Usage:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>(set: $common to (intersection: (a: \"apple\", \"banana\"), (a: \"banana\", \"cherry\")))  &lt;!-- $common will be (a: \"banana\") --&gt;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">5. <code>savegameto<\/code><\/h3>\n\n\n\n<p><strong>Function:<\/strong> Saves the game to the specified slot name.<br><strong>Usage:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>(savegameto: \"slot1\")  &lt;!-- Saves the game to slot \"slot1\" --&gt;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">6. <code>win<\/code><\/h3>\n\n\n\n<p><strong>Function:<\/strong> Checks if the variable <code>$result<\/code> is &#8220;pass&#8221;.<br><strong>Usage:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>(set: $result to \"pass\")\n(set: $didWin to (win:))  &lt;!-- $didWin will be true --&gt;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">7. <code>is_fem<\/code><\/h3>\n\n\n\n<p><strong>Function:<\/strong> Checks if the character&#8217;s gender is female.<br><strong>Usage:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>(set: $character to (dm: \"gender\", \"female\"))\n(set: $isFemale to (is_fem:))  &lt;!-- $isFemale will be true --&gt;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">8. <code>is_male<\/code><\/h3>\n\n\n\n<p><strong>Function:<\/strong> Checks if the character&#8217;s gender is male.<br><strong>Usage:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>(set: $character to (dm: \"gender\", \"male\"))\n(set: $isMale to (is_male:))  &lt;!-- $isMale will be true --&gt;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">9. <code>is_preg<\/code><\/h3>\n\n\n\n<p><strong>Function:<\/strong> Checks if the character is pregnant.<br><strong>Usage:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>(set: $character to (dm: \"pregnant\", \"true\"))\n(set: $isPregnant to (is_preg:))  &lt;!-- $isPregnant will be true --&gt;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">10. <code>knows_preg<\/code><\/h3>\n\n\n\n<p><strong>Function:<\/strong> Checks if the character&#8217;s pregnancy is known.<br><strong>Usage:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>(set: $character to (dm: \"pregnancy known\", \"true\"))\n(set: $knowsPregnancy to (knows_preg:))  &lt;!-- $knowsPregnancy will be true --&gt;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">11. <code>is_bim<\/code><\/h3>\n\n\n\n<p><strong>Function:<\/strong> Checks if the character has the &#8220;bimbo&#8221; side effect.<br><strong>Usage:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>(set: $character to (dm: \"side effects\", (a: \"bimbo\")))\n(set: $isBimbo to (is_bim:))  &lt;!-- $isBimbo will be true --&gt;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">12. <code>is_pp<\/code><\/h3>\n\n\n\n<p><strong>Function:<\/strong> Checks if the character has the &#8220;people pleaser&#8221; side effect.<br><strong>Usage:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>(set: $character to (dm: \"side effects\", (a: \"people pleaser\")))\n(set: $isPeoplePleaser to (is_pp:))  &lt;!-- $isPeoplePleaser will be true --&gt;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">13. <code>pill<\/code><\/h3>\n\n\n\n<p><strong>Function:<\/strong> Checks if the value of <code>$pill_taken<\/code> matches the provided pill name (case-insensitive).<br><strong>Usage:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>(set: $pill_taken to \"Cum-Cure\")\n(set: $isCumCure to (pill: \"cum-cure\"))  &lt;!-- $isCumCure will be true --&gt;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">14. <code>clamp<\/code><\/h3>\n\n\n\n<p><strong>Function:<\/strong> Clamps a number within a specified range.<br><strong>Usage:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>(set: $clampedValue to (clamp: 15, 10, 20))  &lt;!-- $clampedValue will be 15 --&gt;\n(set: $clampedValue to (clamp: 25, 10, 20))  &lt;!-- $clampedValue will be 20 --&gt;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">15. <code>currency<\/code><\/h3>\n\n\n\n<p><strong>Function:<\/strong> Formats a number as currency (USD) without cents.<br><strong>Usage:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>(set: $formattedCurrency to (currency: 1234))  &lt;!-- $formattedCurrency will be \"$1,234\" --&gt;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">16. <code>del<\/code><\/h3>\n\n\n\n<p><strong>Function:<\/strong> Deletes the specified variables.<br><strong>Usage:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>(del: \"$variable1\", \"$variable2\")  &lt;!-- Deletes $variable1 and $variable2 --&gt;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">17. <code>outfitdb<\/code><\/h3>\n\n\n\n<p><strong>Function:<\/strong> Retrieves a list of outfits for a specified character, optionally filtered by outfit IDs.<br><strong>Usage:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>(set: $outfits to (outfitdb: \"characterName\"))  &lt;!-- Retrieves all outfits for \"characterName\" --&gt;\n(set: $filteredOutfits to (outfitdb: \"characterName\", (a: \"outfit1\", \"outfit2\")))  &lt;!-- Retrieves specific outfits for \"characterName\" --&gt;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">18. <code>getoutfit<\/code><\/h3>\n\n\n\n<p><strong>Function:<\/strong> Retrieves details of a specific outfit by its ID.<br><strong>Usage:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>(set: $outfitDetails to (getoutfit: \"characterName category outfitName\"))  &lt;!-- Retrieves details of the specified outfit --&gt;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">19. <code>checkdm<\/code><\/h3>\n\n\n\n<p><strong>Function:<\/strong> Checks if a datamap contains a specified value based on an operation.<br><strong>Usage:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>(set: $dm to (dm: \"key1\", \"value1\", \"key2\", (a: \"value2\", \"value3\")))\n(set: $result1 to (checkdm: $dm, \"key1\", \"is\", \"value1\"))  &lt;!-- $result1 will be true --&gt;\n(set: $result2 to (checkdm: $dm, \"key2\", \"contains\", \"value2\"))  &lt;!-- $result2 will be true --&gt;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">20. <code>newseed<\/code><\/h3>\n\n\n\n<p><strong>Function:<\/strong> Generates a new seed based on the current time.<br><strong>Usage:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>(set: $seed to (newseed:))  &lt;!-- Generates a seed string based on the current time --&gt;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">21. <code>clearstandardvars<\/code><\/h3>\n\n\n\n<p><strong>Function:<\/strong> Clears standard variables.<br><strong>Usage:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>(clearstandardvars:)  &lt;!-- Clears standard variables --&gt;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">22. <code>twist<\/code><\/h3>\n\n\n\n<p><strong>Function:<\/strong> Generates a random integer between a specified minimum and maximum value (inclusive) using the Mersenne Twister algorithm.<br><strong>Usage:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>(set: $randomNumber to (twist: 1, 10))  &lt;!-- Generates a random number between 1 and 10 using Mersenne Twister algorithm --&gt;<\/code><\/pre>\n\n\n\n<p><strong>Note:<\/strong> This macro uses the Mersenne Twister algorithm, which provides a higher degree of randomness compared to Harlowe&#8217;s native randomness functions.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">23. <code>twirl<\/code><\/h3>\n\n\n\n<p><strong>Function:<\/strong> Picks a random value from a list of arguments using the Mersenne Twister algorithm.<br><strong>Usage:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>(set: $randomValue to (twirl: \"apple\", \"banana\", \"cherry\"))  &lt;!-- Picks a random fruit from the list using Mersenne Twister algorithm --&gt;<\/code><\/pre>\n\n\n\n<p><strong>Note:<\/strong> This macro uses the Mersenne Twister algorithm, which provides a higher degree of randomness compared to Harlowe&#8217;s native randomness functions.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">24. <code>twisted<\/code><\/h3>\n\n\n\n<p><strong>Function:<\/strong> Shuffles an array using the Fisher-Yates algorithm with the Mersenne Twister algorithm for randomness.<br><strong>Usage:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>(set: $shuffledArray to (twisted: (a: \"apple\", \"banana\", \"cherry\")))  &lt;!-- Shuffles the array using Fisher-Yates algorithm with Mersenne Twister algorithm --&gt;<\/code><\/pre>\n\n\n\n<p><strong>Note:<\/strong> This macro uses the Mersenne Twister algorithm, which provides a higher degree of randomness compared to Harlowe&#8217;s native randomness functions.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">25. <code>remove<\/code><\/h3>\n\n\n\n<p><strong>Function:<\/strong> Removes a specified number of occurrences of an item from an array.<br><strong>Usage:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>(set: $originalArray to (a: \"apple\", \"banana\", \"cherry\", \"apple\"))\n(set: $modifiedArray to (remove: $originalArray, \"apple\", 1))  &lt;!-- Removes one occurrence of \"apple\" --&gt;<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Harlowe Macros<\/h2>\n\n\n\n<p>There are custom harlowe macros that you can also use. These are slightly different than the ones above since they perform native harlowe functions, opposed to the ones above that do background things in javascript. These are usually utility macros that shorten other functions or allows you to cut out repeated tasks.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83c\udfa5 Media &amp; Visuals<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><code>$pic<\/code><\/h3>\n\n\n\n<p><strong>Parameters:<\/strong><br><code>(str) image_path<\/code>, <code>(str) position = \"left\"<\/code>, <code>(str) css_class = \"small\"<\/code><\/p>\n\n\n\n<p><strong>Function:<\/strong><br>Displays an image from the <code>img\/<\/code> folder. Optional parameters adjust position and CSS class. <code>\"small\"<\/code> sets width to 50%.<\/p>\n\n\n\n<p><strong>Usage Examples:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code><code>($pic:\"places\/gym\/locker room.jpg\") <\/code><code>($pic:\"places\/gym\/locker room.jpg\",\"left\") <\/code><code>($pic:\"places\/gym\/locker room.jpg\",\"right\",\"small\")<\/code><\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><code>$vid<\/code><\/h3>\n\n\n\n<p><strong>Parameters:<\/strong><br><code>(str) video_path<\/code>, <code>(str) position = \"left\"<\/code><\/p>\n\n\n\n<p><strong>Function:<\/strong><br>Embeds an autoplaying, looping video with mute behavior determined by <code>$audio_toggle<\/code>. Optional <code>\"left\"<\/code> or <code>\"right\"<\/code> positions it using <code>top_left_pic<\/code> or <code>top_right_pic<\/code>.<\/p>\n\n\n\n<p><strong>Usage Examples:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code><code>($vid:\"scenes\/characters\/jade\/sex\/workout\/02 get towel.mp4\") <\/code><code>($vid:\"scenes\/characters\/jade\/sex\/workout\/02 get towel.mp4\",\"left\")<\/code><\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\uddbc Display &amp; Styling<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><code>$centered<\/code><\/h3>\n\n\n\n<p><strong>Parameters:<\/strong><br><code>(codehook) _content<\/code><\/p>\n\n\n\n<p><strong>Function:<\/strong><br>Wraps content in a centered <code>&lt;div class='options'&gt;<\/code> block. Used to center text or UI blocks visually.<\/p>\n\n\n\n<p><strong>Usage Examples:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code><code>($centered: &#91;\"You feel warm and slutty inside.\"]) <\/code><code>($centered: &#91;(print:\"&lt;b>Warning:&lt;\/b> You're being watched.\")])<\/code><\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><code>$highlight<\/code><\/h3>\n\n\n\n<p><strong>Parameters:<\/strong><br><code>(codehook) _content<\/code><\/p>\n\n\n\n<p><strong>Function:<\/strong><br>Displays the content inside a <code>&lt;span class='highlight'&gt;<\/code>, useful for drawing attention to text.<\/p>\n\n\n\n<p><strong>Usage Examples:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code><code>($highlight: &#91;\"Objective Updated!\"]) <\/code><code>($highlight: &#91;(print:$her_name + \" seems impressed.\")])<\/code><\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><code>$shadow<\/code><\/h3>\n\n\n\n<p><strong>Parameters:<\/strong><br><code>(codehook) _content<\/code><\/p>\n\n\n\n<p><strong>Function:<\/strong><br>Displays the content inside a <code>&lt;span class='shadow'&gt;<\/code> for stylized text with a drop-shadow effect.<\/p>\n\n\n\n<p><strong>Usage Examples:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code><code>($shadow: &#91;\"Your heart skips a beat.\"]) <\/code><code>($shadow: &#91;(print:\"Round \" + $round_number)])<\/code><\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><code>$bimbo<\/code><\/h3>\n\n\n\n<p><strong>Parameters:<\/strong><br><code>(codehook) _content<\/code><\/p>\n\n\n\n<p><strong>Function:<\/strong><br>Wraps the content in a <code>&lt;span class='bimbo'&gt;<\/code> and centers it in a <code>&lt;div class='options'&gt;<\/code>. Used for bimbo-styled thoughts or narration.<\/p>\n\n\n\n<p><strong>Usage Examples:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code><code>($bimbo: &#91;\"Like, I dunno what that means... but it sounds sexy! \ud83d\udc8b\"]) <\/code><code>($bimbo: &#91;(print:\"Ughhh... math is, like, soooo hard!\")])<\/code><\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><code>$bimbo_dialogue<\/code><\/h3>\n\n\n\n<p><strong>Parameters:<\/strong><br><code>(codehook) _content<\/code><\/p>\n\n\n\n<p><strong>Function:<\/strong><br>Displays the content as bimbo-styled dialogue wrapped in quotation marks so you don&#8217;t have to add them.<\/p>\n\n\n\n<p><strong>Usage Examples:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code><code>($bimbo_dialogue: &#91;Omigod, did you, like, feel that too?])<\/code>\n<code>($bimbo_dialogue: &#91;(twirl:<\/code><code>\"<span style=\"background-color: initial;\">This is like, so totally embarrassing... *nervous giggle*\",<\/span><\/code><code><span style=\"background-color: initial;\">\"Omigosh, I'm like, so sorry! Was I using too much teeth? My jaw's just sooo tiny compared to your huge-\")])<\/span><\/code><\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><code>$heading<\/code><\/h3>\n\n\n\n<p><strong>Parameters:<\/strong><br><code>(str) _text<\/code><\/p>\n\n\n\n<p><strong>Function:<\/strong><br>Displays <code>_text<\/code> in a large heading styled using the palette color, with a shadow effect.<\/p>\n\n\n\n<p><strong>Usage Examples:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code><code>($heading: \"New Objective\") <\/code><code>($heading: \"Alexia\u2019s Bedroom\")<\/code><\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><code>$notification<\/code><\/h3>\n\n\n\n<p><strong>Parameters:<\/strong><br><code>(str) _message<\/code><\/p>\n\n\n\n<p><strong>Function:<\/strong><br>Displays <code>_message<\/code> inside a <code>&lt;mark&gt;<\/code> block that fades in and out automatically.<\/p>\n\n\n\n<p><strong>Usage Examples:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code><code>($notification: \"You gained 1 charm.\")<\/code><code>($notification: \"Your outfit is now dirty.\")<\/code><\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><code>$notification_still<\/code><\/h3>\n\n\n\n<p><strong>Parameters:<\/strong><br><code>(str) _message<\/code><\/p>\n\n\n\n<p><strong>Function:<\/strong><br>Displays <code>_message<\/code> inside a non-animated <code>&lt;mark&gt;<\/code> block. Remains visible until removed by logic.<\/p>\n\n\n\n<p><strong>Usage Examples:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code><code>($notification_still: \"Your makeup has worn off.\") <\/code><code>($notification_still: \"You have unread messages.\")<\/code><\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd0a Audio &amp; Sound Control<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><code>$play<\/code><\/h3>\n\n\n\n<p><strong>Parameters:<\/strong><br><code>(any) type<\/code>, <code>(str) track<\/code>, <code>(str) delay = \"none\"<\/code><\/p>\n\n\n\n<p><strong>Function:<\/strong><br>Plays a sound or music track. Supports custom routing based on type:<\/p>\n\n\n\n<ul>\n<li><code>\"sound\"<\/code>, <code>\"sex loop\"<\/code>, <code>\"ambience\"<\/code>, <code>\"song\"<\/code><\/li>\n\n\n\n<li>Directory-specific: <code>\"scene\"<\/code>, <code>\"story\"<\/code>, <code>\"secretary\"<\/code>, <code>\"workout\"<\/code><\/li>\n<\/ul>\n\n\n\n<p><strong>Usage Examples:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code><code>($play:\"sound\",\"wet_squish\") &lt;!-- Plays a sound effect immediately --&gt; <\/code>\n<code>($play:\"ambience\",\"cafe\") &lt;!-- Plays ambience immediately --&gt; <\/code>\n<code>($play:\"sex loop\",\"slow_ride\") &lt;!-- Loops a sex sound --&gt; <\/code>\n<code>($play:\"scene\",\"thwack\",\"2s\") &lt;!-- Delays playback 2 seconds --&gt; <\/code>\n<code>($play:\"song no loop\",\"main_theme\") &lt;!-- Plays a song once without looping --&gt;<\/code><\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udcac Text &amp; Language Tools<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><code>$caps<\/code><\/h3>\n\n\n\n<p><strong>Parameters:<\/strong><br><code>(str) sentence<\/code><\/p>\n\n\n\n<p><strong>Function:<\/strong><br>Capitalizes the first letter of each word in the string.<\/p>\n\n\n\n<p><strong>Usage Examples:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code><code>(set:_title to ($caps:\"just another slutty day\")) (print:_title) &lt;!-- Output: Just Another Slutty Day --&gt; <\/code>\n<code>(print: $caps's \"turn me into a girl\") &lt;!-- Output: Turn Me Into A Girl --&gt;<\/code><\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udcbe Storage Macros<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><code>$get_session_storage<\/code> \/ <code>$get_local_storage<\/code><\/h3>\n\n\n\n<p><strong>Parameters:<\/strong><br><code>(str) name<\/code>, <code>(any) default<\/code><\/p>\n\n\n\n<p><strong>Function:<\/strong><br>Reads a value from browser session or local storage. Returns the default if nothing is found.<\/p>\n\n\n\n<p><strong>Usage Examples:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code><code>(set:_mood to ($get_session_storage:\"last_mood\",\"bored\")) <\/code><code>(set:_flags to ($get_local_storage:\"debug_flags\",(a:)))<\/code><\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><code>$set_session_storage<\/code> \/ <code>$set_local_storage<\/code><\/h3>\n\n\n\n<p><strong>Parameters:<\/strong><br><code>(str) name<\/code>, <code>(any) value<\/code><\/p>\n\n\n\n<p><strong>Function:<\/strong><br>Saves a value into session or local storage.<\/p>\n\n\n\n<p><strong>Usage Examples:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code><code>($set_session_storage:\"last_mood\",\"humiliated\") <\/code><code>($set_local_storage:\"debug_flags\",(a:\"showIDs\"))<\/code><\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><code>$delete_global_variable<\/code><\/h3>\n\n\n\n<p><strong>Parameters:<\/strong><br><code>(str) var_name<\/code><\/p>\n\n\n\n<p><strong>Function:<\/strong><br>Resets a named variable by setting it to 0. Used to &#8220;delete&#8221; global state cleanly.<\/p>\n\n\n\n<p><strong>Usage Examples:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code><code>($delete_global_variable:\"$her_name\") &lt;!-- Resets $her_name to 0 --&gt;<\/code><\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><code>$use_global<\/code><\/h3>\n\n\n\n<p><strong>Parameters:<\/strong><br><code>(str) var_name<\/code>, <code>(str) js_var_name<\/code>, <code>(codehook) hook<\/code><\/p>\n\n\n\n<p><strong>Function:<\/strong><br>Temporarily loads a JS value, runs a hook with it, then resets the Twine variable.<\/p>\n\n\n\n<p><strong>Usage Examples:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>($use_global: \"$scene_select\", \"window.GE.scene_select\", &#91;(set:$scene to $scene_select)])<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\uddea Logic &amp; Utility<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><code>$char_passage<\/code><\/h3>\n\n\n\n<p><strong>Parameters:<\/strong><br><code>(str) base_passage<\/code>, <code>(codehook) core<\/code>, <code>(codehook) fallback<\/code><\/p>\n\n\n\n<p><strong>Function:<\/strong><br>Tries to display a character-specific version of a passage for non-base girls (modded). Falls back to a default block if none exists.<\/p>\n\n\n\n<p><strong>Usage Examples:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>($char_passage:\"sex transactional kiss\",&#91;\n      (set:$kiss_variant to (cond:\n      $character's \"race\" is \"white\", \"kiss \" + (text:(twist:1,3)),\n      $character's \"race\" is \"latin\", \"kiss \" + (text:(twist:4,6)),\n      $character's \"id\" is \"asian\", \"kiss \" + (text:(twist:7,8)),\n      $character's \"id\" is \"black\", \"kiss \" + (text:(twist:9,10)),\n      \"kiss\"\n      )\n    )],&#91;(set:$kiss_variant to \"kiss\")])<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><code>$passage_tags<\/code><\/h3>\n\n\n\n<p><strong>Parameters:<\/strong><br><code>(str) tag<\/code><\/p>\n\n\n\n<p><strong>Function:<\/strong><br>Inserts a &#8220;blank&#8221; section with the assigned tag, so modders can inject code into this location. Popular for options like adding a new button in a set list of options &#8211; mall locations, pills, etc.<\/p>\n\n\n\n<p><strong>Usage Examples:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code><code>($passage_tags:\"bar_options\")<\/code>\n&lt;!-- \nThen you'd inject code into that spot like this: \n:: new bar options &#91;bar_options]\n{(link:\"yell at a patron\")&#91;etc]}\n--&gt; <\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><code>$rnd<\/code><\/h3>\n\n\n\n<p><strong>Parameters:<\/strong><br><code>(num) value<\/code>, <code>(num) precision<\/code><\/p>\n\n\n\n<p><strong>Function:<\/strong><br>Rounds a number to a given decimal precision.<\/p>\n\n\n\n<p><strong>Usage Examples:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code><code>(set:_chance to ($rnd:0.75488,2)) &lt;!-- _chance = 0.75 --&gt; <\/code>\n<code>(print: $rnd:12.347,1) &lt;!-- Output: 12.3 --&gt;<\/code><\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><code>$clamp<\/code><\/h3>\n\n\n\n<p><strong>Parameters:<\/strong><br><code>(num) value<\/code>, <code>(num) min<\/code>, <code>(num) max<\/code><\/p>\n\n\n\n<p><strong>Function:<\/strong><br>Limits a value between a minimum and maximum. If the value is lower than min, returns min; if higher than max, returns max.<\/p>\n\n\n\n<p><strong>Usage Examples:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code><code>(set:_speed to ($clamp:12,5,10)) &lt;!-- _speed = 10 --&gt; <\/code>\n<code>(set:_volume to ($clamp:-3,0,100)) &lt;!-- _volume = 0 --&gt; <\/code>\n<code>(set:_sanity to ($clamp:$sanity,0,100)) &lt;!-- Ensures stat stays in bounds --&gt;<\/code><\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\udde0 Mood &amp; Status<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><code>$set_mood<\/code><\/h3>\n\n\n\n<p><strong>Parameters:<\/strong><br><code>(str) mood_name<\/code>, <code>(str) reason<\/code><\/p>\n\n\n\n<p><strong>Function:<\/strong><br>Sets the current mood, including icon, stat changes, and duration. Triggers mood refresh visuals. Mood must exist (current existing moods are &#8220;awesome&#8221;, &#8220;bored&#8221;, and &#8220;humiliated&#8221;.)<\/p>\n\n\n\n<p><strong>Usage Examples:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>($set_mood:\"humiliated\",\"because ' + (text: $her_name) + ' rejected you due to your small cock.\")\n($set_mood:\"bored\",\"because you've been hanging around the house too much recently!\")<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><code>$set_status<\/code><\/h3>\n\n\n\n<p><strong>Parameters:<\/strong><br><code>(str) status_name<\/code>, <code>(str) reason<\/code><\/p>\n\n\n\n<p><strong>Function:<\/strong><br>Adds a temporary status effect that modifies charm, intellect, or fitness. Triggers status display and stat refresh. Status must exist (current existing statuses are &#8220;cum breath&#8221;, &#8220;nasty cum breath&#8221;, &#8220;cum shoes&#8221;, &#8220;walking funny&#8221;.)<\/p>\n\n\n\n<p><strong>Usage Examples:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>($set_status:\"cum breath\",\"' + (text: $npc's \"sex name\") + ' came in your mouth, and your breath smells...\")\n\n($set_status:\"walking funny\",\"You're not walking straight... maybe because your ass was so ruthlessly physically dominated in that machine...\")<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd79 Game Interaction<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><code>$register_orgasm<\/code><\/h3>\n\n\n\n<p><strong>Parameters:<\/strong><br>None<\/p>\n\n\n\n<p><strong>Function:<\/strong><br>Logs an orgasm event, resets arousal, reduces action points, and updates stats.<\/p>\n\n\n\n<p><strong>Usage Examples:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code><code>($register_orgasm:) &lt;!-- Call at the end of orgasm scenes --&gt;<\/code><\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><code>$simple_option<\/code><\/h3>\n\n\n\n<p><strong>Parameters:<\/strong><br><code>(str) result<\/code>, <code>(...str) labels<\/code><\/p>\n\n\n\n<p><strong>Function:<\/strong><br>Creates simple clickable links to set <code>$choice<\/code> and optionally go to <code>next<\/code>, <code>display<\/code>, or use <code>nostop<\/code> logic.<\/p>\n\n\n\n<p><strong>Usage Examples:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>($simple_option:\"passage\",\"transition type (optional)\",\"choice 1\",\"choice 2\",\"choice 3\") &lt;!-- Any number of choices --&gt;\n\n($simple_option:\"buy flowers\",\"Daisies\",\"Roses\",\"Lilies\")\n&lt;!-- ^ this is the same as \n(link:\"Daisies\")&#91;(set:$choice to \"Daisies\")($cs:\"buy flowers\")\n(link:\"Roses\")&#91;(set:$choice to \"Roses\")($cs:\"buy flowers\")\n(link:\"Lilies\")&#91;(set:$choice to \"Lilies\")($cs:\"buy flowers\")\n--&gt;\n\nif you add \"display\" then it uses (display:) instead of ($cs)\n($simple_option:\"buy flowers\",\"display\",\"Daisies\",\"Roses\",\"Lilies\")\n\nif you use \"next\", then it uses ($nx) instead.\n($simple_option:\"buy flowers\",\"next\",\"Daisies\",\"Roses\",\"Lilies\")<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><code>$cs<\/code><\/h3>\n\n\n\n<p><strong>Parameters:<\/strong><br><code>(str) passage_name<\/code><\/p>\n\n\n\n<p><strong>Function:<\/strong><br>Sets <code>$next<\/code> and displays the <code>\"change screen\"<\/code> passage.<\/p>\n\n\n\n<p>*Special note: Calling this will clear the content on the &#8220;center screen&#8221; and replace it with the passage that you call, but it will leave the left and right sidebars alone. The exception to this rule is if the passage you call is a [fullscreen] passage.<\/p>\n\n\n\n<p><strong>Usage Examples:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code><code>($cs:\"scene 04 page 2\")<\/code>\n($cs:\"scene 04 page 3\")<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><code>$nx<\/code><\/h3>\n\n\n\n<p><strong>Parameters:<\/strong><br><code>(str) passage_name<\/code><\/p>\n\n\n\n<p><strong>Function:<\/strong><br>Sets <code>$next<\/code> and displays the <code>\"next\"<\/code> passage. This works similar to $cs except it replaces the ENTIRE screen. This means the passage you call needs to be [fullscreen] and rebuild both the left and right sidebars.<\/p>\n\n\n\n<p><strong>Usage Examples:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code><code>($nx:\"Go to the bar\")<\/code><code>($nx:\"Do chores\")<\/code><code>($nx:\"Workout\")<\/code><\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udcb0 Economy &amp; Currency<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><code>$gain_money<\/code><\/h3>\n\n\n\n<p><strong>Parameters:<\/strong><br><code>(num) amount<\/code><\/p>\n\n\n\n<p><strong>Function:<\/strong><br>Adds money to the player\u2019s total and updates the money display with a visual fade-up transition. Also plays a \u201ckaching\u201d sound if the amount is greater than zero.<\/p>\n\n\n\n<p><strong>Usage Examples:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code><code>($gain_money:50) &lt;!-- Adds $50 and shows animated currency update --&gt; <\/code><code>($gain_money:200) &lt;!-- Plays sound and fades in the new amount --&gt;<\/code><\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><code>$pay_money<\/code><\/h3>\n\n\n\n<p><strong>Parameters:<\/strong><br><code>(num) amount<\/code><\/p>\n\n\n\n<p><strong>Function:<\/strong><br>Subtracts money from the player. Ensures balance never drops below zero. Updates display and plays a cash sound.<\/p>\n\n\n\n<p><strong>Usage Examples:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code><code>($pay_money:25) &lt;!-- Deducts $25 and updates the money display --&gt; <\/code><code>($pay_money:100) &lt;!-- Deducts and plays sound if amount &gt; 0 --&gt;<\/code><\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd25 Arousal &amp; Emotion<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><code>$gain_arousal<\/code><\/h3>\n\n\n\n<p><strong>Parameters:<\/strong><br><code>(num) gain<\/code><\/p>\n\n\n\n<p><strong>Function:<\/strong><br>Sets <code>$gain<\/code> to the given value and displays the <code>\"gain arousal\"<\/code> passage. Used to increment arousal in a stylized way.<\/p>\n\n\n\n<p><strong>Usage Examples:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code><code>($gain_arousal:10) &lt;!-- Increases arousal by 10 and shows UI feedback --&gt;<\/code><code>($gain_arousal:5) &lt;!-- Triggers gain arousal logic for smaller amounts --&gt;<\/code><\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83c\udfb2 Skill Checks<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><code>$willpower_check<\/code><\/h3>\n\n\n\n<p><strong>Parameters:<\/strong><br><code>(str) next_passage<\/code>, <code>(num) difficulty<\/code><\/p>\n\n\n\n<p><strong>Function:<\/strong><br>Performs a willpower check based on a fixed chance (<code>101 - difficulty<\/code>). If successful, jumps to the <code>next_passage<\/code>.<\/p>\n\n\n\n<p><strong>Usage Examples:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code><code>($willpower_check:\"resist temptation\",40) &lt;!-- 61% chance to resist --&gt; <\/code><code>($willpower_check:\"walk away\",70) &lt;!-- 31% chance to succeed --&gt;<\/code><\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><code>$charm_check<\/code><\/h3>\n\n\n\n<p><strong>Parameters:<\/strong><br><code>(str) next_passage<\/code>, <code>(num) difficulty<\/code><\/p>\n\n\n\n<p><strong>Function:<\/strong><br>Performs a charm-based skill check. Chance is calculated from charm * 10, averaged with <code>101 - difficulty<\/code>.<\/p>\n\n\n\n<p><strong>Usage Examples:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code><code>($charm_check:\"flirt with him\",60) &lt;!-- Based on player\u2019s charm stat --&gt; <\/code><code>($charm_check:\"convince guard\",75) &lt;!-- Harder charm check --&gt;<\/code><\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><code>$intellect_check<\/code><\/h3>\n\n\n\n<p><strong>Parameters:<\/strong><br><code>(str) next_passage<\/code>, <code>(num) difficulty<\/code><\/p>\n\n\n\n<p><strong>Function:<\/strong><br>Performs an intellect-based skill check. Chance is based on intellect * 10, blended with <code>101 - difficulty<\/code>.<\/p>\n\n\n\n<p><strong>Usage Examples:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code><code>($intellect_check:\"solve puzzle\",50) &lt;!-- Average difficulty logic check --&gt; <\/code><code>($intellect_check:\"hack the console\",80) &lt;!-- Requires high intellect --&gt;<\/code><\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><code>$fitness_check<\/code><\/h3>\n\n\n\n<p><strong>Parameters:<\/strong><br><code>(str) next_passage<\/code>, <code>(num) difficulty<\/code><\/p>\n\n\n\n<p><strong>Function:<\/strong><br>Performs a fitness-based skill check. Chance uses fitness * 10 with a difficulty modifier.<\/p>\n\n\n\n<p><strong>Usage Examples:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code><code>($fitness_check:\"climb out window\",65) &lt;!-- Physical escape or action --&gt; <\/code><code>($fitness_check:\"lift heavy object\",40) &lt;!-- Easier physical task --&gt;<\/code><\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n","protected":false},"excerpt":{"rendered":"<p>Javascript Macros X-Change Life uses a customized version of the Twine Harlowe engine. The following custom macros are for modders &#8211; these are some macros we have added to Twine Harlowe in order to extend its functionality. 1. average Function: Calculates the average of a series of numbers.Usage: 2. rnd Function: Rounds a number to [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","template":"","meta":[],"doc_category":[16],"doc_tag":[],"_links":{"self":[{"href":"https:\/\/x-change.life\/wiki\/wp-json\/wp\/v2\/docs\/772"}],"collection":[{"href":"https:\/\/x-change.life\/wiki\/wp-json\/wp\/v2\/docs"}],"about":[{"href":"https:\/\/x-change.life\/wiki\/wp-json\/wp\/v2\/types\/docs"}],"author":[{"embeddable":true,"href":"https:\/\/x-change.life\/wiki\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/x-change.life\/wiki\/wp-json\/wp\/v2\/comments?post=772"}],"version-history":[{"count":7,"href":"https:\/\/x-change.life\/wiki\/wp-json\/wp\/v2\/docs\/772\/revisions"}],"predecessor-version":[{"id":1045,"href":"https:\/\/x-change.life\/wiki\/wp-json\/wp\/v2\/docs\/772\/revisions\/1045"}],"wp:attachment":[{"href":"https:\/\/x-change.life\/wiki\/wp-json\/wp\/v2\/media?parent=772"}],"wp:term":[{"taxonomy":"doc_category","embeddable":true,"href":"https:\/\/x-change.life\/wiki\/wp-json\/wp\/v2\/doc_category?post=772"},{"taxonomy":"doc_tag","embeddable":true,"href":"https:\/\/x-change.life\/wiki\/wp-json\/wp\/v2\/doc_tag?post=772"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}