renpy/doc/incompatible.html

872 lines
73 KiB
HTML
Raw Normal View History

2023-01-18 22:13:55 +00:00
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Incompatible Changes &#8212; Ren&#39;Py Documentation</title>
<link rel="stylesheet" href="_static/renpydoc.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="_static/bootstrap-3.3.6/css/bootstrap.min.css" />
<link rel="stylesheet" type="text/css" href="_static/bootstrap-3.3.6/css/bootstrap-theme.min.css" />
<link rel="stylesheet" type="text/css" href="_static/bootstrap-sphinx.css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<script type="text/javascript" src="_static/js/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="_static/js/jquery-fix.js"></script>
<script type="text/javascript" src="_static/bootstrap-3.3.6/js/bootstrap.min.js"></script>
<script type="text/javascript" src="_static/bootstrap-sphinx.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Distributor Notes" href="distributor.html" />
<link rel="prev" title="Changelog (Ren&#39;Py 6.11 - 6.99)" href="changelog6.html" />
<meta charset='utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'>
<meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1'>
<meta name="apple-mobile-web-app-capable" content="yes">
</head><body>
<div id="navbar" class="navbar navbar-default navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<!-- .btn-navbar is used as the toggle for collapsed navbar content -->
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="index.html">
Ren&#39;Py Documentation</a>
<span class="navbar-text navbar-version pull-left"><b>7.5.3</b></span>
</div>
<div class="collapse navbar-collapse nav-collapse">
<ul class="nav navbar-nav">
<li><a href="https://www.renpy.org">Home Page</a></li>
<li><a href="https://www.renpy.org/doc/html/">Online Documentation</a></li>
<li class="dropdown globaltoc-container">
<a role="button"
id="dLabelGlobalToc"
data-toggle="dropdown"
data-target="#"
href="index.html">Site <b class="caret"></b></a>
<ul class="dropdown-menu globaltoc"
role="menu"
aria-labelledby="dLabelGlobalToc"><ul>
<li class="toctree-l1"><a class="reference internal" href="quickstart.html">Quickstart</a></li>
<li class="toctree-l1"><a class="reference internal" href="gui.html">GUI Customization Guide</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="language_basics.html">Language Basics</a></li>
<li class="toctree-l1"><a class="reference internal" href="label.html">Labels &amp; Control Flow</a></li>
<li class="toctree-l1"><a class="reference internal" href="dialogue.html">Dialogue and Narration</a></li>
<li class="toctree-l1"><a class="reference internal" href="displaying_images.html">Displaying Images</a></li>
<li class="toctree-l1"><a class="reference internal" href="menus.html">In-Game Menus</a></li>
<li class="toctree-l1"><a class="reference internal" href="python.html">Python Statements</a></li>
<li class="toctree-l1"><a class="reference internal" href="conditional.html">Conditional Statements</a></li>
<li class="toctree-l1"><a class="reference internal" href="audio.html">Audio</a></li>
<li class="toctree-l1"><a class="reference internal" href="movie.html">Movie</a></li>
<li class="toctree-l1"><a class="reference internal" href="voice.html">Voice</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="text.html">Text</a></li>
<li class="toctree-l1"><a class="reference internal" href="translation.html">Translation</a></li>
<li class="toctree-l1"><a class="reference internal" href="displayables.html">Displayables</a></li>
<li class="toctree-l1"><a class="reference internal" href="transforms.html">Transforms</a></li>
<li class="toctree-l1"><a class="reference internal" href="transitions.html">Transitions</a></li>
<li class="toctree-l1"><a class="reference internal" href="atl.html">Animation and Transformation Language</a></li>
<li class="toctree-l1"><a class="reference internal" href="matrixcolor.html">Matrixcolor</a></li>
<li class="toctree-l1"><a class="reference internal" href="layeredimage.html">Layered Images</a></li>
<li class="toctree-l1"><a class="reference internal" href="3dstage.html">3D Stage</a></li>
<li class="toctree-l1"><a class="reference internal" href="live2d.html">Live2D Cubism</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="style.html">Styles</a></li>
<li class="toctree-l1"><a class="reference internal" href="style_properties.html">Style Properties</a></li>
<li class="toctree-l1"><a class="reference internal" href="screens.html">Screens and Screen Language</a></li>
<li class="toctree-l1"><a class="reference internal" href="screen_actions.html">Screen Actions, Values, and Functions</a></li>
<li class="toctree-l1"><a class="reference internal" href="screen_special.html">Special Screen Names</a></li>
<li class="toctree-l1"><a class="reference internal" href="screen_optimization.html">Screen Language Optimization</a></li>
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration Variables</a></li>
<li class="toctree-l1"><a class="reference internal" href="preferences.html">Preference Variables</a></li>
<li class="toctree-l1"><a class="reference internal" href="store_variables.html">Store Variables</a></li>
<li class="toctree-l1"><a class="reference internal" href="mouse.html">Custom Mouse Cursors</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="launcher.html">Launcher</a></li>
<li class="toctree-l1"><a class="reference internal" href="developer_tools.html">Developer Tools</a></li>
<li class="toctree-l1"><a class="reference internal" href="director.html">Interactive Director</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="nvl_mode.html">NVL-Mode Tutorial</a></li>
<li class="toctree-l1"><a class="reference internal" href="input.html">Text Input</a></li>
<li class="toctree-l1"><a class="reference internal" href="side_image.html">Side Images</a></li>
<li class="toctree-l1"><a class="reference internal" href="rooms.html">Image Gallery, Music Room, and Replay Actions</a></li>
<li class="toctree-l1"><a class="reference internal" href="drag_drop.html">Drag and Drop</a></li>
<li class="toctree-l1"><a class="reference internal" href="sprites.html">Sprites</a></li>
<li class="toctree-l1"><a class="reference internal" href="keymap.html">Customizing the Keymap</a></li>
<li class="toctree-l1"><a class="reference internal" href="achievement.html">Achievements</a></li>
<li class="toctree-l1"><a class="reference internal" href="history.html">Dialogue History</a></li>
<li class="toctree-l1"><a class="reference internal" href="multiple.html">Multiple Character Dialogue</a></li>
<li class="toctree-l1"><a class="reference internal" href="splashscreen_presplash.html">Splashscreen and Presplash</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="statement_equivalents.html">Statement Equivalents</a></li>
<li class="toctree-l1"><a class="reference internal" href="save_load_rollback.html">Saving, Loading, and Rollback</a></li>
<li class="toctree-l1"><a class="reference internal" href="persistent.html">Persistent Data</a></li>
<li class="toctree-l1"><a class="reference internal" href="trans_trans_python.html">Transforms and Transitions in Python</a></li>
<li class="toctree-l1"><a class="reference internal" href="gui_advanced.html">Advanced GUI</a></li>
<li class="toctree-l1"><a class="reference internal" href="screen_python.html">Screens and Python</a></li>
<li class="toctree-l1"><a class="reference internal" href="modes.html">Modes</a></li>
<li class="toctree-l1"><a class="reference internal" href="cdd.html">Creator-Defined Displayables</a></li>
<li class="toctree-l1"><a class="reference internal" href="cds.html">Creator-Defined Statements</a></li>
<li class="toctree-l1"><a class="reference internal" href="custom_text_tags.html">Custom Text Tags</a></li>
<li class="toctree-l1"><a class="reference internal" href="character_callbacks.html">Character Callbacks</a></li>
<li class="toctree-l1"><a class="reference internal" href="file_python.html">File Access</a></li>
<li class="toctree-l1"><a class="reference internal" href="color_class.html">Color Class</a></li>
<li class="toctree-l1"><a class="reference internal" href="matrix.html">Matrix</a></li>
<li class="toctree-l1"><a class="reference internal" href="model.html">Model-Based Rendering</a></li>
<li class="toctree-l1"><a class="reference internal" href="other.html">Other Functions and Variables</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="build.html">Building Distributions</a></li>
<li class="toctree-l1"><a class="reference internal" href="updater.html">Web Updater</a></li>
<li class="toctree-l1"><a class="reference internal" href="android.html">Android</a></li>
<li class="toctree-l1"><a class="reference internal" href="chromeos.html">Chrome OS/Chromebook</a></li>
<li class="toctree-l1"><a class="reference internal" href="ios.html">iOS</a></li>
<li class="toctree-l1"><a class="reference internal" href="iap.html">In-App Purchasing</a></li>
<li class="toctree-l1"><a class="reference internal" href="gesture.html">Gestures</a></li>
<li class="toctree-l1"><a class="reference internal" href="raspi.html">Raspberry Pi</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="security.html">Security</a></li>
<li class="toctree-l1"><a class="reference internal" href="problems.html">Dealing with Problems</a></li>
<li class="toctree-l1"><a class="reference internal" href="environment_variables.html">Environment Variables</a></li>
<li class="toctree-l1"><a class="reference internal" href="self_voicing.html">Self-Voicing</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="editor.html">Text Editor Integration</a></li>
<li class="toctree-l1"><a class="reference internal" href="skins.html">Skins</a></li>
<li class="toctree-l1"><a class="reference internal" href="translating_renpy.html">Translating Ren'Py</a></li>
</ul>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="changelog.html">Changelog (Ren'Py 7.x-)</a></li>
<li class="toctree-l1"><a class="reference internal" href="changelog6.html">Changelog (Ren'Py 6.11 - 6.99)</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Incompatible Changes</a></li>
<li class="toctree-l1"><a class="reference internal" href="distributor.html">Distributor Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="license.html">License</a></li>
<li class="toctree-l1"><a class="reference internal" href="credits.html">Credits</a></li>
<li class="toctree-l1"><a class="reference internal" href="sponsors.html">Ren'Py Development Sponsors</a></li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="thequestion.html">Script of The Question</a></li>
<li class="toctree-l1"><a class="reference internal" href="thequestion_nvl.html">NVL-mode script for The Question</a></li>
</ul>
</ul>
</li>
</ul>
<form class="navbar-form navbar-right" action="search.html" method="get">
<div class="form-group">
<input type="text" name="q" class="form-control" placeholder="Search" />
</div>
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-md-3">
<div id="sidebar" class="bs-sidenav" role="complementary"><ul>
<li><a class="reference internal" href="#">Incompatible Changes</a><ul>
<li><a class="reference internal" href="#incompatible-7-5-2">8.0.2 / 7.5.2</a></li>
<li><a class="reference internal" href="#incompatible-7-5-0">8.0.0 / 7.5.0</a></li>
<li><a class="reference internal" href="#incompatible-7-4-11">7.4.11</a></li>
<li><a class="reference internal" href="#incompatible-7-4-9">7.4.9</a></li>
<li><a class="reference internal" href="#incompatible-7-4-7">7.4.7</a></li>
<li><a class="reference internal" href="#incompatible-7-4-6">7.4.6</a></li>
<li><a class="reference internal" href="#incompatible-7-4-5">7.4.5</a></li>
<li><a class="reference internal" href="#incompatible-7-4-3">7.4.3</a></li>
<li><a class="reference internal" href="#incompatible-7-4-1">7.4.1</a></li>
<li><a class="reference internal" href="#incompatible-7-4">7.4</a></li>
<li><a class="reference internal" href="#incompatible-7-3-3">7.3.3</a></li>
<li><a class="reference internal" href="#incompatible-7-3-0">7.3.0</a></li>
<li><a class="reference internal" href="#incompatible-7-2-2">7.2.2</a></li>
<li><a class="reference internal" href="#incompatible-7-1-1">7.1.1</a></li>
<li><a class="reference internal" href="#incompatible-7-1">7.1</a></li>
<li><a class="reference internal" href="#incompatible-7-0">7.0</a></li>
<li><a class="reference internal" href="#incompatible-6-99">6.99.13</a></li>
<li><a class="reference internal" href="#id18">6.99.12.3</a></li>
<li><a class="reference internal" href="#id19">6.99.11</a></li>
<li><a class="reference internal" href="#id20">6.99.9</a></li>
<li><a class="reference internal" href="#id21">6.99.2</a></li>
<li><a class="reference internal" href="#incompatible-6-18">6.18</a></li>
<li><a class="reference internal" href="#incompatible-6-16">6.16</a></li>
<li><a class="reference internal" href="#incompatible-6-15-7">6.15.7</a></li>
<li><a class="reference internal" href="#incompatible-6-14">6.14</a></li>
<li><a class="reference internal" href="#incompatible-6-13">6.13.8</a></li>
<li><a class="reference internal" href="#id27">6.13</a></li>
<li><a class="reference internal" href="#incompatible-6-12-1">6.12.1</a></li>
<li><a class="reference internal" href="#incompatible-6-12-0">6.12.0</a></li>
<li><a class="reference internal" href="#incompatible-6-11-1">6.11.1</a></li>
<li><a class="reference internal" href="#incompatible-6-11-0">6.11.0</a></li>
<li><a class="reference internal" href="#incompatible-6-10-1">6.10.0</a></li>
<li><a class="reference internal" href="#incompatible-6-9-2">6.9.2</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div class="col-md-9 content">
<div class="section" id="incompatible-changes">
<h1>Incompatible Changes<a class="headerlink" href="#incompatible-changes" title="Permalink to this headline"> link</a></h1>
<p>This is a list of changes that may require intervention in the form of
changes to scripts or your development environment. Our intent is that
all other changes should not affect existing scripts.</p>
<p>Note that setting <a class="reference internal" href="config.html#var-config.script_version"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.script_version</span></code></a> will cause many of
these changes to be reverted, at the cost of losing access to recent
features.</p>
<p>Incompatible changes to the GUI are documented at <a class="reference internal" href="gui.html#gui-changes"><span class="std std-ref">Incompatible GUI Changes</span></a>, as
such changes only take effect when the GUI is regenerated.</p>
<div class="section" id="incompatible-7-5-2">
<span id="incompatible-8-0-2"></span><span id="id1"></span><h2>8.0.2 / 7.5.2<a class="headerlink" href="#incompatible-7-5-2" title="Permalink to this headline"> link</a></h2>
<p>A modal screen now blocks the <code class="docutils literal notranslate"><span class="pre">pause</span></code> statement and <code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.pause`()</span></code>
function from timing out. This was the indended behavior, but didn't work
in some cases. This change can be reverted with:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">modal_blocks_pause</span> <span class="o">=</span> <span class="kc">False</span>
</pre></div>
</div>
<p>The default games no longer filter Ruby/Furigana text tags from the history.
This requires the line in screens.rpy that sets <code class="xref std std-var docutils literal notranslate"><span class="pre">gui.history_allow_tags</span></code>
to be changed to:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">gui</span><span class="o">.</span><span class="n">history_allow_tags</span> <span class="o">=</span> <span class="p">{</span> <span class="s2">&quot;alt&quot;</span><span class="p">,</span> <span class="s2">&quot;noalt&quot;</span><span class="p">,</span> <span class="s2">&quot;rt&quot;</span><span class="p">,</span> <span class="s2">&quot;rb&quot;</span><span class="p">,</span> <span class="s2">&quot;art&quot;</span> <span class="p">}</span>
</pre></div>
</div>
<p>This change is only required if your game uses Ruby/Furigana text tags.</p>
</div>
<div class="section" id="incompatible-7-5-0">
<span id="incompatible-8-0-0"></span><span id="id2"></span><h2>8.0.0 / 7.5.0<a class="headerlink" href="#incompatible-7-5-0" title="Permalink to this headline"> link</a></h2>
<p>The &quot;Windows, Mac, and Linux for Markets&quot; distribution has been changed to
no longer prefix the contents of the zip file created with the directory
name and version number. If you'd like to retain the old behavior, add
to your game:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">init</span> <span class="k">python</span><span class="p">:</span>
<span class="n">build</span><span class="o">.</span><span class="n">package</span><span class="p">(</span><span class="s2">&quot;market&quot;</span><span class="p">,</span> <span class="s2">&quot;zip&quot;</span><span class="p">,</span> <span class="s2">&quot;windows linux mac renpy all&quot;</span><span class="p">,</span> <span class="s2">&quot;Windows, Mac, Linux for Markets&quot;</span><span class="p">)</span>
</pre></div>
</div>
<p>For the noalt text tag to work with history, you'll need to edit
screens.rpy to make sure that <code class="xref std std-var docutils literal notranslate"><span class="pre">gui.history_allow_tags</span></code> contains
&quot;noalt&quot;. The defaultfor this variable is:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">gui</span><span class="o">.</span><span class="n">history_allow_tags</span> <span class="o">=</span> <span class="p">{</span> <span class="s2">&quot;alt&quot;</span><span class="p">,</span> <span class="s2">&quot;noalt&quot;</span> <span class="p">}</span>
</pre></div>
</div>
<p>(This change was necessary in 7.4, but only documented now.)</p>
<p>The behavior of Ren'Py changed sometime in the 7.4 series, such that
rollback through a load behaved correctly, and reverted the changes
performed in the <code class="docutils literal notranslate"><span class="pre">after_load</span></code> label, and by <a class="reference internal" href="config.html#var-config.after_load_callbacks"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.after_load_callbacks</span></code></a>.
(The previous behavior was undefined, with some changes reverted and some not,
leaving the game in an inconsistent state.) If your game has to migrate
data after a load, it's now recommended to call <a class="reference internal" href="save_load_rollback.html#renpy.block_rollback" title="renpy.block_rollback"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.block_rollback()</span></code></a>
to prevent the changes from being rolled back.</p>
<p>The <a class="reference internal" href="config.html#var-config.narrator_menu"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.narrator_menu</span></code></a> variable now defaults to True. It's been
set to true in the default screens.rpy for some time. In the unlikely event
it was false in your game, restore the old behavior with:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">narrator_menu</span> <span class="o">=</span> <span class="kc">False</span>
</pre></div>
</div>
<p>The sound and voice channels are now stopped when ending the main menu.
To revert to the prior behavior (only the movie channel was stopped), add
to your game:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">main_menu_stop_channels</span> <span class="o">=</span> <span class="p">[</span> <span class="s2">&quot;movie&quot;</span> <span class="p">]</span>
</pre></div>
</div>
<p>Screens called by <code class="docutils literal notranslate"><span class="pre">call</span> <span class="pre">screen</span></code> no longer support roll forward by default.
See <a class="reference internal" href="changelog.html#call-screen-roll-forward"><span class="std std-ref">the changelog</span></a> for the problems it can
cause. Roll forward can be enabled on a per screen basis with the <cite>roll_forward</cite> property,
or for all screens with:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">call_screen_roll_forward</span> <span class="o">=</span> <span class="kc">True</span>
</pre></div>
</div>
<p>Key and timer statements no longer take up space inside a vbox or hbox, and
the showif statement does not take up space when its child is hidden. To revert
this change:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">box_skip</span> <span class="o">=</span> <span class="kc">False</span>
</pre></div>
</div>
<p>The <a class="reference internal" href="style_properties.html#style-property-focus_mask"><code class="xref std std-propref docutils literal notranslate"><span class="pre">focus_mask</span></code></a> style property now defaults to None for drag displayables.
This improves performance, but means that the displayable can be dragged by
transparent pixels. To revert this, the focus_mask property can be set to True
for individual drags, or globally with:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">style</span> <span class="k">drag</span><span class="p">:</span>
<span class="na">focus_mask</span> <span class="kc">True</span>
</pre></div>
</div>
<p>Both options reduce performance.</p>
<p>The <a class="reference internal" href="style_properties.html#style-property-outline_scaling"><code class="xref std std-propref docutils literal notranslate"><span class="pre">outline_scaling</span></code></a> style property now defaults to &quot;linear&quot;. This means
the window scaling factor is applied to the outline size, and then rounded to an
integer. This can cause multiple outlines of similar sizes to disappear. To revert
this, the outline_scaling property can be set to &quot;step&quot; for individual text elements,
or globally with:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">style</span> <span class="k">default</span><span class="p">:</span>
<span class="na">outline_scaling</span> <span class="s2">&quot;step&quot;</span>
</pre></div>
</div>
<p>The <a class="reference internal" href="atl.html#transform-property-crop_relative"><code class="xref std std-tpref docutils literal notranslate"><span class="pre">crop_relative</span></code></a> transform property now defaults to True instead of False.
Absolute numbers of pixels to set the cropping should be expressed with ints or
<code class="docutils literal notranslate"><span class="pre">absolute</span></code> numbers. To revert to the former default behavior, which casts floats to
an absolute number of pixels, use:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">crop_relative_default</span> <span class="o">=</span> <span class="kc">False</span>
</pre></div>
</div>
<p>However, be warned that like most things documented only on this page, this will
conflict with - and cannot be used at the same time as - some other new features.
This setting applies to <a class="reference internal" href="atl.html#transform-property-crop"><code class="xref std std-tpref docutils literal notranslate"><span class="pre">crop</span></code></a>, and also now to <a class="reference internal" href="atl.html#transform-property-corner1"><code class="xref std std-tpref docutils literal notranslate"><span class="pre">corner1</span></code></a> and
<a class="reference internal" href="atl.html#transform-property-corner2"><code class="xref std std-tpref docutils literal notranslate"><span class="pre">corner2</span></code></a>.</p>
<p>The platform-specific directories inside lib/ have had name changes. The
<code class="docutils literal notranslate"><span class="pre">lib/windows-x86_64</span></code> directory is now <code class="docutils literal notranslate"><span class="pre">lib/py2-windows-x86_64</span></code>. This
change helps support the development of the Python 3 powered Ren'Py 8.
These directories are not documented, and may change between Ren'Py
versions, but we do guarantee that <code class="docutils literal notranslate"><span class="pre">sys.executable</span></code> is set.</p>
<p>Vpgrids cannot be overfull anymore, and can only be underfull if the
<code class="docutils literal notranslate"><span class="pre">allow_underfull</span></code> property is passed, or if <a class="reference internal" href="config.html#var-config.allow_underfull_grids"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.allow_underfull_grids</span></code></a> is
set to True.</p>
<p>The way <a class="reference internal" href="layeredimage.html"><span class="doc">layered images</span></a> place their children, and how children
with variable size are sized, has changed. Instead of taking into account the available
area in the context the layeredimage is displayed, it now presumes the size of the
screen is available, unless an explicit size has been given with <a class="reference internal" href="atl.html#transform-property-xsize"><code class="xref std std-tpref docutils literal notranslate"><span class="pre">xsize</span></code></a>,
<a class="reference internal" href="atl.html#transform-property-ysize"><code class="xref std std-tpref docutils literal notranslate"><span class="pre">ysize</span></code></a> or <a class="reference internal" href="atl.html#transform-property-xysize"><code class="xref std std-tpref docutils literal notranslate"><span class="pre">xysize</span></code></a>. To revert to the old behavior, where a layeredimage
can display differently in different contexts, you can use:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">layeredimage_offer_screen</span> <span class="o">=</span> <span class="kc">False</span>
</pre></div>
</div>
<p>Or you can also toggle it for specific layeredimages by passing them the
<code class="docutils literal notranslate"><span class="pre">offer_screen</span></code> property.</p>
<p>The <code class="docutils literal notranslate"><span class="pre">function</span></code> statement in ATL will only block catch-up in cases where it
executes more than once. To revert to the old behavior, where ATL would block
at a function, use:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">atl_function_always_blocks</span> <span class="o">=</span> <span class="kc">True</span>
</pre></div>
</div>
</div>
<div class="section" id="incompatible-7-4-11">
<span id="id3"></span><h2>7.4.11<a class="headerlink" href="#incompatible-7-4-11" title="Permalink to this headline"> link</a></h2>
<p>Ren'Py will now run a button's unhovered property even when focus is
changed by default, such as when a screen is shown or unshown. To
revert to the old behavior, use:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">always_unfocus</span> <span class="o">=</span> <span class="kc">False</span>
</pre></div>
</div>
</div>
<div class="section" id="incompatible-7-4-9">
<span id="id4"></span><h2>7.4.9<a class="headerlink" href="#incompatible-7-4-9" title="Permalink to this headline"> link</a></h2>
<p>Ren'Py will now interpret floating point numbers given to a Transform's
<a class="reference internal" href="atl.html#transform-property-xsize"><code class="xref std std-tpref docutils literal notranslate"><span class="pre">xsize</span></code></a> or <a class="reference internal" href="atl.html#transform-property-ysize"><code class="xref std std-tpref docutils literal notranslate"><span class="pre">ysize</span></code></a> properties as a size relative to the area
available to the Transform. To revert this change:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">relative_transform_size</span> <span class="o">=</span> <span class="kc">False</span>
</pre></div>
</div>
<p>The order in which Ren'Py's self-voicing reads out layers, screens, and displayables
in screens has changed so that screens and displayables closest to the player
are read first. To revert to the old order:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">tts_front_to_back</span> <span class="o">=</span> <span class="kc">False</span>
</pre></div>
</div>
</div>
<div class="section" id="incompatible-7-4-7">
<span id="id5"></span><h2>7.4.7<a class="headerlink" href="#incompatible-7-4-7" title="Permalink to this headline"> link</a></h2>
<p>When <a class="reference internal" href="style_properties.html#style-property-xminimum"><code class="xref std std-propref docutils literal notranslate"><span class="pre">xminimum</span></code></a> and <a class="reference internal" href="style_properties.html#style-property-xmaximum"><code class="xref std std-propref docutils literal notranslate"><span class="pre">xmaximum</span></code></a> are both floats, the
minimum is interpreted as being a fraction of the available area. This
means that <a class="reference internal" href="style_properties.html#style-property-xsize"><code class="xref std std-propref docutils literal notranslate"><span class="pre">xsize</span></code></a> will have the expected result when being
given a float. This may cause some displayables to change size. To revert
this change:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">adjust_minimums</span> <span class="o">=</span> <span class="kc">False</span>
</pre></div>
</div>
<p>An ATL displayable will now start its animation when it first
appears, rather than when the screen itself is shown. To revert this change:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">atl_start_on_show</span> <span class="o">=</span> <span class="kc">False</span>
</pre></div>
</div>
<p>Input carets now blink by default. To change this:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">input_caret_blink</span> <span class="o">=</span> <span class="kc">False</span>
</pre></div>
</div>
</div>
<div class="section" id="incompatible-7-4-6">
<span id="id6"></span><h2>7.4.6<a class="headerlink" href="#incompatible-7-4-6" title="Permalink to this headline"> link</a></h2>
<p>The change regarding the layer at list in 7.4.5 was reverted. The new <code class="docutils literal notranslate"><span class="pre">camera</span></code>
statement defaults to the new semantics, while leaving <code class="docutils literal notranslate"><span class="pre">show</span> <span class="pre">layer</span></code> alone.</p>
</div>
<div class="section" id="incompatible-7-4-5">
<span id="id7"></span><h2>7.4.5<a class="headerlink" href="#incompatible-7-4-5" title="Permalink to this headline"> link</a></h2>
<p>Games produced with this version use the model-based renderer by default.
To disable the model-based renderer, use:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">gl2</span> <span class="o">=</span> <span class="kc">False</span>
</pre></div>
</div>
<p><strong>Reverted in 7.4.6</strong>
The <code class="docutils literal notranslate"><span class="pre">scene</span></code> statement no longer clears the layer at list. To clear the
layer at list, use:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">show</span> <span class="na">layer</span> <span class="n">master</span>
</pre></div>
</div>
<p>Where &quot;master&quot; is the name of the layer. Alternatively, the old behavior
can be restored with:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">scene_clears_layer_at_list</span> <span class="o">=</span> <span class="kc">True</span>
</pre></div>
</div>
</div>
<div class="section" id="incompatible-7-4-3">
<span id="id8"></span><h2>7.4.3<a class="headerlink" href="#incompatible-7-4-3" title="Permalink to this headline"> link</a></h2>
<p>It is now possible to click to dismiss transitions introduced with
<a class="reference internal" href="other.html#renpy.transition" title="renpy.transition"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.transition()</span></code></a>, and places that use it like the <code class="docutils literal notranslate"><span class="pre">with</span></code> clause
of say or <code class="docutils literal notranslate"><span class="pre">call</span> <span class="pre">screen</span></code> statement. To prevent this, use:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">dismiss_blocking_transitions</span> <span class="o">=</span> <span class="kc">False</span>
</pre></div>
</div>
</div>
<div class="section" id="incompatible-7-4-1">
<span id="id9"></span><h2>7.4.1<a class="headerlink" href="#incompatible-7-4-1" title="Permalink to this headline"> link</a></h2>
<p>Pause with a delay now uses <a class="reference internal" href="statement_equivalents.html#renpy.pause" title="renpy.pause"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.pause()</span></code></a> rather than <code class="docutils literal notranslate"><span class="pre">with</span> <span class="pre">Pause(...)</span></code>.
This means that the user will have to click to bypass multiple pauses in a row.
To revert to the old behavior, use:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">pause_with_transition</span> <span class="o">=</span> <span class="kc">True</span>
</pre></div>
</div>
</div>
<div class="section" id="incompatible-7-4">
<span id="id10"></span><h2>7.4<a class="headerlink" href="#incompatible-7-4" title="Permalink to this headline"> link</a></h2>
<p>Mobile platforms now use hardware, rather than software, video playback.
To restore the old behavior, use:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">hw_video</span> <span class="o">=</span> <span class="kc">True</span>
</pre></div>
</div>
<p>Ren'Py will now only show side images if with at least one attribute in
addition to the image tag. To disable this, use:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">side_image_requires_attributes</span> <span class="o">=</span> <span class="kc">False</span>
</pre></div>
</div>
<p>While setting config variables, like <a class="reference internal" href="config.html#var-config.mouse"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.mouse</span></code></a>, outside of the init
phase was never supported, it will not work in 7.4. Consider using the
<a class="reference internal" href="store_variables.html#var-default_mouse"><code class="xref std std-var docutils literal notranslate"><span class="pre">default_mouse</span></code></a> variable to set a custom mouse cursor, instead.</p>
</div>
<div class="section" id="incompatible-7-3-3">
<span id="id11"></span><h2>7.3.3<a class="headerlink" href="#incompatible-7-3-3" title="Permalink to this headline"> link</a></h2>
<p>Callbacks registered with <a class="reference internal" href="config.html#var-config.start_callbacks"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.start_callbacks</span></code></a> are now run
after <code class="docutils literal notranslate"><span class="pre">default</span></code> statements in all cases. To restore the old behavior
(where callbacks were run before <code class="docutils literal notranslate"><span class="pre">default</span></code> statements during game
but not replay start), use:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">early_start_store</span> <span class="o">=</span> <span class="kc">True</span>
</pre></div>
</div>
<p>When given to a viewport or vpgrid with scrollbars, the minimum, xminimum,
and yminimum side properties now apply to the side containing the scrollbars
and viewport, and not solely the viewport.</p>
<p>To work around this, either use <code class="docutils literal notranslate"><span class="pre">viewport_minimum</span></code>, <code class="docutils literal notranslate"><span class="pre">viewport_xminimum</span></code>,
and <code class="docutils literal notranslate"><span class="pre">viewport_yminimum</span></code>, or include:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">compat_viewport_minimum</span> <span class="o">=</span> <span class="kc">True</span>
</pre></div>
</div>
</div>
<div class="section" id="incompatible-7-3-0">
<span id="id12"></span><h2>7.3.0<a class="headerlink" href="#incompatible-7-3-0" title="Permalink to this headline"> link</a></h2>
<p>Screen language now produces the error &quot;a non-constant keyword argument ...
is not allowed after a python block.&quot; when it encounters screens similar
to the following:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">screen</span> <span class="n">test</span><span class="p">():</span>
<span class="k">default</span> <span class="n">a</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">button</span><span class="p">:</span>
<span class="k">$</span> <span class="n">a</span> <span class="o">=</span> <span class="mi">1</span>
<span class="na">action</span> <span class="n">Return</span><span class="p">(</span><span class="n">a</span><span class="p">)</span>
<span class="k">text</span> <span class="s2">&quot;Test&quot;</span>
</pre></div>
</div>
<p>This is because the property <cite>action</cite> is run before the python assignment,
meaning this was returning 0 when clicked, not 1. To disable this check, add</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">keyword_after_python</span> <span class="o">=</span> <span class="kc">True</span>
</pre></div>
</div>
<p>to a file named 01compat.rpy in your game's game directory. However, your
game will have the old behavior.</p>
<p>The order in which children of the <code class="docutils literal notranslate"><span class="pre">side</span></code> layout are drawn is now
taken from the control string. To revert to the old fixed order, use:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">keep_side_render_order</span> <span class="o">=</span> <span class="kc">False</span>
</pre></div>
</div>
<p>The interface of <a class="reference internal" href="config.html#var-config.say_attribute_transition_callback"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.say_attribute_transition_callback</span></code></a> has
been changed in an incompatible way, to allow sets of old and new tags
to be given. To revert to the old interface, use:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">say_attribute_transition_callback_attrs</span> <span class="o">=</span> <span class="kc">False</span>
</pre></div>
</div>
<p>It's mode parameter has also been slightly changed, and will now return
a value of <code class="docutils literal notranslate"><span class="pre">both</span></code> when both a <code class="docutils literal notranslate"><span class="pre">permanent</span></code> and <code class="docutils literal notranslate"><span class="pre">temporary</span></code>
attribute transition is occuring.</p>
</div>
<div class="section" id="incompatible-7-2-2">
<span id="id13"></span><h2>7.2.2<a class="headerlink" href="#incompatible-7-2-2" title="Permalink to this headline"> link</a></h2>
<p><a class="reference internal" href="config.html#var-config.say_attribute_transition_callback"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.say_attribute_transition_callback</span></code></a> has been changed to
accept a new argument, the image being displayed.</p>
</div>
<div class="section" id="incompatible-7-1-1">
<span id="id14"></span><h2>7.1.1<a class="headerlink" href="#incompatible-7-1-1" title="Permalink to this headline"> link</a></h2>
<p>Ren'Py's window auto function will now determine if dialogue or a caption
is associated with a menu statement, and will attempt to hide or show the
dialogue window as appropriate. A &quot;Force Recompile&quot; is necessary to include
the information that enables this feature. While it should work with older
games, this can be disabled and the old behavior restored with:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">menu_showed_window</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">window_auto_show</span> <span class="o">=</span> <span class="p">[</span> <span class="s2">&quot;say&quot;</span> <span class="p">]</span>
<span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">window_auto_hide</span> <span class="o">=</span> <span class="p">[</span> <span class="s2">&quot;scene&quot;</span><span class="p">,</span> <span class="s2">&quot;call screen&quot;</span> <span class="p">]</span>
</pre></div>
</div>
<p>While not technically an incompatible change, there is a recommend change
to the history screen. Please see <a class="reference internal" href="changelog.html#history-7-1-1"><span class="std std-ref">the changelog entry</span></a>
for details of how to update your game.</p>
</div>
<div class="section" id="incompatible-7-1">
<span id="id15"></span><h2>7.1<a class="headerlink" href="#incompatible-7-1" title="Permalink to this headline"> link</a></h2>
<p>When an image is not being show, say-with-attributes now resolves a side
image, rather than just using the attributes given. To disable this, add:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">say_attributes_use_side_image</span> <span class="o">=</span> <span class="kc">False</span>
</pre></div>
</div>
</div>
<div class="section" id="incompatible-7-0">
<span id="id16"></span><h2>7.0<a class="headerlink" href="#incompatible-7-0" title="Permalink to this headline"> link</a></h2>
<p>Ren'Py now defines automatic images at init 0, rather than at a very late
init level. To revert to the prior behavior, add to your game:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">init</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
<span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">late_images_scan</span> <span class="o">=</span> <span class="kc">True</span>
</pre></div>
</div>
<p>The <a class="reference internal" href="transitions.html#Dissolve" title="Dissolve"><code class="xref py py-func docutils literal notranslate"><span class="pre">Dissolve()</span></code></a>, <a class="reference internal" href="transitions.html#ImageDissolve" title="ImageDissolve"><code class="xref py py-func docutils literal notranslate"><span class="pre">ImageDissolve()</span></code></a>, and <a class="reference internal" href="transitions.html#AlphaDissolve" title="AlphaDissolve"><code class="xref py py-func docutils literal notranslate"><span class="pre">AlphaDissolve()</span></code></a>
transitions now default to using the alpha channel of the source
displayables, as if <code class="docutils literal notranslate"><span class="pre">alpha=True</span></code> was given. To revert this change, add:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">dissolve_force_alpha</span> <span class="o">=</span> <span class="kc">False</span>
</pre></div>
</div>
<p>Showing a movie sprite that is already showing will now replay the movie.
To revert to the previous behavior:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">replay_movie_sprites</span> <span class="o">=</span> <span class="kc">False</span>
</pre></div>
</div>
</div>
<div class="section" id="incompatible-6-99">
<span id="id17"></span><h2>6.99.13<a class="headerlink" href="#incompatible-6-99" title="Permalink to this headline"> link</a></h2>
<p>The size of a hyperlink is now inherited from the size of the enclosing text.
To disable this, add:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">hyperlink_inherit_size</span> <span class="o">=</span> <span class="kc">False</span>
</pre></div>
</div>
<p>The {nw} text tag now waits until voice and self-voicing are finished before
it continues. To disable this behavior, add:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">nw_voice</span> <span class="o">=</span> <span class="kc">False</span>
</pre></div>
</div>
<p>ATL Transforms now show at least one frame whenever a pause or interpolation
occurs. When a game doesn't expect this, it can show up as a series of
rapidly displayed single frames. This can be disabled with:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">atl_one_frame</span> <span class="o">=</span> <span class="kc">False</span>
</pre></div>
</div>
<p>The show layer at statement now persists the state of a transform like
any other ATL transform. This can lead to a behavior change in which,
for example, an offset persists between multiple show layer at
statements. To disable this, write:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">keep_show_layer_state</span> <span class="o">=</span> <span class="kc">False</span>
</pre></div>
</div>
<p>While not an incompatible change, <a class="reference internal" href="file_python.html#renpy.list_files" title="renpy.list_files"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.list_files()</span></code></a> has been
changed to sort its output in a standard order. The causes Ren'Py
to commit to behavior that had been ambiguous. For example, when
multiple files in the images directory had the same name, Ren'Py
would pick one at random. (The file picked could change from
system to system.) Now, the same file is chosen wherever Ren'Py
is run.</p>
</div>
<div class="section" id="id18">
<h2>6.99.12.3<a class="headerlink" href="#id18" title="Permalink to this headline"> link</a></h2>
<p>Ren'Py will no longer search for system-installed fonts when in developer
mode. If you game was using a system installed font, the font file should
be copied into the game/ directory. (But please make sure that this is
compatible with the font file's license.)</p>
</div>
<div class="section" id="id19">
<h2>6.99.11<a class="headerlink" href="#id19" title="Permalink to this headline"> link</a></h2>
<p>The order of execution of <code class="docutils literal notranslate"><span class="pre">style</span></code> and <code class="docutils literal notranslate"><span class="pre">translate</span></code> statements has
changed, as documented in <a class="reference internal" href="changelog6.html#renpy-6-99-11"><span class="std std-ref">the changelog</span></a>. To
revent this change, add the code:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">new_translate_order</span> <span class="o">=</span> <span class="kc">False</span>
</pre></div>
</div>
<p>Note that reverting this change may prevent the new GUI from working.</p>
<p>The <a class="reference internal" href="config.html#var-config.quit_action"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.quit_action</span></code></a> variable has changed its default to one
that causes the quit prompt to be displayed of the in-game context. To
revert to the old behavior, add the code:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">quit_action</span> <span class="o">=</span> <span class="n">ui</span><span class="o">.</span><span class="n">gamemenus</span><span class="p">(</span><span class="s2">&quot;_quit_prompt&quot;</span><span class="p">)</span>
</pre></div>
</div>
<p>Ren'Py now enforces maximum sizes given to buttons and windows. To disable
this behavior, add the code:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">enforce_window_max_size</span> <span class="o">=</span> <span class="kc">False</span>
</pre></div>
</div>
</div>
<div class="section" id="id20">
<h2>6.99.9<a class="headerlink" href="#id20" title="Permalink to this headline"> link</a></h2>
<p>Ren'Py now plays interface sounds on a channel named &quot;audio&quot;, that
supports multiple sound playback at once. This channel might not have
the same settings as a customized sound channel. The audio channel
settings can be changed by adjusting <a class="reference internal" href="config.html#var-config.auto_channels"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.auto_channels</span></code></a>,
or the sound channel can be used by adding the code:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">config</span><span class="o">.</span><span class="n">play_channel</span> <span class="o">=</span> <span class="s2">&quot;sound&quot;</span>
</pre></div>
</div>
</div>
<div class="section" id="id21">
<h2>6.99.2<a class="headerlink" href="#id21" title="Permalink to this headline"> link</a></h2>
<p>Ren'Py will now scan the an image directory (the directory named images
underneath the game directory) for images, and define them based on their
filename. To disable this behavior, use the code:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">init</span> <span class="k">python</span><span class="p">:</span>
<span class="n">config</span><span class="o">.</span><span class="n">image_directory</span> <span class="o">=</span> <span class="kc">None</span>
</pre></div>
</div>
</div>
<div class="section" id="incompatible-6-18">
<span id="id22"></span><h2>6.18<a class="headerlink" href="#incompatible-6-18" title="Permalink to this headline"> link</a></h2>
<p>The <code class="docutils literal notranslate"><span class="pre">show</span> <span class="pre">screen</span></code> and <code class="docutils literal notranslate"><span class="pre">call</span> <span class="pre">screen</span></code> statements may now evaluate their
arguments as part of the screen prediction process. If evaluating the
arguments to a screen causes side effects to occur, the <code class="docutils literal notranslate"><span class="pre">show</span> <span class="pre">screen</span></code>
or <code class="docutils literal notranslate"><span class="pre">call</span> <span class="pre">screen</span></code> statements should be given the new <code class="docutils literal notranslate"><span class="pre">nopredict</span></code>
clause, which prevents prediction.</p>
<p>Screens now participate in transitions transitions now go from the old
state of the screen to the new state. To disable this, set
<a class="reference internal" href="config.html#var-config.transition_screens"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.transition_screens</span></code></a> to false.</p>
<p>Ren'Py no longer uses structural equality to transfer state (for example,
the state of a transform) when a screen replaces a screen with the same
tag. Instead, the <a class="reference internal" href="screens.html#sl-use"><span class="std std-ref">use statement</span></a> now supports an <code class="docutils literal notranslate"><span class="pre">id</span></code>
property, which can be used to explicitly transfer state.</p>
</div>
<div class="section" id="incompatible-6-16">
<span id="id23"></span><h2>6.16<a class="headerlink" href="#incompatible-6-16" title="Permalink to this headline"> link</a></h2>
<p>The meaning of the <cite>loop</cite> parameter to <a class="reference internal" href="rooms.html#MusicRoom" title="MusicRoom"><code class="xref py py-func docutils literal notranslate"><span class="pre">MusicRoom()</span></code></a> has changed. To
get the old behavior, set both <cite>loop</cite> and <cite>single_track</cite> to true.</p>
</div>
<div class="section" id="incompatible-6-15-7">
<span id="id24"></span><h2>6.15.7<a class="headerlink" href="#incompatible-6-15-7" title="Permalink to this headline"> link</a></h2>
<p>Ren'Py now expects auto-forward mode to be controlled by the &quot;auto-forward&quot; <a class="reference internal" href="screen_actions.html#Preference" title="Preference"><code class="xref py py-func docutils literal notranslate"><span class="pre">Preference()</span></code></a>.
To have it controlled by the auto-forward mode slider, set <code class="xref std std-var docutils literal notranslate"><span class="pre">config.default_afm_enable</span></code> to
None.</p>
</div>
<div class="section" id="incompatible-6-14">
<span id="id25"></span><h2>6.14<a class="headerlink" href="#incompatible-6-14" title="Permalink to this headline"> link</a></h2>
<p>Previously, Ren'Py moved archived files into the archived/
directory. It would search this directory automatically when running a
game or building archives. One-click builds make this unnecessary,
and files in archived/ should be moved back into the game directory.</p>
<p><a class="reference internal" href="transitions.html#MoveTransition" title="MoveTransition"><code class="xref py py-func docutils literal notranslate"><span class="pre">MoveTransition()</span></code></a> has changed its interface. The old version of
MoveTransition can be accessed as OldMoveTransition, if you don't want
to rewrite your code. (The changes only matter if you use factories with
MoveTransition.)</p>
<p><a class="reference internal" href="trans_trans_python.html#Transform" title="Transform"><code class="xref py py-func docutils literal notranslate"><span class="pre">Transform()</span></code></a> has changed its behavior with regards to
asymmetrically scaled and rotated images. It's unlikely the old
behavior was ever used.</p>
</div>
<div class="section" id="incompatible-6-13">
<span id="id26"></span><h2>6.13.8<a class="headerlink" href="#incompatible-6-13" title="Permalink to this headline"> link</a></h2>
<p>Old-style string interpolation has been re-enabled by default. If you
wrote code (between 6.13 and 6.13.7) that uses % in say or menu statements, you should either
write %% instead, or include the code:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">init</span> <span class="k">python</span><span class="p">:</span>
<span class="n">config</span><span class="o">.</span><span class="n">old_substitutions</span> <span class="o">=</span> <span class="kc">False</span>
</pre></div>
</div>
</div>
<div class="section" id="id27">
<h2>6.13<a class="headerlink" href="#id27" title="Permalink to this headline"> link</a></h2>
<p>The changes to text behavior can affect games in development in many
ways. The biggest change is the introduction of new-style
(square-bracket) text substitutions, and the elimination of old-style
(percent-based) substitutions. These changes can be reverted with the
code:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">init</span> <span class="k">python</span><span class="p">:</span>
<span class="n">config</span><span class="o">.</span><span class="n">old_substitutions</span> <span class="o">=</span> <span class="kc">True</span>
<span class="n">config</span><span class="o">.</span><span class="n">new_substitutions</span> <span class="o">=</span> <span class="kc">False</span>
</pre></div>
</div>
<p>New- and old-style substitutions can coexist in the same game, by
setting both variables to True.</p>
<p>Ren'Py has also changed the default line-wrapping behavior. While
the new behavior should never increase the number of lines in a
paragraph, it may change which words fall on each line. To restore
the old behavior, add the code:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">init</span> <span class="k">python</span><span class="p">:</span>
<span class="k">style</span><span class="o">.</span><span class="k">default</span><span class="o">.</span><span class="na">layout</span> <span class="o">=</span> <span class="s2">&quot;greedy&quot;</span>
<span class="k">style</span><span class="o">.</span><span class="k">default</span><span class="o">.</span><span class="na">language</span> <span class="o">=</span> <span class="s2">&quot;western&quot;</span>
</pre></div>
</div>
<p>A bug with negative line_spacing was fixed. This fix can cause blocks of
text to shrink in height. To revert to the old behavior, use:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">init</span> <span class="k">python</span><span class="p">:</span>
<span class="n">config</span><span class="o">.</span><span class="n">broken_line_spacing</span> <span class="o">=</span> <span class="kc">True</span>
</pre></div>
</div>
<p>Finally, the new text code may lead to artifacts when displaying slow
text, especially in conjunction with a negative line spacing. Consider
adjusting <a class="reference internal" href="style_properties.html#style-property-line_overlap_split"><code class="xref std std-propref docutils literal notranslate"><span class="pre">line_overlap_split</span></code></a> to fix this.</p>
</div>
<div class="section" id="incompatible-6-12-1">
<span id="id28"></span><h2>6.12.1<a class="headerlink" href="#incompatible-6-12-1" title="Permalink to this headline"> link</a></h2>
<p>Image names have changed from being static names to being
attribute-based. This can lead to image names that were previously
distinct becoming ambiguous. To disable attribute-based image names,
set <code class="xref std std-var docutils literal notranslate"><span class="pre">config.image_attributes</span></code> to False.</p>
<p>Showing an image without providing a transform or ATL block will now
continue the previous transform that the image was using. This means
that a moving image may continue moving once it has changed. To revert
to the old behavior, set <a class="reference internal" href="config.html#var-config.keep_running_transform"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.keep_running_transform</span></code></a> to False.</p>
<p>The <cite>image</cite> argument to <a class="reference internal" href="dialogue.html#Character" title="Character"><code class="xref py py-func docutils literal notranslate"><span class="pre">Character()</span></code></a> has changed meaning. While
the old meaning was unsupported in the screens-based environment, it
can be restored for compatibility purposes by setting
<code class="xref std std-var docutils literal notranslate"><span class="pre">config.new_character_image_argument</span></code> to False.</p>
</div>
<div class="section" id="incompatible-6-12-0">
<span id="id29"></span><h2>6.12.0<a class="headerlink" href="#incompatible-6-12-0" title="Permalink to this headline"> link</a></h2>
<p>The definition of the <cite>items</cite> parameter of the <a class="reference internal" href="screen_special.html#choice-screen"><span class="std std-ref">Choice</span></a> and
<code class="docutils literal notranslate"><span class="pre">nvl_choice</span></code> screens has changed. The <code class="docutils literal notranslate"><span class="pre">nvl_choice</span></code> screen is
deprecated in favor of the <a class="reference internal" href="screen_special.html#nvl-screen"><span class="std std-ref">NVL</span></a> screen.</p>
<p>Screens may be invoked at any time, in order to allow for image
prediction, unless they have a predict property of False. When the
predict property is not False, screens should not cause side effects
to occur upon their initial display.</p>
<p>For performance reason, Ren'Py now ignores the position properties of
ImageReferences. This means that the position properties of
style.image_placement are now ignored. To revert to the old behavior,
set <code class="xref std std-var docutils literal notranslate"><span class="pre">config.imagereference_respects_position</span></code> to True.</p>
</div>
<div class="section" id="incompatible-6-11-1">
<span id="id30"></span><h2>6.11.1<a class="headerlink" href="#incompatible-6-11-1" title="Permalink to this headline"> link</a></h2>
<p>MoveTransition has been modified to respect the xoffset and yoffset
parameters of the displayables it is moving. The factory functions
that are used for movement now take <cite>xoffset</cite> and <cite>yoffset</cite>
parameters. While the built-in movement factories take these
parameters without problem, user-defined factories may need to
be upgraded to use or ignore these additional parameters.</p>
</div>
<div class="section" id="incompatible-6-11-0">
<span id="id31"></span><h2>6.11.0<a class="headerlink" href="#incompatible-6-11-0" title="Permalink to this headline"> link</a></h2>
<ul>
<li><p class="first">The transform specified by the <a class="reference internal" href="config.html#var-config.default_transform"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.default_transform</span></code></a>
variable is used to initialize the transform properties of images
shown using the show and hide statements. The default value of this
transform sets <a class="reference internal" href="style_properties.html#style-property-xpos"><code class="xref std std-propref docutils literal notranslate"><span class="pre">xpos</span></code></a> and <a class="reference internal" href="style_properties.html#style-property-xanchor"><code class="xref std std-propref docutils literal notranslate"><span class="pre">xanchor</span></code></a> to 0.5, and
<a class="reference internal" href="style_properties.html#style-property-ypos"><code class="xref std std-propref docutils literal notranslate"><span class="pre">ypos</span></code></a> and <a class="reference internal" href="style_properties.html#style-property-yanchor"><code class="xref std std-propref docutils literal notranslate"><span class="pre">yanchor</span></code></a> to 1.0.</p>
<p>This represents a change in the default value of these style
properties, which were previously uninitialized and hence defaulted
to 0.</p>
<p>By including the <a class="reference internal" href="transforms.html#var-reset"><code class="xref std std-var docutils literal notranslate"><span class="pre">reset</span></code></a> transform in ATL transforms, these
properties can be reset back to 0. Alternatively, one can stop using
the default transform, and revert to the old behavior, using the
code:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">init</span> <span class="k">python</span><span class="p">:</span>
<span class="k">style</span><span class="o">.</span><span class="n">image_placement</span><span class="o">.</span><span class="na">xpos</span> <span class="o">=</span> <span class="mf">0.5</span>
<span class="k">style</span><span class="o">.</span><span class="n">image_placement</span><span class="o">.</span><span class="na">ypos</span> <span class="o">=</span> <span class="mf">1.0</span>
<span class="k">style</span><span class="o">.</span><span class="n">image_placement</span><span class="o">.</span><span class="na">xanchor</span> <span class="o">=</span> <span class="mf">0.5</span>
<span class="k">style</span><span class="o">.</span><span class="n">image_placement</span><span class="o">.</span><span class="na">yanchor</span> <span class="o">=</span> <span class="mf">1.0</span>
<span class="n">config</span><span class="o">.</span><span class="n">default_transform</span> <span class="o">=</span> <span class="kc">None</span>
</pre></div>
</div>
</li>
<li><p class="first">If a transform does not define one of the position properties
<a class="reference internal" href="style_properties.html#style-property-xpos"><code class="xref std std-propref docutils literal notranslate"><span class="pre">xpos</span></code></a>, <a class="reference internal" href="style_properties.html#style-property-ypos"><code class="xref std std-propref docutils literal notranslate"><span class="pre">ypos</span></code></a>, <a class="reference internal" href="style_properties.html#style-property-xanchor"><code class="xref std std-propref docutils literal notranslate"><span class="pre">xanchor</span></code></a>, or
<a class="reference internal" href="style_properties.html#style-property-yanchor"><code class="xref std std-propref docutils literal notranslate"><span class="pre">yanchor</span></code></a>, that property will be taken from the transform's
child, if the defines that property.</p>
<p>This makes it possible to have one transform control a displayable's
vertical motion, and the other control the horizontal. But this is
incompatible with previous behavior, and so can be disabled with the
<a class="reference internal" href="config.html#var-config.transform_uses_child_position"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.transform_uses_child_position</span></code></a> variable.</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">init</span> <span class="k">python</span><span class="p">:</span>
<span class="n">config</span><span class="o">.</span><span class="n">transform_uses_child_position</span> <span class="o">=</span> <span class="kc">False</span>
</pre></div>
</div>
</li>
</ul>
</div>
<div class="section" id="incompatible-6-10-1">
<span id="id32"></span><h2>6.10.0<a class="headerlink" href="#incompatible-6-10-1" title="Permalink to this headline"> link</a></h2>
<ul>
<li><p class="first">The default positions (left, right, center, truecenter,
offscreenleft, and offscreenright) are now defined as ATL
transforms. This means that showing an image at such a position will
cause the position to be remembered. If you do not want this
behavior, you need to redefine these positions, by adding the code:</p>
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">define</span> <span class="n">left</span> <span class="o">=</span> <span class="n">Position</span><span class="p">(</span><span class="na">xalign</span><span class="o">=</span><span class="mf">0.0</span><span class="p">)</span>
<span class="k">define</span> <span class="n">center</span> <span class="o">=</span> <span class="n">Position</span><span class="p">(</span><span class="na">xalign</span><span class="o">=</span><span class="mf">0.5</span><span class="p">)</span>
<span class="k">define</span> <span class="n">truecenter</span> <span class="o">=</span> <span class="n">Position</span><span class="p">(</span><span class="na">xalign</span><span class="o">=</span><span class="mf">0.5</span><span class="p">,</span> <span class="na">yalign</span><span class="o">=</span><span class="mf">0.5</span><span class="p">)</span>
<span class="k">define</span> <span class="n">right</span> <span class="o">=</span> <span class="n">Position</span><span class="p">(</span><span class="na">xalign</span><span class="o">=</span><span class="mf">1.0</span><span class="p">)</span>
<span class="k">define</span> <span class="n">offscreenleft</span> <span class="o">=</span> <span class="n">Position</span><span class="p">(</span><span class="na">xpos</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="na">xanchor</span><span class="o">=</span><span class="mf">1.0</span><span class="p">)</span>
<span class="k">define</span> <span class="n">offscreenright</span> <span class="o">=</span> <span class="n">Position</span><span class="p">(</span><span class="na">xpos</span><span class="o">=</span><span class="mf">1.0</span><span class="p">,</span> <span class="na">xanchor</span><span class="o">=</span><span class="mf">0.0</span><span class="p">)</span>
</pre></div>
</div>
</li>
</ul>
</div>
<div class="section" id="incompatible-6-9-2">
<span id="id33"></span><h2>6.9.2<a class="headerlink" href="#incompatible-6-9-2" title="Permalink to this headline"> link</a></h2>
<ul class="simple">
<li>To migrate your game from Ren'Py 6.9.2 or later, copy the directory
containing your game into your projects directory. You can choose a
projects directory by clicking &quot;Options&quot;, &quot;Projects Directory&quot; in the
Launcher. Please see the
<a class="reference external" href="http://www.renpy.org/wiki/renpy/releases/6.9.2">Ren'Py 6.9.2 release notes</a>
for information about migrating from older releases.</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<footer class="footer">
<div class="container">
<p class="pull-right">
<a href="#">Back to top</a>
</p>
<p>
&copy; Copyright 2012-2022, Tom Rothamel.<br/>
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.6.<br/>
</p>
</div>
</footer>
</body>
</html>