2962 lines
228 KiB
HTML
2962 lines
228 KiB
HTML
<!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>Changelog (Ren'Py 7.x-) — Ren'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="Changelog (Ren'Py 6.11 - 6.99)" href="changelog6.html" />
|
||
<link rel="prev" title="Translating Ren'Py" href="translating_renpy.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'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 & 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 current"><a class="current reference internal" href="#">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"><a class="reference internal" href="incompatible.html">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="#">Changelog (Ren'Py 7.x-)</a><ul>
|
||
<li><a class="reference internal" href="#renpy-8-0-3">8.0.3 / 7.5.3</a><ul>
|
||
<li><a class="reference internal" href="#security">Security</a></li>
|
||
<li><a class="reference internal" href="#modal-screen-pauses-and-timers">Modal Screen, Pauses, and Timers</a></li>
|
||
<li><a class="reference internal" href="#changes-and-fixes">Changes and Fixes</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#renpy-8-0-2">8.0.2 / 7.5.2</a><ul>
|
||
<li><a class="reference internal" href="#fixes">Fixes</a></li>
|
||
<li><a class="reference internal" href="#default-focus-changes">Default Focus Changes</a></li>
|
||
<li><a class="reference internal" href="#other-improvements">Other Improvements</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#renpy-8-0-1">8.0.1 / 7.5.1</a><ul>
|
||
<li><a class="reference internal" href="#improvements">Improvements</a></li>
|
||
<li><a class="reference internal" href="#id4">Fixes</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#renpy-8-0-0">8.0 / 7.5</a><ul>
|
||
<li><a class="reference internal" href="#python-3-support-ren-py-8-0">Python 3 Support (Ren'Py 8.0)</a></li>
|
||
<li><a class="reference internal" href="#continued-python-2-7-support-ren-py-7-5">Continued Python 2.7 Support (Ren'Py 7.5)</a></li>
|
||
<li><a class="reference internal" href="#platform-support-changes">Platform Support Changes</a></li>
|
||
<li><a class="reference internal" href="#web-and-chromeos">Web and ChromeOS</a></li>
|
||
<li><a class="reference internal" href="#android-and-ios">Android and iOS</a></li>
|
||
<li><a class="reference internal" href="#steam-steam-deck-and-epic-games-store">Steam, Steam Deck, and Epic Games Store</a></li>
|
||
<li><a class="reference internal" href="#visual-studio-code">Visual Studio Code</a></li>
|
||
<li><a class="reference internal" href="#dismiss-nearrect-and-focus-rectangles">Dismiss, Nearrect, and Focus Rectangles</a></li>
|
||
<li><a class="reference internal" href="#atl-and-transforms">ATL and Transforms</a></li>
|
||
<li><a class="reference internal" href="#image-gallery">Image Gallery</a></li>
|
||
<li><a class="reference internal" href="#boxes-grids-and-vpgrids">Boxes, Grids and Vpgrids</a></li>
|
||
<li><a class="reference internal" href="#call-screen-and-roll-forward">Call Screen and Roll Forward</a></li>
|
||
<li><a class="reference internal" href="#new-features">New Features</a></li>
|
||
<li><a class="reference internal" href="#other-changes">Other Changes</a></li>
|
||
<li><a class="reference internal" href="#versioning">Versioning</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#renpy-7-4-11">7.4.11</a><ul>
|
||
<li><a class="reference internal" href="#the-gui-variant-decorator">The gui.variant Decorator</a></li>
|
||
<li><a class="reference internal" href="#id7">Fixes</a></li>
|
||
<li><a class="reference internal" href="#translations">Translations</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#renpy-7-4-10">7.4.10</a><ul>
|
||
<li><a class="reference internal" href="#id9">Fixes</a></li>
|
||
<li><a class="reference internal" href="#id10">Translations</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#renpy-7-4-9">7.4.9</a><ul>
|
||
<li><a class="reference internal" href="#android">Android</a></li>
|
||
<li><a class="reference internal" href="#ios">iOS</a></li>
|
||
<li><a class="reference internal" href="#updater">Updater</a></li>
|
||
<li><a class="reference internal" href="#camera-perspective-improvements">Camera/Perspective Improvements</a></li>
|
||
<li><a class="reference internal" href="#accessibility">Accessibility</a></li>
|
||
<li><a class="reference internal" href="#transform-properties">Transform Properties</a></li>
|
||
<li><a class="reference internal" href="#other">Other</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#renpy-7-4-8">7.4.8</a><ul>
|
||
<li><a class="reference internal" href="#id13">Fixes</a></li>
|
||
<li><a class="reference internal" href="#features">Features</a></li>
|
||
<li><a class="reference internal" href="#changes">Changes</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#renpy-7-4-7">7.4.7</a><ul>
|
||
<li><a class="reference internal" href="#web-and-web-audio">Web and Web Audio</a></li>
|
||
<li><a class="reference internal" href="#id15">iOS</a></li>
|
||
<li><a class="reference internal" href="#input">Input</a></li>
|
||
<li><a class="reference internal" href="#id16">Other</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#renpy-7-4-6">7.4.6</a><ul>
|
||
<li><a class="reference internal" href="#camera-statement">Camera Statement</a></li>
|
||
<li><a class="reference internal" href="#model-displayable">Model Displayable</a></li>
|
||
<li><a class="reference internal" href="#id18">Other Improvements</a></li>
|
||
<li><a class="reference internal" href="#id19">Fixes</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#renpy-7-4-5">7.4.5</a><ul>
|
||
<li><a class="reference internal" href="#model-based-renderer">Model-Based Renderer</a></li>
|
||
<li><a class="reference internal" href="#mouse">Mouse</a></li>
|
||
<li><a class="reference internal" href="#id21">Features</a></li>
|
||
<li><a class="reference internal" href="#id22">Android</a></li>
|
||
<li><a class="reference internal" href="#other-platforms">Other Platforms</a></li>
|
||
<li><a class="reference internal" href="#other-fixes">Other Fixes</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#renpy-7-4-4">7.4.4</a><ul>
|
||
<li><a class="reference internal" href="#the-old-game-directory">The old-game directory</a></li>
|
||
<li><a class="reference internal" href="#id24">Fixes</a></li>
|
||
<li><a class="reference internal" href="#id25">Other</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#renpy-7-4-3">7.4.3</a><ul>
|
||
<li><a class="reference internal" href="#windows">Windows</a></li>
|
||
<li><a class="reference internal" href="#id27">Android</a></li>
|
||
<li><a class="reference internal" href="#id28">Features</a></li>
|
||
<li><a class="reference internal" href="#old-features">Old Features</a></li>
|
||
<li><a class="reference internal" href="#id29">Other Fixes</a></li>
|
||
<li><a class="reference internal" href="#id30">Translations</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#renpy-7-4-2">7.4.2</a><ul>
|
||
<li><a class="reference internal" href="#fixes-and-changes">Fixes and Changes</a></li>
|
||
<li><a class="reference internal" href="#id32">Android</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#renpy-7-4-1">7.4.1</a><ul>
|
||
<li><a class="reference internal" href="#pause-statement-changes">Pause Statement Changes</a></li>
|
||
<li><a class="reference internal" href="#say-statement-id-clause">Say Statement Id Clause</a></li>
|
||
<li><a class="reference internal" href="#live2d">Live2D</a></li>
|
||
<li><a class="reference internal" href="#controller-blocklist">Controller Blocklist</a></li>
|
||
<li><a class="reference internal" href="#macos">macOS</a></li>
|
||
<li><a class="reference internal" href="#id34">Android</a></li>
|
||
<li><a class="reference internal" href="#id35">Translations</a></li>
|
||
<li><a class="reference internal" href="#id36">Other Fixes</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#renpy-7-4">7.4.0</a><ul>
|
||
<li><a class="reference internal" href="#id38">Model-Based Renderer</a></li>
|
||
<li><a class="reference internal" href="#id39">Live2D</a></li>
|
||
<li><a class="reference internal" href="#matrixcolor-and-blur">Matrixcolor and Blur</a></li>
|
||
<li><a class="reference internal" href="#python-2-python-3-compatibility-mode">Python 2/Python 3 Compatibility Mode</a></li>
|
||
<li><a class="reference internal" href="#upgraded-libraries-and-platform-support">Upgraded Libraries and Platform Support</a></li>
|
||
<li><a class="reference internal" href="#web">Web</a></li>
|
||
<li><a class="reference internal" href="#steam">Steam</a></li>
|
||
<li><a class="reference internal" href="#id40">Translations</a></li>
|
||
<li><a class="reference internal" href="#depreciations-and-removals">Depreciations and Removals</a></li>
|
||
<li><a class="reference internal" href="#miscellaneous">Miscellaneous</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#renpy-7-3-5">7.3.5</a><ul>
|
||
<li><a class="reference internal" href="#id42">Fixes</a></li>
|
||
<li><a class="reference internal" href="#id43">Other Changes</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#renpy-7-3-4">7.3.4</a><ul>
|
||
<li><a class="reference internal" href="#id45">Fixes</a></li>
|
||
<li><a class="reference internal" href="#id46">Other Changes</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#renpy-7-3-3">7.3.3</a><ul>
|
||
<li><a class="reference internal" href="#audio">Audio</a></li>
|
||
<li><a class="reference internal" href="#platforms">Platforms</a></li>
|
||
<li><a class="reference internal" href="#id48">Other Changes</a></li>
|
||
<li><a class="reference internal" href="#id49">Translations</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#renpy-7-3-2">7.3.2</a><ul>
|
||
<li><a class="reference internal" href="#id51">Fixes</a></li>
|
||
<li><a class="reference internal" href="#id52">Translations</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#renpy-7-3-1">7.3.1</a><ul>
|
||
<li><a class="reference internal" href="#id54">Changes</a></li>
|
||
<li><a class="reference internal" href="#id55">Fixes</a></li>
|
||
<li><a class="reference internal" href="#id56">Translations</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#renpy-7-3-0">7.3.0</a><ul>
|
||
<li><a class="reference internal" href="#renpyweb">Renpyweb</a></li>
|
||
<li><a class="reference internal" href="#creator-defined-statements">Creator-Defined Statements</a></li>
|
||
<li><a class="reference internal" href="#screen-language-improvements">Screen Language Improvements</a></li>
|
||
<li><a class="reference internal" href="#text-improvements">Text Improvements</a></li>
|
||
<li><a class="reference internal" href="#android-and-ios-improvements">Android and iOS Improvements</a></li>
|
||
<li><a class="reference internal" href="#id58">Translations</a></li>
|
||
<li><a class="reference internal" href="#id59">Other Improvements</a></li>
|
||
<li><a class="reference internal" href="#id60">Fixes</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#renpy-7-2-2">7.2.2</a></li>
|
||
<li><a class="reference internal" href="#renpy-7-2-1">7.2.1</a><ul>
|
||
<li><a class="reference internal" href="#ios-improvements">iOS Improvements</a></li>
|
||
<li><a class="reference internal" href="#id63">Other Improvements</a></li>
|
||
<li><a class="reference internal" href="#id64">Fixes</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#renpy-7-1-4">7.2.0</a><ul>
|
||
<li><a class="reference internal" href="#menu-arguments">Menu Arguments</a></li>
|
||
<li><a class="reference internal" href="#temporary-say-attributes">Temporary Say Attributes</a></li>
|
||
<li><a class="reference internal" href="#text">Text</a></li>
|
||
<li><a class="reference internal" href="#statements">Statements</a></li>
|
||
<li><a class="reference internal" href="#id66">Changes</a></li>
|
||
<li><a class="reference internal" href="#android-changes">Android Changes</a></li>
|
||
<li><a class="reference internal" href="#id67">Fixes</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#renpy-7-1-3">7.1.3</a></li>
|
||
<li><a class="reference internal" href="#renpy-7-1-2">7.1.2</a><ul>
|
||
<li><a class="reference internal" href="#id70">Improvements</a></li>
|
||
<li><a class="reference internal" href="#id71">Translations</a></li>
|
||
<li><a class="reference internal" href="#id72">Fixes</a></li>
|
||
<li><a class="reference internal" href="#android-fixes">Android Fixes</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#renpy-7-1-1">7.1.1</a><ul>
|
||
<li><a class="reference internal" href="#history-fix">History Fix</a></li>
|
||
<li><a class="reference internal" href="#android-improvements">Android Improvements</a></li>
|
||
<li><a class="reference internal" href="#id74">Other Improvements</a></li>
|
||
<li><a class="reference internal" href="#id75">Fixes</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#renpy-7-1">7.1</a><ul>
|
||
<li><a class="reference internal" href="#id77">Android</a></li>
|
||
<li><a class="reference internal" href="#monologue-mode">Monologue Mode</a></li>
|
||
<li><a class="reference internal" href="#say-with-attribute-change">Say-With-Attribute Change</a></li>
|
||
<li><a class="reference internal" href="#updater-changes">Updater Changes</a></li>
|
||
<li><a class="reference internal" href="#id78">Translations</a></li>
|
||
<li><a class="reference internal" href="#id79">Other</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#renpy-7-0">7.0</a><ul>
|
||
<li><a class="reference internal" href="#layered-images">Layered Images</a></li>
|
||
<li><a class="reference internal" href="#dict-transitions">Dict Transitions</a></li>
|
||
<li><a class="reference internal" href="#id81">Changes</a></li>
|
||
<li><a class="reference internal" href="#id82">Translations</a></li>
|
||
<li><a class="reference internal" href="#id83">Fixes</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a class="reference internal" href="#older-changelogs">Older Changelogs</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
|
||
</div>
|
||
</div>
|
||
<div class="col-md-9 content">
|
||
|
||
<div class="section" id="changelog-ren-py-7-x">
|
||
<h1>Changelog (Ren'Py 7.x-)<a class="headerlink" href="#changelog-ren-py-7-x" title="Permalink to this headline"> link</a></h1>
|
||
<div class="section" id="renpy-8-0-3">
|
||
<span id="renpy-7-5-3"></span><span id="id1"></span><h2>8.0.3 / 7.5.3<a class="headerlink" href="#renpy-8-0-3" title="Permalink to this headline"> link</a></h2>
|
||
<div class="section" id="security">
|
||
<h3>Security<a class="headerlink" href="#security" title="Permalink to this headline"> link</a></h3>
|
||
<p>There is now a new <a class="reference internal" href="security.html"><span class="doc">Security</span></a> page in the documentation, intended to help
|
||
players understand the security implications of mods and sharing save files.</p>
|
||
</div>
|
||
<div class="section" id="modal-screen-pauses-and-timers">
|
||
<h3>Modal Screen, Pauses, and Timers<a class="headerlink" href="#modal-screen-pauses-and-timers" title="Permalink to this headline"> link</a></h3>
|
||
<p>Based on feedback from creators, the changes to how modal screens interact
|
||
with pauses and timers have been redone. As of this version, pauses will
|
||
not end when a modal screen is shown, while timers will trigger while
|
||
a modal screen is shown above the timer.</p>
|
||
<p>There are some cases where this behavior may not be wanted. To deal with
|
||
those cases, the <a class="reference internal" href="screens.html#sl-timer"><span class="std std-ref">timer displayable</span></a> and <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>
|
||
have a new <cite>modal</cite> property/parameter. If <cite>modal</cite> is True, pauses will
|
||
end and timers will respect the modal screen, and will not trigger until
|
||
the screen disappears. If false, the modal screen will not be respected,
|
||
causing pauses to end and timers to trigger while the modal screen is
|
||
still displayed.</p>
|
||
</div>
|
||
<div class="section" id="changes-and-fixes">
|
||
<h3>Changes and Fixes<a class="headerlink" href="#changes-and-fixes" title="Permalink to this headline"> link</a></h3>
|
||
<p>Ren'Py has been updated to target Android API level 33, corresponding to Android 13,
|
||
allowing new games to be added to the Google Play store. The Play Billing library
|
||
has been updated to version 5.</p>
|
||
<p>Init statements inside a module loaded with <a class="reference internal" href="other.html#renpy.load_module" title="renpy.load_module"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.load_module()</span></code></a> are now
|
||
run in init-priority order.</p>
|
||
<p>Lint now respects <a class="reference internal" href="config.html#var-config.adjust_attributes"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.adjust_attributes</span></code></a>.</p>
|
||
<p>A case where blurs could become transparent has been addressed.</p>
|
||
<p>When the translation language changes during a menu that is using dialogue as a
|
||
caption, Ren'Py will jump the game back to the start of the say statement that
|
||
added that dialogue, allowing it to be re-translated.</p>
|
||
<p>When a game is being developed, Ren'Py will now produce an error if the first
|
||
use of <a class="reference internal" href="gui_advanced.html#gui.preference" title="gui.preference"><code class="xref py py-func docutils literal notranslate"><span class="pre">gui.preference()</span></code></a> has not been given a default. This makes an error
|
||
that could happen at runtime in that case more explicit.</p>
|
||
<p>There have been many documentation improvements.</p>
|
||
<p>This release fixes a problem with Matrix equality that could prevent
|
||
transform properties that use Matrixes from being animated correctly.</p>
|
||
<p>Ren'Py now properly analyzes variables that are bound by lambdas.</p>
|
||
<p>The Tutorial and The Question have been translated into Ukrainian, and the
|
||
Ukrainian translation of the launcher has been updated.</p>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="renpy-8-0-2">
|
||
<span id="renpy-7-5-2"></span><span id="id2"></span><h2>8.0.2 / 7.5.2<a class="headerlink" href="#renpy-8-0-2" title="Permalink to this headline"> link</a></h2>
|
||
<div class="section" id="fixes">
|
||
<h3>Fixes<a class="headerlink" href="#fixes" title="Permalink to this headline"> link</a></h3>
|
||
<p>There have been a number of changes to the way autoreload (shift+R) works, to
|
||
try to prevent Ren'Py from creating an invalid save file when an autoreload after
|
||
an error happens, and Ren'Py is in an invalid state. The goal of these changes
|
||
is to preserve the save file from before the change, and reuse that.</p>
|
||
<p>Ren'Py is now able to perform audio fadeins and fadeouts of less than 0.68
|
||
seconds. Previously such short fadeins and fadeouts would be result in an
|
||
underflow and no fading. In this release, the precise duration of a fadein
|
||
and fadeout is not strictly guaranteed.</p>
|
||
<p>Several functions in achievement.steam (or _renpysteam) had regressions when
|
||
reimplmented in terms of achievement.steamapi. These regressions have been
|
||
fixed.</p>
|
||
<p>An issue that prevented built distributions from launching on aarch64 has
|
||
been fixed.</p>
|
||
<p>An issue that could cause excessive CPU and memory usage when a store had
|
||
large number of variables in it has been fixed.</p>
|
||
<p>Loading a save slot that was saved with a different language than is currently set will no
|
||
longer prevent <a class="reference internal" href="config.html#var-config.after_load_transition"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.after_load_transition</span></code></a> from occurring.</p>
|
||
<p>Several problems that preventing In-App Purchases (IAP) from working on Ren'Py
|
||
8 have been fixed.</p>
|
||
<p>An issue with examples in the tutorial game not working in a non-English languages
|
||
has been fixed.</p>
|
||
<p>Tinydialogs is now included in the source code distribution of Ren'Py.</p>
|
||
</div>
|
||
<div class="section" id="default-focus-changes">
|
||
<h3>Default Focus Changes<a class="headerlink" href="#default-focus-changes" title="Permalink to this headline"> link</a></h3>
|
||
<p>There have been several changes to the <cite>default_focus</cite> property of focusable
|
||
displayables like buttons and bars. This property allows Ren'Py to select a
|
||
displayable to gain default focus when displayables are added to removed.</p>
|
||
<p>The new rules are:</p>
|
||
<ul class="simple">
|
||
<li>When the mouse is used, focus follows the mouse and <cite>default_focus</cite> is ignored.</li>
|
||
<li>When a displayable with a higher <cite>default_focus</cite> than any other displayable
|
||
is shown, it is given focus.</li>
|
||
<li>When the displayable with the highest <cite>default_focus</cite> is hidden, the displayable
|
||
with the next highest non-zero <cite>default_focus</cite> is given focus.</li>
|
||
</ul>
|
||
<p>The goal is to support common keyboard and controller navigation patterns,
|
||
while not getting in the way of mouse users.</p>
|
||
</div>
|
||
<div class="section" id="other-improvements">
|
||
<h3>Other Improvements<a class="headerlink" href="#other-improvements" title="Permalink to this headline"> link</a></h3>
|
||
<p>There have been many copyedits and other improvements to Ren'Py's documentation.</p>
|
||
<p>The console has been improved to display more Python 3 types.</p>
|
||
<p><a class="reference internal" href="mouse.html#MouseDisplayable" title="MouseDisplayable"><code class="xref py py-func docutils literal notranslate"><span class="pre">MouseDisplayable()</span></code></a> now respects <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>, if set.</p>
|
||
<p>In Ren'Py 8, Python blocks are now compiled as if the <code class="docutils literal notranslate"><span class="pre">from</span> <span class="pre">__future__</span> <span class="pre">import</span> <span class="pre">annotations</span></code>
|
||
statement was present.</p>
|
||
<p>A modal screen or dismiss statement 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>
|
||
from ending. Previously, what happened in this case was undefined and varied between
|
||
versions.</p>
|
||
<p>On macOS, Ren'Py will now properly adjust when the game window is moved between
|
||
displays with different scaling.</p>
|
||
<p>Command-C and Command-V now work for copy and paste on macOS.</p>
|
||
<p>The default input screen in screens.rpy has now been changed to prevent a
|
||
conflict between the <a class="reference internal" href="style_properties.html#style-property-xalign"><code class="xref std std-propref docutils literal notranslate"><span class="pre">xalign</span></code></a> and <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> of the vbox.
|
||
The fix was to change the use of xalign to <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>.</p>
|
||
<p>Ren'Py will now start if a sound card is not present, even in developer mode.
|
||
Errors with audio hardware are now written to log.txt.</p>
|
||
<p>The Japanese translation has been updated.</p>
|
||
<p>New games created with Ren'Py no longer filter out ruby/furigana text tags.</p>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="renpy-8-0-1">
|
||
<span id="renpy-7-5-1"></span><span id="id3"></span><h2>8.0.1 / 7.5.1<a class="headerlink" href="#renpy-8-0-1" title="Permalink to this headline"> link</a></h2>
|
||
<div class="section" id="improvements">
|
||
<h3>Improvements<a class="headerlink" href="#improvements" title="Permalink to this headline"> link</a></h3>
|
||
<p>The launcher now has a Ukrainian translation, courtesy of Matias B.</p>
|
||
<p>The web port will now reuse audio data when an audio file loops, reducing
|
||
the memory usage.</p>
|
||
<p>ATL transforms used inside a <a class="reference internal" href="mouse.html#MouseDisplayable" title="MouseDisplayable"><code class="xref py py-func docutils literal notranslate"><span class="pre">MouseDisplayable()</span></code></a> are now reset each
|
||
time the mouse is changed. Previously, this behavior was undefined.</p>
|
||
<p>The trace screen used by the console is now updated once per frame.</p>
|
||
<p>There have been a large number of documentation improvements.</p>
|
||
</div>
|
||
<div class="section" id="id4">
|
||
<h3>Fixes<a class="headerlink" href="#id4" title="Permalink to this headline"> link</a></h3>
|
||
<p>Alt text is now played in first-to-last order. A change to 8.0 caused
|
||
the order alt text was played in to be reversed.</p>
|
||
<p>A rounding error that would cause the CropMove transitions to work
|
||
incorrectly was fixed.</p>
|
||
<p>An issue preventing the zoomin and zoomout transitions from working
|
||
was fixed.</p>
|
||
<p>The Movie displayable can once again take a list of movie files to
|
||
play, rather than only a single filename.</p>
|
||
<p>An issue with building on Android has been fixed.</p>
|
||
<p>Object identity is used to compared the arguments of <a class="reference internal" href="screen_actions.html#Function" title="Function"><code class="xref py py-func docutils literal notranslate"><span class="pre">Function()</span></code></a>
|
||
actions. This prevents an issue where an action could be incorrectly
|
||
reused if the action's arguments where equal, but not the same (for
|
||
example, two empty lists).</p>
|
||
<p>Problems with getting and setting Steam statistics have been fixed.</p>
|
||
<p>The <a class="reference internal" href="screens.html#sl-dismiss"><span class="std std-ref">dismiss</span></a> is now correctly modal.</p>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="renpy-8-0-0">
|
||
<span id="renpy-7-5-0"></span><span id="id5"></span><h2>8.0 / 7.5<a class="headerlink" href="#renpy-8-0-0" title="Permalink to this headline"> link</a></h2>
|
||
<div class="section" id="python-3-support-ren-py-8-0">
|
||
<h3>Python 3 Support (Ren'Py 8.0)<a class="headerlink" href="#python-3-support-ren-py-8-0" title="Permalink to this headline"> link</a></h3>
|
||
<p>Ren'Py 8.0 runs under Python 3, the latest major version of the Python
|
||
language.</p>
|
||
<p>If your game uses minimal Python (for example, just storing character
|
||
names and flags), it should work the same as it did before. Otherwise,
|
||
please read on.</p>
|
||
<p>The move to Python 3 makes over a decade of Python language and
|
||
library improvements available to the Ren'Py developer, as described
|
||
in the <a class="reference external" href="https://docs.python.org/3.9/whatsnew/index.html">What's new in Python</a>
|
||
documentation. There are far too many changes in Python 3 to include here,
|
||
so please check that and other Python websites for descriptions.</p>
|
||
<p>That being said, a few things made available to the Python in your Ren'Py
|
||
games are:</p>
|
||
<ul class="simple">
|
||
<li>Functions can have keyword-only parameters. (These are also supported
|
||
in parameter lists for labels, transforms, and screens.)</li>
|
||
<li>The ability to annotate functions arguments and return values with type
|
||
information. (This is only supported in Python.)</li>
|
||
<li>Formatted string literals can now be used. These
|
||
are strings like <code class="docutils literal notranslate"><span class="pre">f"characters/{character}.chr"</span></code>, where the text in
|
||
braces is replaced by a formatted Python variable, similarly to the
|
||
way that interpolation works in Ren'Py dialogue. This is only available
|
||
in Python, however, and not in most purely Ren'Py statements.</li>
|
||
</ul>
|
||
<p>There are a huge number of other improvements in the ten major releases of
|
||
Python between 2.7 and 3.9, so be sure to read the above and other Python
|
||
documentation to find out everything that's improved.</p>
|
||
<p>One of the greatest advantages is that this moves Ren'Py off Python 2.7,
|
||
which is no longer supported by the Python Software Foundation, and so
|
||
the move to Ren'Py 8.0 helps secure Ren'Py's future.</p>
|
||
<p>There are a few things that may need to be converted if you used advanced
|
||
Python.</p>
|
||
<ul class="simple">
|
||
<li>In Python 3, division always returns a float, rather than an integer.
|
||
(for example, <code class="docutils literal notranslate"><span class="pre">3</span> <span class="pre">/</span> <span class="pre">2</span></code> is now 1.5 rather than 1). The <code class="docutils literal notranslate"><span class="pre">//</span></code> operator
|
||
divides as an integer. This change can affect Ren'Py positioning,
|
||
where floats are treated differently from integers.</li>
|
||
<li>In Python 3, the keys, items, and values methods of dictionaries now
|
||
return views, not lists. The iterkeys, iteritems, and itervalues
|
||
methods are not supported. The xrange method is gone, and range
|
||
no longer returns a list.</li>
|
||
<li>Except clauses now must be written like <code class="docutils literal notranslate"><span class="pre">except</span> <span class="pre">Exception</span> <span class="pre">as</span> <span class="pre">e:</span></code>,
|
||
as the old syntax, <code class="docutils literal notranslate"><span class="pre">except</span> <span class="pre">Exception,</span> <span class="pre">e:</span></code> is not supported.</li>
|
||
<li>All strings are now unicode by default (Ren'Py has been forcing this
|
||
for several years), and files are opened in text mode by default.
|
||
(However, <a class="reference internal" href="file_python.html#renpy.file" title="renpy.file"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.file()</span></code></a> opens files in binary mode. It's been
|
||
renamed to <a class="reference internal" href="file_python.html#renpy.open_file" title="renpy.open_file"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.open_file()</span></code></a> and can take a default encoding.)</li>
|
||
<li>Many Python modules have been renamed.</li>
|
||
</ul>
|
||
<p>This is not an exhaustive list.</p>
|
||
<p>Ren'Py ships with a cut-down version of the Python Standard library, so
|
||
not every Python module is available in Ren'Py. Please let us know if there
|
||
is something missing you have a good use for, especially if that module
|
||
does not require a library dependency. While <code class="docutils literal notranslate"><span class="pre">async</span></code> and <code class="docutils literal notranslate"><span class="pre">await</span></code>
|
||
are available, Ren'Py doesn't directly support coroutines.</p>
|
||
<p>Ren'Py 8.0 ships with Python 3.9.10, and is available on the Windows,
|
||
macOS, Linux, Android, and iOS platforms. The web platform will
|
||
be supported in a future release.</p>
|
||
<p>When running under Ren'Py 8, Ren'Py now runs without the equivalent of the
|
||
Python <code class="docutils literal notranslate"><span class="pre">-O</span></code> flag. This means that docstrings and assert statements are
|
||
available.</p>
|
||
<p>Our experience is that many games run unchanged under Python 3, especially
|
||
games that use Python primarily through the Ren'Py API, to manage
|
||
game state. Ren'Py 8 has been used to run unmodified Ren'Py games
|
||
going back to the year 2006.</p>
|
||
</div>
|
||
<div class="section" id="continued-python-2-7-support-ren-py-7-5">
|
||
<h3>Continued Python 2.7 Support (Ren'Py 7.5)<a class="headerlink" href="#continued-python-2-7-support-ren-py-7-5" title="Permalink to this headline"> link</a></h3>
|
||
<p>Ren'Py 7.5 is being released at the same time as Ren'Py 8.0, to continue
|
||
to provide a version of Ren'Py that runs on Python 2.7, as a way of
|
||
supporting games in development (or being maintained after release)
|
||
that still require Python 2.7.</p>
|
||
<p>In this release, Ren'Py 7.5 also supports the web platform, which
|
||
Ren'Py 8.0 does not yet support.</p>
|
||
<p>For this release, Ren'Py 7.5 and Ren'Py 8.0 should support the same
|
||
set of of features.</p>
|
||
<p>We plan to continue to support Ren'Py 7.x until we see that the community
|
||
has moved to Ren'Py 8.x, or until changes to the Python ecosystem mean
|
||
that supporting Ren'Py on Python 2 is no longer tenable.</p>
|
||
<p>Please test your games on Ren'Py 8 - for many games, few to no changes
|
||
will be needed. If for some reason you can't port your game to Ren'Py
|
||
8, please let us know what is holding you back.</p>
|
||
</div>
|
||
<div class="section" id="platform-support-changes">
|
||
<h3>Platform Support Changes<a class="headerlink" href="#platform-support-changes" title="Permalink to this headline"> link</a></h3>
|
||
<p>This release adds support for the 64-bit ARM Linux (linux-aarch64)
|
||
platform. While based on Ubuntu 20.04, this has been tested on Chromebooks,
|
||
and should also work on the 64-bit ARM platform.</p>
|
||
<p>The intended way to run Ren'Py games on ARM Linux would be to download
|
||
the new ARM Linux SDK package, place the game in the projects directory,
|
||
and use that to launch the game. If the files from the ARM Linux SDK are
|
||
present when a Linux distribution is made, they will be included, creating
|
||
a game that can be launched on ARM, but this is not the default, for
|
||
size reasons.</p>
|
||
<p>With the move to Ren'Py 8, we are removing support for the
|
||
following platforms:</p>
|
||
<ul class="simple">
|
||
<li>32-bit x86 Windows (i686)</li>
|
||
<li>32-bit x86 Linux (i686)</li>
|
||
</ul>
|
||
<p>This reflects the obsolescence of 32-bit x86 computing. These platforms remain
|
||
supported by Ren'Py 7.5, but will not be supported by Ren'Py 8.</p>
|
||
</div>
|
||
<div class="section" id="web-and-chromeos">
|
||
<h3>Web and ChromeOS<a class="headerlink" href="#web-and-chromeos" title="Permalink to this headline"> link</a></h3>
|
||
<p>The web platform is currently only supported on Ren'Py 7.5.</p>
|
||
<p>Changes to the Safari and Chrome web browsers increased the memory Ren'Py
|
||
used by about 50 times, causing RangeErrors when the web browser ran out
|
||
of stack memory. Ren'Py 7.5 includes changes to reduces the amount of
|
||
memory used inside web browsers. As a result, Ren'Py now runs again
|
||
inside Chrome and Safari, including on iOS devices.</p>
|
||
<p>The new <a class="reference internal" href="config.html#var-config.webaudio_required_types"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.webaudio_required_types</span></code></a> variable can be given a list of
|
||
mime types of audio files used by the game. Ren'Py will only use the web
|
||
browser's Web Audio system for playback if all of the mime types are supported
|
||
in the browser. If not, webasm is used for playback, which is more likely to
|
||
cause skipping if the computer is slow.</p>
|
||
<p>The config.webaudio_required_types variable is intended to allow games using ogg
|
||
or opus audio to run on Safari, and can be changed if a game only uses mp3 audio.</p>
|
||
<p>When importing save files into a web distribution, Ren'Py will now refresh
|
||
the list of save files without a restart.</p>
|
||
<p>When running as an Android application on a ChromeOS device, the "chromeos"
|
||
variant will be selected.</p>
|
||
<p>The Ren'Py SDK can be run on ARM Chromebooks.</p>
|
||
</div>
|
||
<div class="section" id="android-and-ios">
|
||
<h3>Android and iOS<a class="headerlink" href="#android-and-ios" title="Permalink to this headline"> link</a></h3>
|
||
<p>The Android configuration once again prompts as to which store to use
|
||
for in app purchases. When no store is selected, libraries to support
|
||
purchasing are not included in the project. These libraries would include
|
||
the billing permission, which would flag the game as supporting in-app
|
||
purchases even if no purchases were used.</p>
|
||
<p>Due to issues in underlying libraries, the <a class="reference internal" href="input.html#renpy.input" title="renpy.input"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.input()</span></code></a> function
|
||
and <code class="docutils literal notranslate"><span class="pre">input</span></code> displayable are now documented as not supporting IME-based
|
||
(non-alphabetic) input on Android.</p>
|
||
<p>On iOS, OpenGL ES calls are translated to the native Metal graphics system.
|
||
Doing this should improve compatibility with recent Apple devices, and
|
||
fixes problems running applications under the iOS simulator on Apple
|
||
Silicon-based devices.</p>
|
||
</div>
|
||
<div class="section" id="steam-steam-deck-and-epic-games-store">
|
||
<h3>Steam, Steam Deck, and Epic Games Store<a class="headerlink" href="#steam-steam-deck-and-epic-games-store" title="Permalink to this headline"> link</a></h3>
|
||
<p>This release includes rewritten Steam support, provided by a new
|
||
ctypes-based binding that gives access to the entire Steamworks API,
|
||
including callbacks. While the Steam support available through the
|
||
<a class="reference internal" href="achievement.html"><span class="doc">achievement module</span></a> remains unchanged, this
|
||
gives advanced Python programmers access to more Steam functionality.</p>
|
||
<p>When Steam is active, Ren'Py will now enable the "steam" variant.</p>
|
||
<p>This release includes built-in support for the Steam Deck hardware.
|
||
The support includes the ability to automatically display the
|
||
on-screen keyboard when <a class="reference internal" href="input.html#renpy.input" title="renpy.input"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.input()</span></code></a> is called.
|
||
The steam deck also causes Ren'Py to enable the "steam_deck",
|
||
"steam", "medium", and "touch" variants.</p>
|
||
<p>We have a <a class="reference external" href="https://github.com/renpy/steam-deck-guide">Ren'Py on Steam Deck Guide</a>
|
||
to help you get your game certified on that platform. Thanks go to Valve for
|
||
supplying a Steam Deck to test on.</p>
|
||
<p>The "Windows, Mac, and Linux for Markets" distribution has been changed to
|
||
no longer prefix the contents of the zip file created with the directory
|
||
name and version number, meaning it's no longer required to update launch
|
||
configurations with each release to Steam. This may require a one-time
|
||
update to the launch configuration.</p>
|
||
<p>Ren'Py now includes support for being launched by the Epic Games Store,
|
||
by ignoring various command line arguments supplied by EGS.</p>
|
||
</div>
|
||
<div class="section" id="visual-studio-code">
|
||
<h3>Visual Studio Code<a class="headerlink" href="#visual-studio-code" title="Permalink to this headline"> link</a></h3>
|
||
<p>Ren'Py now includes support for downloading and using Visual Studio Code,
|
||
including downloading the <a class="reference external" href="https://marketplace.visualstudio.com/items?itemName=LuqueDaniel.languague-renpy">Ren'Py Language</a>
|
||
extension.</p>
|
||
<p>The Ren'Py Language extension provides rich support for Ren'Py, including
|
||
syntax highlighting, snippets, completion, color previews, documentation,
|
||
go to definition, function signatures, error diagnostics, outlining,
|
||
and more.</p>
|
||
<p>Visual Studio Code also has a large system of extensions, including
|
||
spell-checkers, that can be used with with the Ren'Py Language extension.</p>
|
||
<p>Visual Studio Code can be activated by going to the editor preferences
|
||
and choosing to download it. It's also possible to configure Ren'Py
|
||
to use a system install of Ren'Py with extensions that you choose.</p>
|
||
</div>
|
||
<div class="section" id="dismiss-nearrect-and-focus-rectangles">
|
||
<h3>Dismiss, Nearrect, and Focus Rectangles<a class="headerlink" href="#dismiss-nearrect-and-focus-rectangles" title="Permalink to this headline"> link</a></h3>
|
||
<p>Two new displayables have been added to Ren'Py to help use cases like
|
||
drop-down menus, pulldown menus, and tooltips.</p>
|
||
<p>The <a class="reference internal" href="screens.html#sl-dismiss"><span class="std std-ref">dismiss</span></a> displayable is generally used behind a
|
||
modal frame, and causes an action to run when it is activated. This allows,
|
||
among other things, a behavior where if the player clicks outside the frame,
|
||
the frame gets hidden.</p>
|
||
<p>The <a class="reference internal" href="screens.html#sl-nearrect"><span class="std std-ref">nearrect</span></a> displayable lays out a displayable either
|
||
above or below a rectangle on the screen. This can be used to display a
|
||
tooltip above a button, or a drop-down menu below it. (An example of
|
||
a drop-down menu is documented with nearrect, and an example of tooltip
|
||
usage is with <a class="reference internal" href="screen_actions.html#tooltips"><span class="std std-ref">tooltips</span></a>.</p>
|
||
<p>The rectangles aside of which the nearrect places things can be captured by
|
||
the new <a class="reference internal" href="screen_actions.html#CaptureFocus" title="CaptureFocus"><code class="xref py py-func docutils literal notranslate"><span class="pre">CaptureFocus()</span></code></a> action, which captures the location of the current
|
||
button on the screen. After being captured, the <a class="reference internal" href="screen_actions.html#GetFocusRect" title="GetFocusRect"><code class="xref py py-func docutils literal notranslate"><span class="pre">GetFocusRect()</span></code></a> function
|
||
can get the focus rectangle, and the <a class="reference internal" href="screen_actions.html#ClearFocus" title="ClearFocus"><code class="xref py py-func docutils literal notranslate"><span class="pre">ClearFocus()</span></code></a> can clear the
|
||
captured focus, and the <a class="reference internal" href="screen_actions.html#ToggleFocus" title="ToggleFocus"><code class="xref py py-func docutils literal notranslate"><span class="pre">ToggleFocus()</span></code></a> action
|
||
captures and clears focus based on the current focus state.</p>
|
||
</div>
|
||
<div class="section" id="atl-and-transforms">
|
||
<h3>ATL and Transforms<a class="headerlink" href="#atl-and-transforms" title="Permalink to this headline"> link</a></h3>
|
||
<p>It's now possible to include a block as part of an ATL interpolation.
|
||
This means that:</p>
|
||
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="n">linear</span> <span class="mf">2.0</span><span class="p">:</span>
|
||
<span class="na">xalign</span> <span class="mf">1.0</span>
|
||
<span class="na">yalign</span> <span class="mf">1.0</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>is now allowed, and equivalent to:</p>
|
||
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="n">linear</span> <span class="mf">2.0</span> <span class="na">xalign</span> <span class="mf">1.0</span> <span class="na">yalign</span> <span class="mf">1.0</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Information about <a class="reference internal" href="atl.html#atl-transitions"><span class="std std-ref">ATL Transitions</span></a> and <a class="reference internal" href="atl.html#atl-keyword-parameters"><span class="std std-ref">Special ATL Keyword Parameters</span></a>
|
||
has been added to the documentation.</p>
|
||
<p>The <code class="docutils literal notranslate"><span class="pre">pause</span> <span class="pre">0</span></code> statement has been special-cased to always display one frame,
|
||
and is the only way to guarantee at least one frame is displayed. Since 6.99.13,
|
||
Ren'Py has been trying various methods to guarantee single frame display, and
|
||
many of which led to visual glitches.</p>
|
||
<p>When an ATL image is used as one of the children of an image button, its
|
||
shown time begins each time it is shown.</p>
|
||
<p>The default for 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 has been changed to
|
||
True.</p>
|
||
<p>The <code class="docutils literal notranslate"><span class="pre">function</span></code> statement will now block execution only if producing a delay,
|
||
which allows transforms using it to behave more naturally when catching up with
|
||
an inherited timebase.</p>
|
||
</div>
|
||
<div class="section" id="image-gallery">
|
||
<h3>Image Gallery<a class="headerlink" href="#image-gallery" title="Permalink to this headline"> link</a></h3>
|
||
<p>The <a class="reference internal" href="rooms.html#Gallery" title="Gallery"><code class="xref py py-class docutils literal notranslate"><span class="pre">Gallery</span></code></a> class now has a new field, <cite>image_screen</cite>, that can be
|
||
used to customize how gallery image are displayed.</p>
|
||
<p>The <a class="reference internal" href="rooms.html#Gallery.image" title="Gallery.image"><code class="xref py py-func docutils literal notranslate"><span class="pre">Gallery.image()</span></code></a> and <a class="reference internal" href="rooms.html#Gallery.unlock_image" title="Gallery.unlock_image"><code class="xref py py-func docutils literal notranslate"><span class="pre">Gallery.unlock_image()</span></code></a> methods now
|
||
take keyword arguments beginning with <cite>show_</cite>. These arguments have the
|
||
<cite>show_</cite> prefix stripped, and are then passed to the Gallery.image_screen
|
||
as additional keyword arguments. This can be used to include additional
|
||
information with the images in the gallery.</p>
|
||
</div>
|
||
<div class="section" id="boxes-grids-and-vpgrids">
|
||
<h3>Boxes, Grids and Vpgrids<a class="headerlink" href="#boxes-grids-and-vpgrids" title="Permalink to this headline"> link</a></h3>
|
||
<p>Displayables that take up no space (like <a class="reference internal" href="screens.html#sl-key"><span class="std std-ref">key</span></a>, <a class="reference internal" href="screens.html#sl-timer"><span class="std std-ref">timer</span></a>
|
||
or a false <a class="reference internal" href="screens.html#sl-showif"><span class="std std-ref">showif</span></a>) inside a <a class="reference internal" href="screens.html#sl-vbox"><span class="std std-ref">vbox</span></a> or <a class="reference internal" href="screens.html#sl-hbox"><span class="std std-ref">hbox</span></a>
|
||
will not be surrounded with <a class="reference internal" href="style_properties.html#style-property-spacing"><code class="xref std std-propref docutils literal notranslate"><span class="pre">spacing</span></code></a>. These displayables still take
|
||
up space in other layouts, such as grids.</p>
|
||
<p>Having an overfull vpgrid - when both <code class="docutils literal notranslate"><span class="pre">rows</span></code> and <code class="docutils literal notranslate"><span class="pre">cols</span></code> are specified - is now
|
||
disallowed.</p>
|
||
<p>Having an underfull vpgrid now raises an error unless the warning is opted-out using
|
||
either the <code class="docutils literal notranslate"><span class="pre">allow_underfull</span></code> property or <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>, the
|
||
former taking precedence on the latter.</p>
|
||
<p>A vpgrid with both cols and rows specified is underfull if and when it has less than
|
||
rows * cols children. A vpgrid with either cols or rows specified is underfull if and when its number of
|
||
children is not a multiple of the specified value.</p>
|
||
</div>
|
||
<div class="section" id="call-screen-and-roll-forward">
|
||
<span id="call-screen-roll-forward"></span><h3>Call Screen and Roll Forward<a class="headerlink" href="#call-screen-and-roll-forward" title="Permalink to this headline"> link</a></h3>
|
||
<p>The roll forward feature has been disabled by default in the <code class="docutils literal notranslate"><span class="pre">call</span> <span class="pre">screen</span></code>
|
||
statement, as it's unsafe and confusing in the general case. The problem is
|
||
that the only side-effect of a screen that roll-forward preserves is the return
|
||
value of the screen, or the jump location if a screen jumps. Actions with other
|
||
side effects, like changing variables or playing music, were not preserved
|
||
through a roll forwards.</p>
|
||
<p>Roll forward may be safe for a particular screen, and so can be enabled
|
||
on a per-screen basis by enabling the new <cite>roll_forward</cite> property on the
|
||
screen. If all screens in your game support roll forward, it can be enabled
|
||
with the new <a class="reference internal" href="config.html#var-config.call_screen_roll_forward"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.call_screen_roll_forward</span></code></a> variable.</p>
|
||
</div>
|
||
<div class="section" id="new-features">
|
||
<h3>New Features<a class="headerlink" href="#new-features" title="Permalink to this headline"> link</a></h3>
|
||
<p>The <code class="docutils literal notranslate"><span class="pre">show</span> <span class="pre">screen</span></code>, <code class="docutils literal notranslate"><span class="pre">hide</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 now
|
||
take an <code class="docutils literal notranslate"><span class="pre">expression</span></code> modifier, which allows a Python expression to supply
|
||
the name of the screen.</p>
|
||
<p>There is a new "main" volume that can be accessed through <code class="xref py py-func docutils literal notranslate"><span class="pre">Preferences()</span></code>.
|
||
The main volume is multiplied with all the other volumes to globally reduce
|
||
the volume of the game.</p>
|
||
<p>The new <a class="reference internal" href="config.html#var-config.preserve_volume_when_muted"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.preserve_volume_when_muted</span></code></a> variable causes
|
||
Ren'Py to show the current volume when channels are muted.</p>
|
||
<p>A button to clean the Ren'Py temporary directory has been added
|
||
to the preferences screen of the launcher. This can remove these
|
||
files to reduce the space Ren'Py requires.</p>
|
||
<p>The new <a class="reference internal" href="config.html#var-config.choice_empty_window"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.choice_empty_window</span></code></a> variable can customize
|
||
the empty window that is shown when a choice menu is displayed. The intended
|
||
use is:</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">choice_empty_window</span> <span class="o">=</span> <span class="n">extend</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Which repeats the last line of dialogue as the caption of the
|
||
choice menu.</p>
|
||
<p>The <a class="reference internal" href="screens.html#sl-key"><span class="std std-ref">key</span></a> displayable now supports a <cite>capture</cite>
|
||
property, which controls if the pressed key is handled further
|
||
it does not end an interaction.</p>
|
||
<p>The new "anywhere" value of the <a class="reference internal" href="style_properties.html#style-property-language"><code class="xref std std-propref docutils literal notranslate"><span class="pre">language</span></code></a> style property
|
||
allows Ren'Py to break anywhere in a string, for when keeping to
|
||
a fixed width is the most important aspect of breaking.</p>
|
||
<p>The new <cite>predict</cite> argument to <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> makes it possible to pause
|
||
until image prediction is finished, including prediction caused by
|
||
<a class="reference internal" href="displaying_images.html#renpy.start_predict" title="renpy.start_predict"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.start_predict()</span></code></a> and <a class="reference internal" href="screen_python.html#renpy.start_predict_screen" title="renpy.start_predict_screen"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.start_predict_screen()</span></code></a>.</p>
|
||
<p>It is now possible to select a language other than the default when
|
||
extracting dialogue.</p>
|
||
<p>The screen language <code class="docutils literal notranslate"><span class="pre">add</span></code> statement now takes an <cite>alt</cite> property,
|
||
making it possible to write:</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">add</span> <span class="s2">"icon.png"</span> <span class="na">alt</span> <span class="s2">"The Icon"</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>The <a class="reference internal" href="screen_actions.html#Hide" title="Hide"><code class="xref py py-func docutils literal notranslate"><span class="pre">Hide()</span></code></a> action now takes None for the screen name, to hide
|
||
the current screen.</p>
|
||
<p><a class="reference internal" href="displayables.html#Placeholder" title="Placeholder"><code class="xref py py-func docutils literal notranslate"><span class="pre">Placeholder()</span></code></a> now takes a <cite>text</cite> argument, that overrides the
|
||
automatically determined text with something the creator specifies.</p>
|
||
<p>The <a class="reference internal" href="other.html#renpy.dynamic" title="renpy.dynamic"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.dynamic()</span></code></a> function can now make variables in namespaces
|
||
dynamic.</p>
|
||
<p>The new <a class="reference internal" href="config.html#var-config.always_shown_screens"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.always_shown_screens</span></code></a> variable allows one to define
|
||
screens that are always shown (even in the main and game menus). See also
|
||
the existing <a class="reference internal" href="config.html#var-config.overlay_screens"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.overlay_screens</span></code></a>.</p>
|
||
<p>The location and size of the OpenGL viewport is made available to shaders as
|
||
u_viewport.</p>
|
||
<p>The new RENPY_PATH_TO_SAVES environment variable makes it possible to control
|
||
where Ren'Py places system-level saves. The RENPY_MULTIPERSISTENT variable has
|
||
been documented, and controls the same thing with multipersistent data.</p>
|
||
<p>The new <a class="reference internal" href="config.html#var-config.at_exit_callbacks"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.at_exit_callbacks</span></code></a> functions are called when the game
|
||
quits. This is intended to allow the game to save additional data created
|
||
by the developer.</p>
|
||
<p>The <a class="reference internal" href="config.html#var-config.default_attribute_callbacks"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.default_attribute_callbacks</span></code></a> variable allows a game to
|
||
specify default attributes for a tag that are used when other attributes
|
||
do not conflict.</p>
|
||
</div>
|
||
<div class="section" id="other-changes">
|
||
<h3>Other Changes<a class="headerlink" href="#other-changes" title="Permalink to this headline"> link</a></h3>
|
||
<p>It is now possible to copy from <a class="reference internal" href="input.html#renpy.input" title="renpy.input"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.input()</span></code></a> with ctrl-C, and paste
|
||
with ctrl-V. When text input is displayed, ctrl will no longer cause skipping
|
||
to happen.</p>
|
||
<p>The <a class="reference internal" href="file_python.html#renpy.file" title="renpy.file"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.file()</span></code></a> function has been renamed to <a class="reference internal" href="file_python.html#renpy.open_file" title="renpy.open_file"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.open_file()</span></code></a>,
|
||
with the old named retained. It has also gained an <cite>encoding</cite> parameter to
|
||
open the file with an encoding.</p>
|
||
<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.</p>
|
||
<p>When adding files to the audio namespace, Ren'Py now scans for flac
|
||
files.</p>
|
||
<p>Say statements used as menu captions can now take permanent and temporary
|
||
image attributes, just like say statements elsewhere.</p>
|
||
<p>All position properties can now be supplied as gui variables to buttons.
|
||
For example:</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">navigation_button_text_hover_yoffset</span> <span class="o">=</span> <span class="o">-</span><span class="mi">3</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>now works.</p>
|
||
<p>The behavior of modal <a class="reference internal" href="screens.html#sl-frame"><span class="std std-ref">frames</span></a> has been changed. A modal
|
||
frame now blocks mouse events when inside the frame, and blocks focus from
|
||
being transferred to displayables fully behind the frame, while allowing focus
|
||
to be given to other displayables.</p>
|
||
<p>The new <a class="reference internal" href="config.html#var-config.main_menu_stop_channels"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.main_menu_stop_channels</span></code></a> variable controls the
|
||
channels that are stopped when entering the main menu.</p>
|
||
<p>Layered images are now offered the the full size of the screen whenever
|
||
rendered. Previously, when a layered image was used inside a layout (like
|
||
hbox, vbox, side, and others), the space offered to the layered image
|
||
could change, and relative positions could also change. (This is unlikely,
|
||
but happened at least once.) The new <cite>offer_screen</cite> property of layered images
|
||
controls this behavior.</p>
|
||
<p>A <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> defined with <cite>interact</cite> false, or otherwise used in a
|
||
non-interactive way will now cause an automatic voice line to play, if the
|
||
relevant file exists.</p>
|
||
<p>When <code class="docutils literal notranslate"><span class="pre">window</span> <span class="pre">auto</span></code> displays the window before a say or menu-with-caption
|
||
statement, Ren'Py will automatically determine if the character to speak
|
||
uses NVL or ADV, and will display the correct window. Previously, the last
|
||
character in a say statement was used.</p>
|
||
<p>The <a class="reference internal" href="style_properties.html#style-property-activate_sound"><code class="xref std std-propref docutils literal notranslate"><span class="pre">activate_sound</span></code></a> plays when activating a drag displayable.</p>
|
||
<p>The <a class="reference internal" href="screen_actions.html#VariableValue" title="VariableValue"><code class="xref py py-func docutils literal notranslate"><span class="pre">VariableValue()</span></code></a>, <a class="reference internal" href="screen_actions.html#FieldValue" title="FieldValue"><code class="xref py py-func docutils literal notranslate"><span class="pre">FieldValue()</span></code></a>, and <a class="reference internal" href="screen_actions.html#DictValue" title="DictValue"><code class="xref py py-func docutils literal notranslate"><span class="pre">DictValue()</span></code></a> Bar Values
|
||
can now call <a class="reference internal" href="screen_actions.html#Return" title="Return"><code class="xref py py-func docutils literal notranslate"><span class="pre">Return()</span></code></a>, to cause the interaction to return a specific value.</p>
|
||
<p>The <a class="reference internal" href="style_properties.html#style-property-adjust_spacing"><code class="xref std std-propref docutils literal notranslate"><span class="pre">adjust_spacing</span></code></a> property is now set to False for dialogue and
|
||
narration in new games. This might cause the spacing of text to change, when
|
||
the game is resized, in exchange for keeping it stable when extend is used.</p>
|
||
<p>Playing or stopping music on a channel now unpauses that channel.</p>
|
||
<p>The new <a class="reference internal" href="preferences.html#var-preferences.audio_when_minimized"><code class="xref std std-var docutils literal notranslate"><span class="pre">preferences.audio_when_minimized</span></code></a> preference now enables the
|
||
audio of the game to be paused when the window is minimized.</p>
|
||
<p>The default for <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> is now "linear".</p>
|
||
<p>The version of SDL used by Ren'Py has been upgraded to 2.0.20 on non-web
|
||
platforms.</p>
|
||
<p>Many translations have been updated.</p>
|
||
<p>The jEdit editor has been removed, as the Ren'Py integration was largely
|
||
obsolete. However, if the version from 7.4.0 is unpacked, it should be
|
||
selectable in the launcher.</p>
|
||
</div>
|
||
<div class="section" id="versioning">
|
||
<h3>Versioning<a class="headerlink" href="#versioning" title="Permalink to this headline"> link</a></h3>
|
||
<p>Ren'Py's full version numbers are now of the form major.minor.patch.YYMMDDCCnu,
|
||
where:</p>
|
||
<ul class="simple">
|
||
<li>YY is the two digit year of the latest commit.</li>
|
||
<li>MM is the month of the commit.</li>
|
||
<li>DD is the day of the commit</li>
|
||
<li>CC is the commit number on that day</li>
|
||
<li>n is present if this is a nightly build.</li>
|
||
<li>u is present if this is an unofficial build.</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="renpy-7-4-11">
|
||
<span id="id6"></span><h2>7.4.11<a class="headerlink" href="#renpy-7-4-11" title="Permalink to this headline"> link</a></h2>
|
||
<div class="section" id="the-gui-variant-decorator">
|
||
<h3>The gui.variant Decorator<a class="headerlink" href="#the-gui-variant-decorator" title="Permalink to this headline"> link</a></h3>
|
||
<p>A new gui.variant decorator has been added to Ren'Py. This should be used
|
||
to decorate a function with the name of a variant, and causes that function
|
||
to be run, if the variant is active, when the game is first started, and then
|
||
each time the gui is rebuilt (which happens when <a class="reference internal" href="gui_advanced.html#gui.rebuild" title="gui.rebuild"><code class="xref py py-func docutils literal notranslate"><span class="pre">gui.rebuild()</span></code></a> is called,
|
||
when a gui preference is changed, or when the translation changes.)</p>
|
||
<p>This is expected to be used like:</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="nd">@gui</span><span class="o">.</span><span class="na">variant</span>
|
||
<span class="k">def</span> <span class="nf">small</span><span class="p">():</span>
|
||
|
||
<span class="c1">## Font sizes.</span>
|
||
<span class="n">gui</span><span class="o">.</span><span class="na">text_size</span> <span class="o">=</span> <span class="n">gui</span><span class="o">.</span><span class="n">scale</span><span class="p">(</span><span class="mi">30</span><span class="p">)</span>
|
||
<span class="n">gui</span><span class="o">.</span><span class="n">name_text_size</span> <span class="o">=</span> <span class="n">gui</span><span class="o">.</span><span class="n">scale</span><span class="p">(</span><span class="mi">36</span><span class="p">)</span>
|
||
<span class="c1"># ...</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>as a replacement for:</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">if</span> <span class="n">renpy</span><span class="o">.</span><span class="na">variant</span><span class="p">(</span><span class="s2">"small"</span><span class="p">):</span>
|
||
<span class="c1">## Font sizes.</span>
|
||
<span class="n">gui</span><span class="o">.</span><span class="na">text_size</span> <span class="o">=</span> <span class="n">gui</span><span class="o">.</span><span class="n">scale</span><span class="p">(</span><span class="mi">30</span><span class="p">)</span>
|
||
<span class="n">gui</span><span class="o">.</span><span class="n">name_text_size</span> <span class="o">=</span> <span class="n">gui</span><span class="o">.</span><span class="n">scale</span><span class="p">(</span><span class="mi">36</span><span class="p">)</span>
|
||
<span class="c1"># ...</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Which only runs once, and lost the changes if the gui was ever rebuilt.</p>
|
||
</div>
|
||
<div class="section" id="id7">
|
||
<h3>Fixes<a class="headerlink" href="#id7" title="Permalink to this headline"> link</a></h3>
|
||
<p>The new <a class="reference internal" href="config.html#var-config.mouse_focus_clickthrough"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.mouse_focus_clickthrough</span></code></a> variable determines if clicks that
|
||
cause the game window to be focused will be processed normally.</p>
|
||
<p>The launcher now runs with <a class="reference internal" href="config.html#var-config.mouse_focus_clickthrough"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.mouse_focus_clickthrough</span></code></a> true, which
|
||
means that it will only take a single click to launch the game.</p>
|
||
<p>The <cite>caret_blink</cite> property of Input is now exposed through screen language.</p>
|
||
<p>When a Live2D motion contains a curve with a shorter duration then the motion
|
||
it is part of, the last value of the curve is retained to the end of the
|
||
motion.</p>
|
||
<p>Rare issues with a displayable being replaced by a displayable of a different
|
||
type are now guarded against. This should only occur when a game is updated
|
||
between saves.</p>
|
||
<p>Modal displayables now prevent pauses from ending.</p>
|
||
<p>An issue that could cause images to not display in some cases (when a displayable
|
||
was invalidated) has been fixed.</p>
|
||
<p>Starting a movie no longer causes paused sounds to unpause.</p>
|
||
<p>AudioData objects are no longer stored in the persistent data. Such objects
|
||
are removed when persistent data is loaded, if present.</p>
|
||
<p>Platform variables like renpy.android and renpy.ios are now set to follow
|
||
the emulated platform, when Ren'Py is emulating ios or android.</p>
|
||
<p>When in the iOS and Android emulator, the mobile rollback side is used.</p>
|
||
<p>Ren'Py will now always run an <cite>unhovered</cite> action when a displayable (or its
|
||
replacement) remains shown, and the focus changes. Previously, the unhovered
|
||
action would not run when the loss of focus was caused by showing a second
|
||
screen.</p>
|
||
<p>When <a class="reference internal" href="config.html#var-config.log"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.log</span></code></a> is true, the selected choice is now logged properly.</p>
|
||
<p>The new <a class="reference internal" href="gui_advanced.html#gui.variant" title="gui.variant"><code class="xref py py-func docutils literal notranslate"><span class="pre">gui.variant()</span></code></a> function makes it possible to work around
|
||
an issue in the standard gui where the calling <a class="reference internal" href="gui_advanced.html#gui.rebuild" title="gui.rebuild"><code class="xref py py-func docutils literal notranslate"><span class="pre">gui.rebuild()</span></code></a> would cause
|
||
gui variants to reset.</p>
|
||
<p>The web browser now checks for progressively downloaded images once per
|
||
frame, allowing images to be loaded into the middle of an animation.</p>
|
||
<p>Live2D now uses saturation arithmetic to combine motion fadeins and fadeouts,
|
||
such that if the fadein contributes 80% of a parameter value, and the
|
||
fadeout contributes 20% of the value, 100% of the value comes from
|
||
the two motions. (Previously, the fadein and fadeout were applied
|
||
independently, such that together, the fadein and fadeout would
|
||
contribute 84% of the value, with the remaining 16% taken from
|
||
the default.)</p>
|
||
<p>When fading from one sequence of Live2D motions to another, the original
|
||
sequence ends when a motion fades out.</p>
|
||
<p>When preserving screens in the old state for a transition, the later_at_list
|
||
and camera lists are taken from the old state, preventing unexpected changes.</p>
|
||
<p>The <code class="xref std std-tpref docutils literal notranslate"><span class="pre">gl_depth</span></code> property now causes Ren'Py to use GL_LEQUALS,
|
||
which more closely matches Ren'Py's semantics.</p>
|
||
<p>The 4-component constructor for matrices has been fixed.</p>
|
||
<p>Ren'Py now cleans out the android build directories when producing a Android
|
||
App Bundle (AAB) file, preventing problems that might be caused when packaging
|
||
multiple games, or a single game where files are deleted.</p>
|
||
<p>Live2d now properly handles seamless animation when the same motion is repeated
|
||
in a displayable. (For example, <code class="docutils literal notranslate"><span class="pre">show</span> <span class="pre">eileen</span> <span class="pre">m1</span> <span class="pre">m1</span> <span class="pre">m2</span></code> where <code class="docutils literal notranslate"><span class="pre">m1</span></code> is seamless.)</p>
|
||
<p>Mouse motion is now tracked on Chrome OS devices. This prevents the mouse cursor
|
||
from being hidden between clicks.</p>
|
||
<p>An issue with windows partially rendering on ChromeOS has been resolved.</p>
|
||
<p>An issue with transcludes in screens has been fixed.</p>
|
||
<p>An issue that could prevent a transform with both <a class="reference internal" href="3dstage.html#transform-property-perspective"><code class="xref std std-tpref docutils literal notranslate"><span class="pre">perspective</span></code></a> and
|
||
<a class="reference internal" href="model.html#transform-property-mesh"><code class="xref std std-tpref docutils literal notranslate"><span class="pre">mesh</span></code></a> true from displaying has been fixed.</p>
|
||
<p>Buttons now only propagate transform state to direct children, not to
|
||
children accessed through ImageReferences.</p>
|
||
<p>The <code class="docutils literal notranslate"><span class="pre">repeat_</span></code> modifier can now be applied to gamepad events.</p>
|
||
<p>A new <a class="reference internal" href="config.html#var-config.debug_prediction"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.debug_prediction</span></code></a> variable has been split out of
|
||
<a class="reference internal" href="config.html#var-config.debug_image_cache"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.debug_image_cache</span></code></a>. This controls the logging of
|
||
prediction errors to the console and log.txt, making the latter
|
||
variable act as documented.</p>
|
||
</div>
|
||
<div class="section" id="translations">
|
||
<h3>Translations<a class="headerlink" href="#translations" title="Permalink to this headline"> link</a></h3>
|
||
<p>The German, Indonesian, Polish, and Russian translations have been updated.</p>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="renpy-7-4-10">
|
||
<span id="id8"></span><h2>7.4.10<a class="headerlink" href="#renpy-7-4-10" title="Permalink to this headline"> link</a></h2>
|
||
<div class="section" id="id9">
|
||
<h3>Fixes<a class="headerlink" href="#id9" title="Permalink to this headline"> link</a></h3>
|
||
<p>This released fixes an issue that prevented large images (larger than
|
||
maximum texture size, 4096x4069 on most platforms) from being displayed
|
||
by the gl2 renderer.</p>
|
||
<p>Dialogue lines that end with the {nw} tag now do not wait for voice to
|
||
finish.</p>
|
||
<p>Dialogue lines that contain {fast} (including those created
|
||
with the <code class="docutils literal notranslate"><span class="pre">extend</span></code> character) sustain the voice from the previous
|
||
statement.</p>
|
||
<p>These supplement a change introduced in 7.4.9 (that missed the changelog),
|
||
where timed {w} and {p} text tags will no longer wait for voice to stop
|
||
playing before advancing.</p>
|
||
<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> property can be slow, but several changes to
|
||
have been included to fix pathological cases of slowness. While it's best
|
||
to avoid it if possible (the default will change to None for drags, where
|
||
it's True now, in 7.5), this should allow for some speedups where it is
|
||
True.</p>
|
||
<p>Live2D support no longer logs to log.txt by default. That logging can be
|
||
restored with <a class="reference internal" href="live2d.html#var-config.log_live2d_loading"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.log_live2d_loading</span></code></a>.</p>
|
||
<p>A problem with automatically determining the Android store has been fixed.</p>
|
||
</div>
|
||
<div class="section" id="id10">
|
||
<h3>Translations<a class="headerlink" href="#id10" title="Permalink to this headline"> link</a></h3>
|
||
<p>The Indonesian and Polish translations were updated.</p>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="renpy-7-4-9">
|
||
<span id="id11"></span><h2>7.4.9<a class="headerlink" href="#renpy-7-4-9" title="Permalink to this headline"> link</a></h2>
|
||
<div class="section" id="android">
|
||
<h3>Android<a class="headerlink" href="#android" title="Permalink to this headline"> link</a></h3>
|
||
<p>This release features major changes to Ren'Py's Android support, starting
|
||
with support for the Android App Bundle format, now required for your game
|
||
to be uploaded to Google Play.</p>
|
||
<p>As bundles use different signing keys than APKs, it will be necessary to
|
||
uninstall and reinstall the game when switching from APKs to Bundles
|
||
for testing.</p>
|
||
<p>When run on Google Play, Ren'Py will use Play Asset Delivery to deliver
|
||
the game data to the player's device. This should have the same 2 GB limit
|
||
of previous versions of Ren'Py, with each file in your game automatically
|
||
assigned to one of four 500 MB asset packs. If the games is started before
|
||
all of the asset packs have been delivered, Ren'Py will wait for delivery
|
||
to finish before starting.</p>
|
||
<p>A new android-downloading.jpg file is used in place of android-presplash.jpg
|
||
when Play Asset Delivery is downloading the game's assets. This screen is
|
||
overlayed with a progress bar.</p>
|
||
<p>Ren'Py still supports building 2GB APKs that can be sideloaded onto devices,
|
||
and supplied to other app stores.</p>
|
||
<p>Ren'Py now builds against version 30 of the Android SDK.</p>
|
||
<p>Ren'Py supports wireless debugging on Android 11 devices.</p>
|
||
<p>A number of questions have been removed from the Android configuration
|
||
process, simplifying the process. Most notably, Ren'Py now automatically
|
||
manages the numeric version of the package, so it's no longer required to
|
||
increment that version with each build.</p>
|
||
<p>Ren'Py will now look for archives in the external files directory, and
|
||
automatically use the archives if found. This makes it possible to
|
||
distribute patches, updates, and additional asset to users.</p>
|
||
<p>The inclusion of <span class="xref std std-ref">Pyjnius</span>, a library for calling
|
||
the Android API, is now documented.</p>
|
||
<p>The new <a class="reference internal" href="android.html#var-build.android_permissions"><code class="xref std std-var docutils literal notranslate"><span class="pre">build.android_permissions</span></code></a> variable, <code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.check_permission()</span></code>
|
||
function, and <code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.request_permission()</span></code> function provide a way to
|
||
request permissions on Android beyond those that Ren'Py users itself.</p>
|
||
<p>When creating Android keys, Ren'Py will back them up to the same place it
|
||
backs up script files. This isn't a substitute for making your own backups.</p>
|
||
<p>An issue that could cause black screenshots on Android and other platforms has
|
||
been (hopefully) fixed.</p>
|
||
<p>The permissions of saves and log.txt are now explicitly managed on Android
|
||
to make these files group-readable, ensuring the player can access logs and
|
||
files.</p>
|
||
</div>
|
||
<div class="section" id="ios">
|
||
<h3>iOS<a class="headerlink" href="#ios" title="Permalink to this headline"> link</a></h3>
|
||
<p>The iOS build process has been updated create a project that is more complete
|
||
after the initial generation, with the launch screen set up and no unused
|
||
schemas.</p>
|
||
<p>As always, it's necessary to create a new iOS project each time Ren'Py is
|
||
updated.</p>
|
||
<p>The inclusion of <span class="xref std std-ref">Pyobjus</span> with Ren'Py is now documented. The
|
||
Pyobjus library allows games to call APIs on iOS and macOS.</p>
|
||
</div>
|
||
<div class="section" id="updater">
|
||
<h3>Updater<a class="headerlink" href="#updater" title="Permalink to this headline"> link</a></h3>
|
||
<p>The Ren'Py updater has been improved. It is now possible to download
|
||
updates over https, though doing so is less efficient, as the entire
|
||
update file will need to be download rather than just the required
|
||
changes.</p>
|
||
<p>It is possible to opt into a daily check for updates in the launcher
|
||
preferences. This will cause Ren'Py to check once a day for updates,
|
||
and highlight the update button if one exists.</p>
|
||
</div>
|
||
<div class="section" id="camera-perspective-improvements">
|
||
<h3>Camera/Perspective Improvements<a class="headerlink" href="#camera-perspective-improvements" title="Permalink to this headline"> link</a></h3>
|
||
<p>Using the <code class="docutils literal notranslate"><span class="pre">camera</span></code> statement in non-trival manners, such as to apply
|
||
perspective, could cause problems with several transitions, most notably
|
||
the move transitions. This has been fixed, and so these transions should
|
||
work.</p>
|
||
<p>Operations that required the taking of a subsurface (for
|
||
example, the slide and wipe transitions, or the use of viewports) didn't
|
||
work when applied to a perspective transform. This has been fixed, but
|
||
it does require a render to texture operation to work, leaving it up
|
||
to the creator to decide if the performance penalty is desirable.</p>
|
||
</div>
|
||
<div class="section" id="accessibility">
|
||
<h3>Accessibility<a class="headerlink" href="#accessibility" title="Permalink to this headline"> link</a></h3>
|
||
<p>The shift+A Accessibility menu now supports enabling high contrast text, which
|
||
converts all text to light-on-black. This is intended to assist player who
|
||
need higher contrast to experience a game.</p>
|
||
<p>Descriptive text (the <a class="reference internal" href="self_voicing.html#var-alt"><code class="xref std std-var docutils literal notranslate"><span class="pre">alt</span></code></a> character) no longer causes the dialogue
|
||
window to fade in if the descriptive text is disabled.</p>
|
||
<p>The order in which self-voicing reads out layers, screens, and displayables
|
||
directly on a layer has changed, such that the screen and displayables that
|
||
are drawn last (closest to the player) are read out first. This does not
|
||
apply to displayables within a screen or layout displayable, which are
|
||
still read first to last.</p>
|
||
<p>Modal screens cause self-voicing to stop after the contents of the screen
|
||
has been read.</p>
|
||
</div>
|
||
<div class="section" id="transform-properties">
|
||
<h3>Transform Properties<a class="headerlink" href="#transform-properties" title="Permalink to this headline"> link</a></h3>
|
||
<p>The <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> and <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> transform properties have slightly changed
|
||
in behavior, to match the corresponding style properties. While they used to
|
||
accept only numbers of pixels, they now take "position" values, which means
|
||
either a number of pixels expressed as an <code class="docutils literal notranslate"><span class="pre">int</span></code> or <code class="docutils literal notranslate"><span class="pre">absolute</span></code>, or a fraction
|
||
of the available room expressed as a <code class="docutils literal notranslate"><span class="pre">float</span></code>. The old wrapper, <a class="reference internal" href="atl.html#transform-property-size"><code class="xref std std-tpref docutils literal notranslate"><span class="pre">size</span></code></a>,
|
||
is deprecated, and the new wrapper, <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>, should be used instead.</p>
|
||
</div>
|
||
<div class="section" id="other">
|
||
<h3>Other<a class="headerlink" href="#other" title="Permalink to this headline"> link</a></h3>
|
||
<p>The <a class="reference internal" href="screens.html#sl-bar"><span class="std std-ref">bar</span></a> screen language statement now has a new property,
|
||
<cite>released</cite>, that gives an action to perform when the bar is released.</p>
|
||
<p>It's now documented that the <a class="reference internal" href="screens.html#sl-key"><span class="std std-ref">key</span></a> screen language statement
|
||
can take a list of keysyms.</p>
|
||
<p>On Linux, if Ren'Py detects the "C" locale, it will enable support for
|
||
UTF-8 filesystems. This is intended to provide better compatibility with
|
||
Steam Linux, which uses this locale.</p>
|
||
<p>A new Polish translation of the launcher has been added.</p>
|
||
<p>The music room has been updated to include a TogglePause button,
|
||
that pauses and unpauses music.</p>
|
||
<p>There is now a --safe-mode flag, that starts Ren'Py in safe mode.</p>
|
||
<p>Mute now mutes movies.</p>
|
||
<p>An issue that caused analysis files to grow unconstrained, slowing down
|
||
Ren'Py startup, has been fixed. The analysis file will be reduced in size
|
||
when the game scripts are recompiled.</p>
|
||
<p>The <a class="reference internal" href="style_properties.html#style-property-hover_sound"><code class="xref std std-propref docutils literal notranslate"><span class="pre">hover_sound</span></code></a> and <a class="reference internal" href="style_properties.html#style-property-activate_sound"><code class="xref std std-propref docutils literal notranslate"><span class="pre">activate_sound</span></code></a> properties now
|
||
apply to bars.</p>
|
||
<p>When dispatching events in ATL, if an event with a <code class="docutils literal notranslate"><span class="pre">selected_</span></code> prefix is not
|
||
handled, the prefix is stripped and the event is matched again. This means
|
||
that a <code class="docutils literal notranslate"><span class="pre">hover</span></code> handler will handle the <code class="docutils literal notranslate"><span class="pre">selected_hover</span></code> even if the
|
||
<code class="docutils literal notranslate"><span class="pre">selected_hover</span></code> handler does not exist, and same thing with <code class="docutils literal notranslate"><span class="pre">selected_idle</span></code></p>
|
||
<p>Ren'Py versions can now include an optional letter at the end. The <code class="docutils literal notranslate"><span class="pre">n</span></code> suffix
|
||
is applied to nightly builds of Ren'Py, while the <code class="docutils literal notranslate"><span class="pre">u</span></code> suffix is applied to
|
||
unofficial builds.</p>
|
||
<p>The <code class="docutils literal notranslate"><span class="pre">default</span></code> statement is applied after each rollback.</p>
|
||
<p>A regression that could prevent text in buttons from changing has been fixed.</p>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="renpy-7-4-8">
|
||
<span id="id12"></span><h2>7.4.8<a class="headerlink" href="#renpy-7-4-8" title="Permalink to this headline"> link</a></h2>
|
||
<div class="section" id="id13">
|
||
<h3>Fixes<a class="headerlink" href="#id13" title="Permalink to this headline"> link</a></h3>
|
||
<p>This fixes a major problem that could cause rollback to corrupt lists,
|
||
dictionaries, sets, and objects. Everyone that uses 7.4.7 is recommended
|
||
to upgrade.</p>
|
||
<p>A crash that could be caused by non-integer outlines has been fixed.</p>
|
||
<p>The correct size of a viewport is used for edge and mouse wheel scrolling.</p>
|
||
<p>Game controller detection has been fixed.</p>
|
||
</div>
|
||
<div class="section" id="features">
|
||
<h3>Features<a class="headerlink" href="#features" title="Permalink to this headline"> link</a></h3>
|
||
<p>It is now possible, using <code class="xref py py-func docutils literal notranslate"><span class="pre">PauseAction()</span></code> or <a class="reference internal" href="audio.html#renpy.music.set_pause" title="renpy.music.set_pause"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.music.set_pause()</span></code></a>,
|
||
to pause a channel that's playing video.</p>
|
||
<p>The default channel for movies can now be set with <a class="reference internal" href="config.html#var-config.single_movie_channel"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.single_movie_channel</span></code></a>.</p>
|
||
</div>
|
||
<div class="section" id="changes">
|
||
<h3>Changes<a class="headerlink" href="#changes" title="Permalink to this headline"> link</a></h3>
|
||
<p>When in developer mode, errors parameterizing an image will be reported to
|
||
the developer, rather than causing a placeholder (the gray ghost girl) to
|
||
appear.</p>
|
||
<p>The text window will not be shown before being hidden by the <code class="docutils literal notranslate"><span class="pre">centered</span></code>
|
||
and <code class="docutils literal notranslate"><span class="pre">vcentered</span></code> characters.</p>
|
||
<p>Rolling back to a place where the shift+O console caused a change in the
|
||
state of the game will not cause the effects of the console to be reverted.
|
||
Rolling back one step further will.</p>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="renpy-7-4-7">
|
||
<span id="id14"></span><h2>7.4.7<a class="headerlink" href="#renpy-7-4-7" title="Permalink to this headline"> link</a></h2>
|
||
<div class="section" id="web-and-web-audio">
|
||
<h3>Web and Web Audio<a class="headerlink" href="#web-and-web-audio" title="Permalink to this headline"> link</a></h3>
|
||
<p>The way that the web platform plays audio has been rewritten. Instead of
|
||
using ffmpeg as Ren'Py does on other platform, the web version of Ren'Py
|
||
will hand sound files off to the browser's builtin audio player. This
|
||
is often multithreaded, and so prevents the skipping and crackling that
|
||
had been occurring with the web port.</p>
|
||
<p>The file formats that are supported on the web platform are now the
|
||
formats supported in browsers. This is Opus, Ogg, and MP3 in modern
|
||
web browsers, and just MP3 in Safari. (But see the Safari issues
|
||
below.)</p>
|
||
<p>The new <a class="reference internal" href="config.html#var-config.audio_filename_callback"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.audio_filename_callback</span></code></a> makes it possible to
|
||
adjust audio filenames on play, on the web and on other platforms.</p>
|
||
<p>Self-voicing, with the 'v' key, now works on the web platform if the
|
||
browser supports it.</p>
|
||
<p>Support for Ren'Py is limited on webkit-based browsers, due to
|
||
<a class="reference external" href="https://bugs.webkit.org/show_bug.cgi?id=227421">https://bugs.webkit.org/show_bug.cgi?id=227421</a> . This seems to affect
|
||
Safari on macOS, especially the M1, as well all web browsers on iOS. As there
|
||
is no way to fix this issue in Ren'Py, the web shell has been modified to
|
||
report the issue.</p>
|
||
</div>
|
||
<div class="section" id="id15">
|
||
<h3>iOS<a class="headerlink" href="#id15" title="Permalink to this headline"> link</a></h3>
|
||
<p>The iOS build is now compiled with a more modern version of Clang, allowing
|
||
it to run on the 12th generation iPhone and 2nd generation iPhone SE without
|
||
the pillarboxing (or worse, both pillarboxing and letterboxing) that
|
||
would otherwise be required.</p>
|
||
<p>Ren'Py can compile for the iOS simulator on M1 macs, but the simulator itself
|
||
may cause runtime issues.</p>
|
||
</div>
|
||
<div class="section" id="input">
|
||
<h3>Input<a class="headerlink" href="#input" title="Permalink to this headline"> link</a></h3>
|
||
<p>The input displayable now supports a number of new quality of life
|
||
features. Specifically, the following new features now work:</p>
|
||
<ul class="simple">
|
||
<li>Jumping a word to the left. (Ctrl-Left, Alt-Left on Macintosh.)</li>
|
||
<li>Jumping a word to the right. (Ctrl-Right, Alt-Right on Macintosh.)</li>
|
||
<li>Deleting a word. (Ctrl-Backspace, Alt-Backspace on Macintosh.)</li>
|
||
<li>Deleting the line. (Windows-Backspace, Command-Backspace on Macintosh.)</li>
|
||
</ul>
|
||
<p>In addition, Command-Left and Command-Right on Macintosh now navigate to
|
||
the start and end of the line, in addition to the usual Home and End keys.</p>
|
||
<p>The input caret now blinks to draw attention. The blink rate is
|
||
controlled by the <a class="reference internal" href="config.html#var-config.input_caret_blink"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.input_caret_blink</span></code></a> variable.</p>
|
||
</div>
|
||
<div class="section" id="id16">
|
||
<h3>Other<a class="headerlink" href="#id16" title="Permalink to this headline"> link</a></h3>
|
||
<p>The <code class="xref py py-func docutils literal notranslate"><span class="pre">Preferences()</span></code> function can now return actions that allow
|
||
access to the renderer and accessibility menus.</p>
|
||
<p>The new <a class="reference internal" href="screen_python.html#renpy.set_focus" title="renpy.set_focus"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.set_focus()</span></code></a> function makes it possible to set
|
||
the focused displayable, though mouse motions might immediately
|
||
change the focus.</p>
|
||
<p>In layered images, transform properties given to attributes now take
|
||
precedence to those given in groups. Previously, it was possible for
|
||
the attributes to conflict, such as when <a class="reference internal" href="atl.html#transform-property-align"><code class="xref std std-tpref docutils literal notranslate"><span class="pre">align</span></code></a> was given to the group
|
||
and <a class="reference internal" href="atl.html#transform-property-xalign"><code class="xref std std-tpref docutils literal notranslate"><span class="pre">xalign</span></code></a> was given to the attribute.</p>
|
||
<p>It is now possible to roll back past variables set in the console.</p>
|
||
<p>The new <code class="xref py py-func docutils literal notranslate"><span class="pre">mark_label_seen()</span></code> and <code class="xref py py-func docutils literal notranslate"><span class="pre">mark_label_unseen()</span></code> make it
|
||
possible to manipulate the set of seen labels.</p>
|
||
<p>The new <code class="xref py py-func docutils literal notranslate"><span class="pre">mark_audio_seen()</span></code> and <code class="xref py py-func docutils literal notranslate"><span class="pre">mark_audio_unseen()</span></code> make it
|
||
possible to manipulate the set of seen audio files.</p>
|
||
<p>The new <code class="xref py py-func docutils literal notranslate"><span class="pre">mark_image_seen()</span></code> and <code class="xref py py-func docutils literal notranslate"><span class="pre">mark_image_unseen()</span></code> make it
|
||
possible to manipulate the set of seen images.</p>
|
||
<p>ATL transforms in screens now start when first shown, rather than when the
|
||
screen containing the transform is first shown.</p>
|
||
<p>The new <a class="reference internal" href="config.html#var-config.autosave_on_input"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.autosave_on_input</span></code></a> variabel controls if autosaving
|
||
occurs on input.</p>
|
||
<p>Ren'Py will now report an error when a positional argument follows a
|
||
keyword argument.</p>
|
||
<p>It is now possible to use floating point numbers for <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> and
|
||
<a class="reference internal" href="style_properties.html#style-property-ysize"><code class="xref std std-propref docutils literal notranslate"><span class="pre">ysize</span></code></a>, and have the result be correct. Previously, the floating
|
||
point numbers would be applied twice, so a <code class="xref py py-func docutils literal notranslate"><span class="pre">xsize()</span></code> of .5 would
|
||
represent 1/4 of the available width, rather than the correct 1/2 as it
|
||
does now.</p>
|
||
<p>The <a class="reference internal" href="persistent.html#persistent._clear" title="persistent._clear"><code class="xref py py-func docutils literal notranslate"><span class="pre">persistent._clear()</span></code></a> method, which clears persistent data, is now
|
||
documented.</p>
|
||
<p>The Spanish translation has been updated.</p>
|
||
<p>Atom has been updated.</p>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="renpy-7-4-6">
|
||
<span id="id17"></span><h2>7.4.6<a class="headerlink" href="#renpy-7-4-6" title="Permalink to this headline"> link</a></h2>
|
||
<div class="section" id="camera-statement">
|
||
<h3>Camera Statement<a class="headerlink" href="#camera-statement" title="Permalink to this headline"> link</a></h3>
|
||
<p>There is a new <code class="docutils literal notranslate"><span class="pre">camera</span></code> statement, intended for use with the 3D Stage system.
|
||
This statement is similar to the <code class="docutils literal notranslate"><span class="pre">show</span> <span class="pre">layer</span></code> statement, except that the layer
|
||
name is not required, and it is not cleared when a <code class="docutils literal notranslate"><span class="pre">scene</span></code> statement is run.</p>
|
||
<p>This statement lets you write:</p>
|
||
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">camera</span><span class="p">:</span>
|
||
<span class="na">perspective</span> <span class="kc">True</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>to enable the 3D State system.</p>
|
||
<p>As part of this, the <code class="docutils literal notranslate"><span class="pre">show</span> <span class="pre">layer</span></code> and <code class="docutils literal notranslate"><span class="pre">scene</span></code> statements have been reverted
|
||
to their behavior in 7.4.4 and earlier, where the <code class="docutils literal notranslate"><span class="pre">scene</span></code> statement clears
|
||
the list of transforms.</p>
|
||
</div>
|
||
<div class="section" id="model-displayable">
|
||
<h3>Model Displayable<a class="headerlink" href="#model-displayable" title="Permalink to this headline"> link</a></h3>
|
||
<p>The new <a class="reference internal" href="model.html#Model" title="Model"><code class="xref py py-class docutils literal notranslate"><span class="pre">Model</span></code></a> displayable serves as a way to create models for
|
||
use with the model-based renderer. Right now, the class is able to
|
||
create 2D models with multiple textures, making it possible to create
|
||
custom transforms that work like some of the built-in transforms do.</p>
|
||
<p>This displayable doesn't support 3D, yet, but that's expected in the future.</p>
|
||
</div>
|
||
<div class="section" id="id18">
|
||
<h3>Other Improvements<a class="headerlink" href="#id18" title="Permalink to this headline"> link</a></h3>
|
||
<p>The Atom text editor has been updated, and the language-renpy plugin assoicated
|
||
with it has been updated to support the new keywords introduced in recent
|
||
versions of Ren'Py.</p>
|
||
<p>Using a controller immediately hides the mouse cursor.</p>
|
||
</div>
|
||
<div class="section" id="id19">
|
||
<h3>Fixes<a class="headerlink" href="#id19" title="Permalink to this headline"> link</a></h3>
|
||
<p>A mistake in the build process meant that a change to fix compilation
|
||
on iOS that had been in the nightly didn't make it into the Ren'Py
|
||
release.</p>
|
||
<p>An issue where a modal screen would not block time events when the Ren'Py
|
||
window lost focus has been fixed.</p>
|
||
<p>The number of iterations of the blur shader has been limited, which ensures
|
||
that Ren'Py is compatible with more webgl devices.</p>
|
||
<p>Ren'Py will re-compile the Python files in the renpy/ directory, when the
|
||
Force Recompile option is checked. This ensures that if those files are
|
||
recompiled for some reason, the path to Ren'Py on the creator's system
|
||
will not be included.</p>
|
||
<p>ATL will now skip to the first frame to be displayed when using the animation
|
||
timebase.</p>
|
||
<p>Ren'Py will no longer pauses without timeouts after a rollback.</p>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="renpy-7-4-5">
|
||
<span id="id20"></span><h2>7.4.5<a class="headerlink" href="#renpy-7-4-5" title="Permalink to this headline"> link</a></h2>
|
||
<div class="section" id="model-based-renderer">
|
||
<h3>Model-Based Renderer<a class="headerlink" href="#model-based-renderer" title="Permalink to this headline"> link</a></h3>
|
||
<p>The model-based renderer is now the default for games that are released
|
||
with Ren'Py 7.4.5. To disable it for your game, please set <a class="reference internal" href="model.html#var-config.gl2"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.gl2</span></code></a>
|
||
to False.</p>
|
||
<p>When the model-based renderer is being used, Ren'Py now supports a "3D Stage".
|
||
This adds a third dimension to shown images, allowing for perspective correct
|
||
zooming and motion, the rotation and translation of displayables in 3D,
|
||
and many other new effects. Please see the <a class="reference internal" href="3dstage.html"><span class="doc">3D Stage</span></a>
|
||
documentation for more information.</p>
|
||
<p>To facilitate the 3D Stage, the <code class="docutils literal notranslate"><span class="pre">scene</span></code> statement no longer clears
|
||
transforms applied to a layer as a whole with <code class="docutils literal notranslate"><span class="pre">show</span> <span class="pre">layer</span></code> or
|
||
<code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.layer_at_list()</span></code>.</p>
|
||
<p>The new <a class="reference internal" href="transitions.html#Swing" title="Swing"><code class="xref py py-func docutils literal notranslate"><span class="pre">Swing()</span></code></a> transition is usable when the model-based renderer
|
||
is enabled. This causes the scene to rotate around the vertical or horizontal
|
||
axis, in three dimensions, and to be replaced with a previous scene.</p>
|
||
<p>The new <a class="reference internal" href="model.html#transform-property-blend"><code class="xref std std-tpref docutils literal notranslate"><span class="pre">blend</span></code></a> transform property allows the blend function to be
|
||
specified. The blend function controls how a pixel being drawn is combined
|
||
to the pixel it is being drawn to.In addition to the "normal" and "add" blend
|
||
functions that Ren'Py already supported, new "multiply", "min", and "max" functions
|
||
have been added.</p>
|
||
</div>
|
||
<div class="section" id="mouse">
|
||
<h3>Mouse<a class="headerlink" href="#mouse" title="Permalink to this headline"> link</a></h3>
|
||
<p>There have been a number of changes and improvements to the hardware mouse
|
||
support, and it's now documented that GPUs have limits to the size of the
|
||
hardware mouse that can be supported.</p>
|
||
<p>A new variable <a class="reference internal" href="config.html#var-config.mouse_displayable"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.mouse_displayable</span></code></a> and displayable,
|
||
<a class="reference internal" href="mouse.html#MouseDisplayable" title="MouseDisplayable"><code class="xref py py-func docutils literal notranslate"><span class="pre">MouseDisplayable()</span></code></a>, now can be used to replace the hardware mouse
|
||
with a software one, similar to the way it was done in Ren'Py 7.3 and
|
||
earlier.</p>
|
||
</div>
|
||
<div class="section" id="id21">
|
||
<h3>Features<a class="headerlink" href="#id21" title="Permalink to this headline"> link</a></h3>
|
||
<p>A new function, <a class="reference internal" href="other.html#renpy.screenshot_to_bytes" title="renpy.screenshot_to_bytes"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.screenshot_to_bytes()</span></code></a>, takes a screenshot
|
||
and stores it in a bytes object that can be passed to <a class="reference internal" href="im.html#im.Data" title="im.Data"><code class="xref py py-func docutils literal notranslate"><span class="pre">im.Data()</span></code></a>.
|
||
While these objects are large, it is possible to store them in regular
|
||
and persistent saves.</p>
|
||
<p>The new <a class="reference internal" href="audio.html#renpy.music.get_loop" title="renpy.music.get_loop"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.music.get_loop()</span></code></a> function returns a list of sound
|
||
files that are set to be looped on a channel, making it possible to
|
||
store and replay them.</p>
|
||
<p>The <a class="reference internal" href="input.html#renpy.input" title="renpy.input"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.input()</span></code></a> function and the input displayable take a new
|
||
<cite>mask</cite> parameter, that specifies a string that masks out characters
|
||
that would be shown to the player. This can be used to hide the text
|
||
of a password.</p>
|
||
<p>There is now a dark theme for the launcher.</p>
|
||
<p>The new <a class="reference internal" href="config.html#var-config.adjust_attributes"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.adjust_attributes</span></code></a> callback allows you to intercept
|
||
image attributes when show, and replace them with a list of your own.
|
||
For example, it's possible to use this to rewrite <code class="docutils literal notranslate"><span class="pre">eileen</span> <span class="pre">happy</span></code>
|
||
to <code class="docutils literal notranslate"><span class="pre">eileen</span> <span class="pre">happy_eyes</span> <span class="pre">happy_mouth</span></code>, which interacts well with
|
||
LayeredImage.</p>
|
||
<p>When running lint from the command line, the <code class="docutils literal notranslate"><span class="pre">--error-code</span></code> option can
|
||
be given to cause Ren'Py to return with an error code if lint fails.</p>
|
||
<p>Layer transitions can now persist past the end of an interaction.</p>
|
||
<p>Ren'Py avoids pausing right after a rollback, so that the rollback tries
|
||
to finish at a more interactive statement.</p>
|
||
<p>When playing a sound, it is possible to sync the start time of an audio
|
||
file in one channel with the time of the audio file in another channel.</p>
|
||
</div>
|
||
<div class="section" id="id22">
|
||
<h3>Android<a class="headerlink" href="#id22" title="Permalink to this headline"> link</a></h3>
|
||
<p>Several packages that are required to build on Android are now included
|
||
as part of Ren'Py. This fixes errors that are related to Bintray being
|
||
shut down, that prevented new installs of Ren'Py 7.4.4 from being able
|
||
to build for Android.</p>
|
||
<p>The way Ren'Py displays the presplash screen on Android has been
|
||
changed. The presplash is now displayed by the Java bootstrap, in
|
||
a new layer on top of the OpenGL layer. This is a new approach
|
||
compared to Ren'Py 7.4, where the presplash was displayed using SDL's
|
||
2D rendering. This change appears to improve compatibility with Android
|
||
devices, and prevent instances of black screens on start.</p>
|
||
<p>As part of this change, the way Ren'Py scales the presplash image has
|
||
been changed. Ren'Py will now scale-to-fit the presplash image inside
|
||
the available area.</p>
|
||
<p>An issue that prevented blur from working properly on certain Android
|
||
devices has been fixed.</p>
|
||
<p>An issue playing some less-used video and audio file formats on Android
|
||
has been fixed.</p>
|
||
<p>The Android fixes will require you to regenerate your Android project,
|
||
by answering the Android Configuration question "Do you want to automatically
|
||
update the Java source code?" with "Yes."</p>
|
||
</div>
|
||
<div class="section" id="other-platforms">
|
||
<h3>Other Platforms<a class="headerlink" href="#other-platforms" title="Permalink to this headline"> link</a></h3>
|
||
<p>The Web Platform beta has been updated.</p>
|
||
<p>A regression in Mobile Safari for iOS 14.5.1 and later prevents Ren'Py from
|
||
starting on that platform. As the issue is with Mobile Safari, no workaround
|
||
is possible, and a message is displayed prompting the player to contact
|
||
Apple. This regression affects other iOS browsers that are shells for Mobile
|
||
Safari, like Chrome and Firefox.</p>
|
||
<p>Building for iOS has been fixed.</p>
|
||
<p>Support for Steam on macOS has been fixed.</p>
|
||
<p>Signing and Notarizing macOS applications has been fixed.</p>
|
||
</div>
|
||
<div class="section" id="other-fixes">
|
||
<h3>Other Fixes<a class="headerlink" href="#other-fixes" title="Permalink to this headline"> link</a></h3>
|
||
<p>The default level-of-detail bias has been set to -0.5, and can be changed
|
||
with <a class="reference internal" href="config.html#var-config.gl_lod_bias"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.gl_lod_bias</span></code></a>. This is used to bias Ren'Py into scaling
|
||
down, rather than scaling up, but the previous bias would cause Ren'Py
|
||
to create jagged edges on images.</p>
|
||
<p>There have been a number of improvements to the way Ren'Py handles
|
||
modal screens.</p>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="renpy-7-4-4">
|
||
<span id="id23"></span><h2>7.4.4<a class="headerlink" href="#renpy-7-4-4" title="Permalink to this headline"> link</a></h2>
|
||
<div class="section" id="the-old-game-directory">
|
||
<h3>The old-game directory<a class="headerlink" href="#the-old-game-directory" title="Permalink to this headline"> link</a></h3>
|
||
<p>To help creators that make multiple releases of their games (as with
|
||
early access or Patreon releases), Ren'Py now supports an old-game directory,
|
||
which can be a copy of the game directory from the previous release. Ren'Py
|
||
will use the information found in the .rpyc files in this directory when it
|
||
generates .rpyc files. As the .rpyc files are used when loading games,
|
||
this will tend to help Ren'Py load games created by multiple
|
||
developers.</p>
|
||
<p>For more information, see the <a class="reference internal" href="build.html#old-game"><span class="std std-ref">documentation</span></a>.</p>
|
||
</div>
|
||
<div class="section" id="id24">
|
||
<h3>Fixes<a class="headerlink" href="#id24" title="Permalink to this headline"> link</a></h3>
|
||
<p>A crash that could occur with gestures or controllers has been fixed.</p>
|
||
<p>A crash that occurred when generating web distributions on windows has
|
||
been fixed.</p>
|
||
<p>The persistent backend for achievements now supports the clearing of
|
||
progress.</p>
|
||
<p>Live2D now resets opacities with other parameters.</p>
|
||
<p>Ren'Py does not change the size of a maximized window when reloading.</p>
|
||
</div>
|
||
<div class="section" id="id25">
|
||
<h3>Other<a class="headerlink" href="#id25" title="Permalink to this headline"> link</a></h3>
|
||
<p>There is a new GL property, <code class="docutils literal notranslate"><span class="pre">blend_func</span></code> that is supported by the
|
||
model-based renderer. This allows the customization of the GL blend
|
||
function, allowing Ren'Py to start to support new blend modes.</p>
|
||
<p>Live2D now supports the additive and multiply blend modes.</p>
|
||
<p>Using default or define with the <code class="docutils literal notranslate"><span class="pre">renpy</span></code> namespace will now produce an
|
||
error.</p>
|
||
<p>A number of previously-undocumented methods on the <a class="reference internal" href="preferences.html"><span class="doc">preferences object</span></a>
|
||
have been documented. These methods make it possible to get or set the current value
|
||
of the volume and the current value of mute.</p>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="renpy-7-4-3">
|
||
<span id="id26"></span><h2>7.4.3<a class="headerlink" href="#renpy-7-4-3" title="Permalink to this headline"> link</a></h2>
|
||
<div class="section" id="windows">
|
||
<h3>Windows<a class="headerlink" href="#windows" title="Permalink to this headline"> link</a></h3>
|
||
<p>The code for changing icons has been rewritten, to produce executables that
|
||
do not include any extraneous data other than the software and the icons
|
||
being added. This should prevent some antivirus programs from producing
|
||
false positives.</p>
|
||
<p>Ren'Py is now linked against the Universal C Runtime on Windows. This
|
||
may raise the version of Windows that Ren'Py runs on to Windows Vista
|
||
with certain hotfixes. This both modernizes Ren'Py, and should prevent
|
||
some antivirus programs from producing false positives.</p>
|
||
<p>Ren'Py will now disable Threaded Optimization on Nvidia GPUs. Threaded
|
||
Optimization interacted poorly with Ren'Py, causing pauses in places where
|
||
Ren'Py did not expect pauses to occur. This could manifest as audio glitches
|
||
that this change fixes.</p>
|
||
<p>Ren'Py will automatically use the ANGLE library to emulate OpenGL ES using
|
||
DirectX, if DirectX is available and OpenGL is not. This had not worked
|
||
properly in Ren'Py 7.4. The window may appear and disappear multiple times
|
||
as Ren'Py tries different video systems, this is expected.</p>
|
||
</div>
|
||
<div class="section" id="id27">
|
||
<h3>Android<a class="headerlink" href="#id27" title="Permalink to this headline"> link</a></h3>
|
||
<p>The non-model-based renderer now properly deallocates textures when Android
|
||
causes a render context to change. This prevents visual glitches that would
|
||
randomly occur, often during Dissolves.</p>
|
||
<p>Ren'Py now checks that it has focus when the game actually starts. This
|
||
fixes an issue where, if the player switched out of the application before
|
||
the game could fully start. Now, if Ren'Py has lost focus at game start,
|
||
it will save and quit, then re-launch when the player returns to the game.</p>
|
||
<p>In general, compatibility with Android devices has been improved.</p>
|
||
</div>
|
||
<div class="section" id="id28">
|
||
<h3>Features<a class="headerlink" href="#id28" title="Permalink to this headline"> link</a></h3>
|
||
<p>Added <a class="reference internal" href="config.html#var-config.main_menu_music_fadein"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.main_menu_music_fadein</span></code></a>, a way of fading in the main
|
||
menu music.</p>
|
||
<p>The new <a class="reference internal" href="displaying_images.html#renpy.get_zorder_list" title="renpy.get_zorder_list"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.get_zorder_list()</span></code></a> and <a class="reference internal" href="displaying_images.html#renpy.change_zorder" title="renpy.change_zorder"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.change_zorder()</span></code></a> allow
|
||
the zorder of images and screens to be manipulated after being shown.</p>
|
||
<p>Windows and frames can now take the <a class="reference internal" href="style_properties.html#style-property-modal"><code class="xref std std-propref docutils literal notranslate"><span class="pre">modal</span></code></a> style property. This is
|
||
similar to the modal property of screens, but only applies when the mouse
|
||
is within the boundaries of the window or frame. This can be used to ensure
|
||
the player can't click a button behind the window, while allowing buttons
|
||
that are not obstructed to be used.</p>
|
||
<p>The <a class="reference internal" href="live2d.html#Live2D" title="Live2D"><code class="xref py py-func docutils literal notranslate"><span class="pre">Live2D()</span></code></a> displayable now takes an <cite>update_function</cite> parameter,
|
||
which makes it possible to update parameters directly.</p>
|
||
<p>Ren'Py now supports the display of Emoji and other characters from outside
|
||
the Basic Multilingual Plane, if the fonts in use support the characters.
|
||
Right now, the emoji are displayed using the font rendering system, which
|
||
produces monochrome glyphs.</p>
|
||
<p>The <a class="reference internal" href="text.html#FontGroup" title="FontGroup"><code class="xref py py-class docutils literal notranslate"><span class="pre">FontGroup</span></code></a> class can now be used to remap characters inside
|
||
a font.</p>
|
||
<p>Displayables in the mask portion of a <a class="reference internal" href="displayables.html#AlphaMask" title="AlphaMask"><code class="xref py py-func docutils literal notranslate"><span class="pre">AlphaMask()</span></code></a> are now focusable,
|
||
allowing new effects.</p>
|
||
<p>The player can now choose to ingore image files that cannot be loaded.</p>
|
||
<p>The new <a class="reference internal" href="other.html#renpy.get_sdl_dll" title="renpy.get_sdl_dll"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.get_sdl_dll()</span></code></a> and <a class="reference internal" href="other.html#renpy.get_sdl_window_pointer" title="renpy.get_sdl_window_pointer"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.get_sdl_window_pointer()</span></code></a>
|
||
functions make it possible to access the SDL DLL using ctypes. This may
|
||
make it possible to implement funcitonality that is in SDL, but Ren'Py
|
||
does not provide access to.</p>
|
||
<p>Clicking now ends a transition 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>,
|
||
or statements that have a <code class="docutils literal notranslate"><span class="pre">with</span></code> clause.</p>
|
||
<p><a class="reference internal" href="translation.html#renpy.translate_string" title="renpy.translate_string"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.translate_string()</span></code></a> is now a documented function that provides
|
||
the ability to translate a string to a selected language.</p>
|
||
<p>It is now possible to create a <code class="docutils literal notranslate"><span class="pre">hide_windows</span></code> label, that provides a way
|
||
to customize the hiding of windows that occurs when middle-clicking or
|
||
pressing the h key.</p>
|
||
<p>New properties, like the <a class="reference internal" href="model.html#transform-property-mesh_pad"><code class="xref std std-tpref docutils literal notranslate"><span class="pre">mesh_pad</span></code></a> transform property
|
||
and the <code class="docutils literal notranslate"><span class="pre">gl_pixel_perfect</span></code> gl property, make it possible to
|
||
perform pixel perfect rendering after applying a shader to text.</p>
|
||
<p>The <a class="reference internal" href="input.html#renpy.input" title="renpy.input"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.input()</span></code></a> function now takes properties beginning with
|
||
<code class="docutils literal notranslate"><span class="pre">show_</span></code>, that are passed to the <code class="docutils literal notranslate"><span class="pre">input</span></code> screen.</p>
|
||
<p>The <a class="reference internal" href="color_class.html#Color" title="Color"><code class="xref py py-class docutils literal notranslate"><span class="pre">Color</span></code></a> class now has an rgba property, that returns an
|
||
rgba tuple.</p>
|
||
</div>
|
||
<div class="section" id="old-features">
|
||
<h3>Old Features<a class="headerlink" href="#old-features" title="Permalink to this headline"> link</a></h3>
|
||
<p>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 was introduced in Ren'Py 7.4, as a way
|
||
to allow the mouse cursor to be changed without changing <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>
|
||
at runtime, as changing config variables at runtime isn't supported.</p>
|
||
</div>
|
||
<div class="section" id="id29">
|
||
<h3>Other Fixes<a class="headerlink" href="#id29" title="Permalink to this headline"> link</a></h3>
|
||
<p>An issue that prevented multiple modal screens from being processed correctly
|
||
has been fixed. This would manifest as focus problems.</p>
|
||
<p>Lint now produces files with Windows-style newlines, on Windows.</p>
|
||
<p>SDL error messages are decoded using the system encoding on Windows, making
|
||
them more readable.</p>
|
||
<p>Issues with quoting unicode characters in Python have been fixed.</p>
|
||
<p>Values of the <a class="reference internal" href="atl.html#transform-property-blur"><code class="xref std std-tpref docutils literal notranslate"><span class="pre">blur</span></code></a> transform property between 0 and 1 now work properly.</p>
|
||
<p>The {done} text tag now works as defined.</p>
|
||
<p>Ren'Py is better at checking for GL load failuires and falling back to older
|
||
libraries.</p>
|
||
<p>Apps built for macOS should enable HighDPI mode.</p>
|
||
</div>
|
||
<div class="section" id="id30">
|
||
<h3>Translations<a class="headerlink" href="#id30" title="Permalink to this headline"> link</a></h3>
|
||
<p>The Ren'Py documentation has been translated into both Simplified and
|
||
Traditional Chinese, courtesy of 被诅咒的章鱼 and 逆转咸鱼.</p>
|
||
<p>The French translations have been updated.</p>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="renpy-7-4-2">
|
||
<span id="id31"></span><h2>7.4.2<a class="headerlink" href="#renpy-7-4-2" title="Permalink to this headline"> link</a></h2>
|
||
<div class="section" id="fixes-and-changes">
|
||
<h3>Fixes and Changes<a class="headerlink" href="#fixes-and-changes" title="Permalink to this headline"> link</a></h3>
|
||
<p>The new <a class="reference internal" href="config.html#var-config.context_fadeout_music"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.context_fadeout_music</span></code></a> and <a class="reference internal" href="config.html#var-config.context_fadein_music"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.context_fadein_music</span></code></a>
|
||
variables make it possible to fade out and in music when a game is loaded or
|
||
other context changes cause the music to change.</p>
|
||
<p>Ren'Py now searches for Live2D motion and expression files using the
|
||
extensions (.motion3.json and .exp3.json), rather than using
|
||
directory names.</p>
|
||
<p>The new <a class="reference internal" href="build.html#var-build.include_i686"><code class="xref std std-var docutils literal notranslate"><span class="pre">build.include_i686</span></code></a> variable determines if the 32-bit
|
||
versions of Ren'Py are included in the build. Not including 32-bit
|
||
binaries can reduced download size and prevent overzealous antivirus
|
||
programs from incorrectly reporting distributions as infected.</p>
|
||
<p>The new <a class="reference internal" href="build.html#var-build.change_icon_i686"><code class="xref std std-var docutils literal notranslate"><span class="pre">build.change_icon_i686</span></code></a> will prevent the icon for the
|
||
i686 version from being changed. This may prevent antivirus programs
|
||
from incorrect detections.</p>
|
||
<p>Ren'Py will no longer disable the screen saver or prevent the
|
||
system from going to sleep when a game is running.</p>
|
||
<p>A macOS issue with the operating system's fullscreen (invoked using the gree
|
||
button) disabling resizing, and hence preventing the window from being
|
||
restored to it's normal size, has been resolved.</p>
|
||
<p>A crash on raspberry pi displaying a webp image has been fixed.</p>
|
||
<p>This release fixes missing files caused by a mistake in the build process:</p>
|
||
<ul class="simple">
|
||
<li>The say.vbs file was missing, preventing self-voicing from working on
|
||
Windows.</li>
|
||
<li>Various files required to support ANGLE were missing, which prevented
|
||
DirectX rendering from working.</li>
|
||
</ul>
|
||
</div>
|
||
<div class="section" id="id32">
|
||
<h3>Android<a class="headerlink" href="#id32" title="Permalink to this headline"> link</a></h3>
|
||
<p>There is a known issue with Samsung devices with the magnification shortcut
|
||
enabled, where the game may become unresponsive. I'm working on a fix, but
|
||
didn't want to delay the release for this.</p>
|
||
<p>The detection of the JVM on macOS is more robust, and less likely to
|
||
be confused by a browser plug-in.</p>
|
||
<p>Ren'Py now recommends the use of AdoptOpenJDK as a source for the
|
||
JVM.</p>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="renpy-7-4-1">
|
||
<span id="id33"></span><h2>7.4.1<a class="headerlink" href="#renpy-7-4-1" title="Permalink to this headline"> link</a></h2>
|
||
<div class="section" id="pause-statement-changes">
|
||
<h3>Pause Statement Changes<a class="headerlink" href="#pause-statement-changes" title="Permalink to this headline"> link</a></h3>
|
||
<p>The behavior of the <code class="docutils literal notranslate"><span class="pre">pause</span></code> statement with a time has changed, so that:</p>
|
||
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">pause</span> <span class="mf">1.0</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>is now equivalent to:</p>
|
||
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">$</span> <span class="n">renpy</span><span class="o">.</span><span class="k">pause</span><span class="p">(</span><span class="mf">1.0</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>and not:</p>
|
||
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">with</span> <span class="n">Pause</span><span class="p">(</span><span class="mf">1.0</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>This means that other features that expect a real pause will work during the
|
||
pause statement.</p>
|
||
<p>Modal screens no longer block the <code class="docutils literal notranslate"><span class="pre">pause</span></code> statement, or <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>.
|
||
this means that a pause can end even if a modal screen is displayed above it.</p>
|
||
</div>
|
||
<div class="section" id="say-statement-id-clause">
|
||
<h3>Say Statement Id Clause<a class="headerlink" href="#say-statement-id-clause" title="Permalink to this headline"> link</a></h3>
|
||
<p>The say statement has now grown an <code class="docutils literal notranslate"><span class="pre">id</span></code> clause, that lets you specify the
|
||
old say statement id. This is useful for changing a say statement in the
|
||
original language, such as to fix an obvious typo, without needing to
|
||
update all the translations.</p>
|
||
<p>To use it, just add <code class="docutils literal notranslate"><span class="pre">id</span></code> to the say statement, followed by the
|
||
statement id:</p>
|
||
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="n">e</span> <span class="s2">"This used to have a typo."</span> <span class="na">id</span> <span class="n">start_61b861a2</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="live2d">
|
||
<h3>Live2D<a class="headerlink" href="#live2d" title="Permalink to this headline"> link</a></h3>
|
||
<p>Live2D support has has a <cite>default_fade</cite> argument added, which can change the
|
||
default duration of fades at the start and end of motions and expressions.</p>
|
||
<p>An issue with Live2D that manifested as a tuple error has been fixed.</p>
|
||
</div>
|
||
<div class="section" id="controller-blocklist">
|
||
<h3>Controller Blocklist<a class="headerlink" href="#controller-blocklist" title="Permalink to this headline"> link</a></h3>
|
||
<p>The Nintendo Switch Pro Controller, when connected to a computer by
|
||
USB, requires an initialization sequence to be sent to cause it to
|
||
act as a Joystick, and not return incorrect data.</p>
|
||
<p>Ren'Py 7.4.0 attempted to send this sequence, but doing so required
|
||
directly accessing the USB bus, which was causing crashes and long
|
||
pauses on some computer. We've decided that this functionality is too
|
||
prone to compatibility problems to include in Ren'Py.</p>
|
||
<p>As a result, the Switch Pro Controller has been added to a new
|
||
controller blocklist, and will not function in Ren'Py.</p>
|
||
</div>
|
||
<div class="section" id="macos">
|
||
<h3>macOS<a class="headerlink" href="#macos" title="Permalink to this headline"> link</a></h3>
|
||
<p>The minimum supported version of macOS is now 10.10 (Yosemite). Ren'Py
|
||
7.4 did not run on this version, so this represents a restoration of
|
||
support for this version.</p>
|
||
<p>Choosing the projects directory was broken on macOS 11.0 (Big Sur).
|
||
This has been fixed.</p>
|
||
<p>Pyobjus is now part of the macOS build of Ren'Py, in addition to
|
||
the iOS build. This library makes it possible to access Cocoa APIs.</p>
|
||
</div>
|
||
<div class="section" id="id34">
|
||
<h3>Android<a class="headerlink" href="#id34" title="Permalink to this headline"> link</a></h3>
|
||
<p>There have been reports that prereleases of Ren'Py 7.4.1 will not run
|
||
properly on older Android devices, like the Samsung Galaxy S5. We
|
||
are attempting to acquire an example of a device exhibiting the
|
||
problem, and will make a new release as required.</p>
|
||
</div>
|
||
<div class="section" id="id35">
|
||
<h3>Translations<a class="headerlink" href="#id35" title="Permalink to this headline"> link</a></h3>
|
||
<p>The Spanish translation has been updated.</p>
|
||
</div>
|
||
<div class="section" id="id36">
|
||
<h3>Other Fixes<a class="headerlink" href="#id36" title="Permalink to this headline"> link</a></h3>
|
||
<p>An issue that could cause crashes on movies of certain sizes when
|
||
Ren'Py was run on a computer that supports SSE3 has been fixed.</p>
|
||
<p>Movie playback now uses multiple cores for video decoding, as it
|
||
did in previous versions of Ren'Py.</p>
|
||
<p>An issue that could cause the size of the Ren'Py window to increase
|
||
when run on Windows with a non-100% DPI has been fixed.</p>
|
||
<p>Ren'Py will no longer give a performance warning when an unsupported
|
||
renderer is selected, such as when using the GL or ANGLE renderer on
|
||
a game that requires gl2.</p>
|
||
<p>An issue that would, in some cases, prevent say attributes from being
|
||
shown has been fixed.</p>
|
||
<p>An issue preventing MultiPersistent files from working on computers that
|
||
do not use UTF-8 at the default file encoding has been fixed.</p>
|
||
<p>The flags for compiling Python when <code class="docutils literal notranslate"><span class="pre">rpy</span> <span class="pre">python</span> <span class="pre">3</span></code> is enabled have been
|
||
improved.</p>
|
||
<p>An issue that prevented triple-quoted strings (like the strings used for
|
||
gui.about) from being evaluated correctly has been fixed.</p>
|
||
<p>Ren'Py now detects its path during certain reloads.</p>
|
||
<p>Ren'Py will determine of all functions a renderer requires can be
|
||
dynamically loaded, and will try different renderers if this is not
|
||
the case.</p>
|
||
<p>Timers that are created after the start of a statement now properly
|
||
participate in the rollback system, and will fire if the game rolls
|
||
back to a point where the timer has not fired.</p>
|
||
<p>Ren'Py now allows the screensaver to activate while a Ren'Py game is
|
||
running.</p>
|
||
<p>A problem with dynamic variables not remaining dynamic during a rollback
|
||
has been fixed.</p>
|
||
<p>When given a size, the hbox and vbox displayables now position children
|
||
in the same way those children were positioned in Ren'Py 7.4.</p>
|
||
<p>The new <a class="reference internal" href="style_properties.html#style-property-mipmap"><code class="xref std std-propref docutils literal notranslate"><span class="pre">mipmap</span></code></a> style property applies to 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, the <a class="reference internal" href="displayables.html#AlphaMask" title="AlphaMask"><code class="xref py py-func docutils literal notranslate"><span class="pre">AlphaMask()</span></code></a>, <a class="reference internal" href="movie.html#Movie" title="Movie"><code class="xref py py-func docutils literal notranslate"><span class="pre">Movie()</span></code></a>, and <a class="reference internal" href="text.html#Text" title="Text"><code class="xref py py-func docutils literal notranslate"><span class="pre">Text()</span></code></a>
|
||
displayables, and text in general. This property controls if mipmaps are
|
||
generated for the textures created by these displayables. Avoiding creating
|
||
mipmaps may improve rendering performance on slower computers, but
|
||
can lead to artifacts when scaling down. When not specified, this property
|
||
defaults to <a class="reference internal" href="config.html#var-config.mipmap_dissolves"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.mipmap_dissolves</span></code></a>, <a class="reference internal" href="config.html#var-config.mipmap_movies"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.mipmap_movies</span></code></a>, or
|
||
<a class="reference internal" href="config.html#var-config.mipmap_text"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.mipmap_text</span></code></a>, as appropriate.</p>
|
||
<p>The toggle version of self-voicing preferences have been changed to
|
||
provide a better selected state.</p>
|
||
<p>Lint now once again reports statistics by translation.</p>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="renpy-7-4">
|
||
<span id="id37"></span><h2>7.4.0<a class="headerlink" href="#renpy-7-4" title="Permalink to this headline"> link</a></h2>
|
||
<div class="section" id="id38">
|
||
<h3>Model-Based Renderer<a class="headerlink" href="#id38" title="Permalink to this headline"> link</a></h3>
|
||
<p>This release includes a new model-based renderer, the component of Ren'Py that
|
||
is responsible for drawing text and images to the user's display, supplementing
|
||
(with the intent of eventually replacing) the original OpenGL renderer added
|
||
in Ren'Py 6.10. This renderer takes better advantage of the hardware present
|
||
in modern GPUS (both dedicated graphics cards and GPUs integrated into
|
||
processors) to improve performance and increase capability. This renderer
|
||
supports desktop computers that support either OpenGL 2.2 or DirectX 9.0c or
|
||
11, and mobile devices and embedded systems that support OpenGL ES 3.</p>
|
||
<p>The biggest change in the model-based renderer is that Ren'Py is no longer
|
||
limited to drawing rectangular images in a 2-dimensional plane. Instead,
|
||
Ren'Py has been converted to use meshes made up of triangles in a
|
||
three-dimensional space. While existing rectangular sprites are
|
||
displayed in the same way, this opens up Ren'Py to non-rectangular
|
||
meshes, and eventually full three dimensional geometry.</p>
|
||
<p>In addition to mesh geometry, model-based renderering supports shaders,
|
||
both shaders included with Ren'Py, and shaders specified by creators as
|
||
part of their game. Shaders are small programs that run on the GPU, that
|
||
can process geometry and pixel data, to allow for all sorts of graphical
|
||
effects.</p>
|
||
<p>The model-based renderer implements a new fast texture loading system,
|
||
which moves an expensive part of texture loading, alpha
|
||
premultiplication, from the CPU to the GPU.</p>
|
||
<p>The model-based renderer also creates mipmaps for each texture that is loaded
|
||
into the GPU. A mipmap is a series of smaller versions of the texture,
|
||
stored on the GPU. By creating and utilizing mipmaps, Ren'Py is now able
|
||
to shrink images below 50% of the original size, without the appearance
|
||
of the aliasing artifacts. This is especially relevant when assets meant
|
||
for 4K monitors are used on 1080P and smaller displays.</p>
|
||
<p>For this release, the Model-Based Renderer is opt in, with that opt-in
|
||
controlled by the <a class="reference internal" href="model.html#var-config.gl2"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.gl2</span></code></a> variable. As we gain more experience
|
||
with it, it is indended to be come the default Ren'Py renderer.</p>
|
||
</div>
|
||
<div class="section" id="id39">
|
||
<h3>Live2D<a class="headerlink" href="#id39" title="Permalink to this headline"> link</a></h3>
|
||
<p>One of the features enabled by the model-based renderer is support for
|
||
displaying sprites made in Live2D. Ren'Py requires you to download Live2D
|
||
Cubism separately, as you'll need to execute a contract with Live2D, Inc.
|
||
before distributing a game that uses their technology.</p>
|
||
<p>Ren'Py supports the display of Live2D models, complete with the ability to
|
||
change expression and to queue up one or more motions. This is integrated
|
||
into Ren'Py's image attribute system. Ren'Py also supports fading from
|
||
one motion to another when an attribute changes.</p>
|
||
</div>
|
||
<div class="section" id="matrixcolor-and-blur">
|
||
<h3>Matrixcolor and Blur<a class="headerlink" href="#matrixcolor-and-blur" title="Permalink to this headline"> link</a></h3>
|
||
<p>The model-based renderer enables new functionality in transforms, such as
|
||
matrixcolor and blur.</p>
|
||
<p>Transforms (including ATL Transforms) now support a new <a class="reference internal" href="atl.html#transform-property-matrixcolor"><code class="xref std std-tpref docutils literal notranslate"><span class="pre">matrixcolor</span></code></a>
|
||
property, which either a matrix or an object that creates a matrix that
|
||
changes in time, and uses it to recolor everything that is a child of the
|
||
transform.</p>
|
||
<p>While previous versions of Ren'Py supported the <a class="reference internal" href="im.html#im.MatrixColor" title="im.MatrixColor"><code class="xref py py-func docutils literal notranslate"><span class="pre">im.MatrixColor()</span></code></a> image
|
||
manipulator, the new property is much improved. The image manipulator would
|
||
often take a large fraction of a second, making it too slow for real-time use,
|
||
and was limited to single images. The new transform property is fast enough
|
||
that it can be changed every frame if necessary, and can be applied to
|
||
any displayable. It's now possible to apply a Transform using matrixcolor
|
||
to a layer, to recolor the entire layer - making it possible to push your
|
||
game into sepia or black-and-white without needing a separate set of
|
||
images.</p>
|
||
<p>There are a few difference between the image manipulator and the the
|
||
transform property versions of matrixcolor, as the new version uses
|
||
4x4 matrices and premultiplied alpha color, so the new property can't
|
||
use the same matrices. Instead, there are number of new <a class="reference internal" href="matrixcolor.html#colormatrix"><span class="std std-ref">ColorMatrix</span></a>
|
||
objects that need to be used.</p>
|
||
<p>Transforms also support a new <a class="reference internal" href="atl.html#transform-property-blur"><code class="xref std std-tpref docutils literal notranslate"><span class="pre">blur</span></code></a> property, which blurs the child
|
||
of the displayable by the given number of pixels.</p>
|
||
</div>
|
||
<div class="section" id="python-2-python-3-compatibility-mode">
|
||
<h3>Python 2/Python 3 Compatibility Mode<a class="headerlink" href="#python-2-python-3-compatibility-mode" title="Permalink to this headline"> link</a></h3>
|
||
<p>While Ren'Py is not yet supported on Python 3, this release of Ren'Py
|
||
includes several features to allow you to begin writing scripts that will
|
||
work on both Python 2 and Python 3.</p>
|
||
<p>First, Ren'Py now uses <a class="reference external" href="https://python-future.org/">future</a> to provide
|
||
standard library compatibility. It's now possible to import modules using
|
||
their Python 3 names, when a renaming has occured.</p>
|
||
<p>When a .rpyc file begins with the new <code class="docutils literal notranslate"><span class="pre">rpy</span> <span class="pre">python</span> <span class="pre">3</span></code>, the file is compiled
|
||
in a Python 3 compatibility mode. The two changes this causes are:</p>
|
||
<ul class="simple">
|
||
<li>Ren'Py will compile the file in a mode that attempts to emulate Python 3
|
||
semantics, including the change to division. In Python 3, <code class="docutils literal notranslate"><span class="pre">1/2</span></code> is equal
|
||
to .5, and not 0. Since this changes the type of the expression,
|
||
this can change the position of displayables. <code class="docutils literal notranslate"><span class="pre">1//2</span></code> keeps the original
|
||
semantics.</li>
|
||
<li>Ren'Py will change the behavior of dict so that the <code class="docutils literal notranslate"><span class="pre">items</span></code>, <code class="docutils literal notranslate"><span class="pre">keys</span></code>, and
|
||
<code class="docutils literal notranslate"><span class="pre">values</span></code> methods return views, rather than lists, when called directly
|
||
from that .rpy file. These match the Python 3 semantics for these methods,
|
||
but need to be explicitly turned into a list before being saved or participating
|
||
in rollback.</li>
|
||
</ul>
|
||
</div>
|
||
<div class="section" id="upgraded-libraries-and-platform-support">
|
||
<h3>Upgraded Libraries and Platform Support<a class="headerlink" href="#upgraded-libraries-and-platform-support" title="Permalink to this headline"> link</a></h3>
|
||
<p>For Ren'Py 7.4, the build system was redone, replacing the multiple build
|
||
systems needed to build Ren'Py with a single build platform that handles
|
||
every platform except for webasm. The change in build system also involved
|
||
updating all of the libraries that Ren'Py uses to newer versions.</p>
|
||
<p>As a result of this, the list of platforms that Ren'Py offically supports
|
||
has changed slightly. Here's the latest list of what is supported:</p>
|
||
<table border="1" class="docutils">
|
||
<colgroup>
|
||
<col width="33%" />
|
||
<col width="33%" />
|
||
<col width="33%" />
|
||
</colgroup>
|
||
<thead valign="bottom">
|
||
<tr class="row-odd"><th class="head">Platform</th>
|
||
<th class="head">CPU</th>
|
||
<th class="head">Note</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody valign="top">
|
||
<tr class="row-even"><td>Linux</td>
|
||
<td>x86_64</td>
|
||
<td>Raised minimum version to Ubuntu 16.04</td>
|
||
</tr>
|
||
<tr class="row-odd"><td>Linux</td>
|
||
<td>i686</td>
|
||
<td>Raised minimum version to Ubuntu 16.04</td>
|
||
</tr>
|
||
<tr class="row-even"><td>Linux</td>
|
||
<td>i686</td>
|
||
<td>Raised minimum version to Ubuntu 16.04</td>
|
||
</tr>
|
||
<tr class="row-odd"><td>Linux</td>
|
||
<td>armv7l</td>
|
||
<td>Intended to support Raspberry Pi, uses Raspian Buster</td>
|
||
</tr>
|
||
<tr class="row-even"><td>Windows</td>
|
||
<td>x86_64</td>
|
||
<td>A new port to 64-bit Windows Vista and later.</td>
|
||
</tr>
|
||
<tr class="row-odd"><td>Windows</td>
|
||
<td>i686</td>
|
||
<td>Raised minimum version to Windows Vista.</td>
|
||
</tr>
|
||
<tr class="row-even"><td>macOS</td>
|
||
<td>x86_64</td>
|
||
<td>macOS 10.10+</td>
|
||
</tr>
|
||
<tr class="row-odd"><td>Android</td>
|
||
<td>armv7a</td>
|
||
<td>Android 4.4 KitKat</td>
|
||
</tr>
|
||
<tr class="row-even"><td>Android</td>
|
||
<td>arm64</td>
|
||
<td>Android 5.0 Lollipop</td>
|
||
</tr>
|
||
<tr class="row-odd"><td>Android</td>
|
||
<td>x86_64</td>
|
||
<td>Android 5.0 Lollipop</td>
|
||
</tr>
|
||
<tr class="row-even"><td>iOS</td>
|
||
<td>arm64</td>
|
||
<td>All 64-bit iOS devices, iOS 11.0+</td>
|
||
</tr>
|
||
<tr class="row-odd"><td>iOS</td>
|
||
<td>x86_64</td>
|
||
<td>The 64-bit iOS simulator, iOS 11.0+</td>
|
||
</tr>
|
||
<tr class="row-even"><td>Web</td>
|
||
<td>webasm</td>
|
||
<td>Modern web browsers</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p>The biggest new platform that Ren'Py supports is the 64-bit Windows
|
||
platform, which means that Ren'Py is available in 64-bits on all major
|
||
desktop and mobile platforms. The new <code class="xref std std-var docutils literal notranslate"><span class="pre">renpy.bits</span></code> variable can
|
||
be used to determine if Ren'Py is running on a 32 or 64-bit platform,
|
||
if necessary. (For example, to set <a class="reference internal" href="config.html#var-config.image_cache_size_mb"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.image_cache_size_mb</span></code></a> appropriately.)</p>
|
||
<p>The one platform that loses support in this release is 32-bit (armv7l) iOS
|
||
devices. These devices are no longer supported by Apple, and do not support
|
||
the level of OpenGL ES that Ren'Py requires.</p>
|
||
</div>
|
||
<div class="section" id="web">
|
||
<h3>Web<a class="headerlink" href="#web" title="Permalink to this headline"> link</a></h3>
|
||
<p>Ren'Py now runs significantly faster in the browser, thanks to new
|
||
compilation techniques.</p>
|
||
<p>A game built for the web platform can now download image and audio
|
||
files from the web server as the game is played. The download begins
|
||
when the image or sound is predicted. This can reduce the initial time
|
||
it takes before the game begins running, as well as memory usage.</p>
|
||
<p>When running inside a web browser on a touch-screen device, Ren'Py
|
||
will display a touch-based keyboard, to compensate for web browsers
|
||
having difficulty displaying keyboard entry for wasm-based games.</p>
|
||
<p>The splash screen displayed while loading can use the WebP format,
|
||
including animated WebP.</p>
|
||
<p>More Python modules are provided, making the Python environment closer
|
||
to native Ren'Py ports.</p>
|
||
<p>Support for iOS browsers was improved.</p>
|
||
</div>
|
||
<div class="section" id="steam">
|
||
<h3>Steam<a class="headerlink" href="#steam" title="Permalink to this headline"> link</a></h3>
|
||
<p>It is now possible to install Steam support from the Ren'Py launcher, by
|
||
choosing "preferences", "Install libraries", "Install Steam Support".</p>
|
||
<p>The new <a class="reference internal" href="achievement.html#var-config.steam_appid"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.steam_appid</span></code></a> variable automatically creates the
|
||
steam_appid.txt file for you. This needs to be set by a <code class="docutils literal notranslate"><span class="pre">define</span></code> statement,
|
||
or in a python early block.</p>
|
||
</div>
|
||
<div class="section" id="id40">
|
||
<h3>Translations<a class="headerlink" href="#id40" title="Permalink to this headline"> link</a></h3>
|
||
<p>The Simplified Chinese, Japanese, and Korean translations have been updated, and now
|
||
use a unified font.</p>
|
||
<p>There is a new Simplified Chinese translation of the tutorial game, courtesy of
|
||
Neoteus.</p>
|
||
</div>
|
||
<div class="section" id="depreciations-and-removals">
|
||
<h3>Depreciations and Removals<a class="headerlink" href="#depreciations-and-removals" title="Permalink to this headline"> link</a></h3>
|
||
<p>As described above, Ren'Py no longer support Windows XP.</p>
|
||
<p>As described above, Ren'Py no longer supports 32-bit iOS devices.</p>
|
||
<p>The choice of downloading the Editra text editor has been removed from Ren'Py.
|
||
Editra hadn't been updated in over 5 years, and the website it was originally
|
||
distributed from has disappeared.</p>
|
||
<p>While not completely removed, the software renderer has been simplified and
|
||
removed as an option for gameplay. Its purposes is now limited to informing
|
||
players about issues that prevent display of graphics with a GPU-based
|
||
renderer.</p>
|
||
</div>
|
||
<div class="section" id="miscellaneous">
|
||
<h3>Miscellaneous<a class="headerlink" href="#miscellaneous" title="Permalink to this headline"> link</a></h3>
|
||
<p>Support for controllers has been improved. Repeat is now supported
|
||
on controllers, and the libraries that Ren'Py uses have been compiled
|
||
to support many of the more popular game controllers.</p>
|
||
<p>Ren'Py now uses software playback of movies on Android and iOS devices,
|
||
meaning the same files can be used on all platforms that support video
|
||
playback.</p>
|
||
<p>Defining a mouse cursor using <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> now uses SDL2's color cursor
|
||
API, which generally results in hardware acceleration and reduced mouse movement
|
||
lag.</p>
|
||
<p>The <code class="docutils literal notranslate"><span class="pre">define</span></code> statement can now be used to set a key in a dictionary.</p>
|
||
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="c1"># Ren'Py was started in 2004.</span>
|
||
<span class="k">define</span> <span class="n">age</span><span class="p">[</span><span class="s2">"eileen"</span><span class="p">]</span> <span class="o">=</span> <span class="mi">2020</span> <span class="o">-</span> <span class="mi">2004</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>The <code class="docutils literal notranslate"><span class="pre">define</span></code> statement can take += and |=, to apply the appropriate
|
||
update operators.</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">keymap</span><span class="p">[</span><span class="s1">'dismiss'</span><span class="p">]</span> <span class="o">+=</span> <span class="p">[</span> <span class="s1">'K_KP_PLUS'</span> <span class="p">]</span>
|
||
|
||
<span class="c1"># This assumes endings is a set.</span>
|
||
<span class="k">define</span> <span class="n">endings</span> <span class="o">|=</span> <span class="p">{</span> <span class="s2">"best"</span> <span class="p">}</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>It is now possible to specify a relative audio channel whenever an
|
||
audio is file is played, using the new <code class="docutils literal notranslate"><span class="pre">volume</span></code> clause to <code class="docutils literal notranslate"><span class="pre">play</span></code> and
|
||
<code class="docutils literal notranslate"><span class="pre">queue</span></code>.</p>
|
||
<p>The new <a class="reference internal" href="atl.html#transform-property-fit"><code class="xref std std-tpref docutils literal notranslate"><span class="pre">fit</span></code></a> property of transforms provides for different ways
|
||
of making an image fit size with a different aspect ratio. For example,
|
||
it can be scaled to be contained fully within the given size, or to make sure that
|
||
it completely covers the given size.</p>
|
||
<p>The <a class="reference internal" href="atl.html#transform-property-xpan"><code class="xref std std-tpref docutils literal notranslate"><span class="pre">xpan</span></code></a> and <a class="reference internal" href="atl.html#transform-property-ypan"><code class="xref std std-tpref docutils literal notranslate"><span class="pre">ypan</span></code></a> transform properties no longer double
|
||
the size of the displayable they are applied to, making them easier to combine
|
||
with positioning transform properties.</p>
|
||
<p>The <a class="reference internal" href="input.html#renpy.input" title="renpy.input"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.input()</span></code></a> function can now take regular expressions when determining
|
||
what is and is not allowed.</p>
|
||
<p>Grids now take <a class="reference internal" href="style_properties.html#style-property-margin"><code class="xref std std-propref docutils literal notranslate"><span class="pre">margin</span></code></a> style properties, that is applied outside the
|
||
grid, and inside a containing viewport.</p>
|
||
<p>Ren'Py support an {alt} text tag, that causes the text to be spoken during
|
||
self-voicing, but not displayed. It also supports a {noalt} text tag that does
|
||
the opposite.</p>
|
||
<p>The launcher window can now be resized if necessary. A button has been added to
|
||
the launcher preferences to restore the default size.</p>
|
||
<p>The new <a class="reference internal" href="build.html#var-build.mac_info_plist"><code class="xref std std-var docutils literal notranslate"><span class="pre">build.mac_info_plist</span></code></a> variable makes it easier to customize
|
||
the mac app.</p>
|
||
<p>The <a class="reference external" href="https://requests.readthedocs.io/en/master/">requests</a> library, is
|
||
bundled with Ren'Py, making accessing the web much easier.</p>
|
||
<p>Pressing PAUSE on your keyboard brings the player to the game menu, finally
|
||
giving that key a function.</p>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="renpy-7-3-5">
|
||
<span id="id41"></span><h2>7.3.5<a class="headerlink" href="#renpy-7-3-5" title="Permalink to this headline"> link</a></h2>
|
||
<div class="section" id="id42">
|
||
<h3>Fixes<a class="headerlink" href="#id42" title="Permalink to this headline"> link</a></h3>
|
||
<p>On desktop platforms, the presplash screen has been reworked so that it
|
||
will not cause the window to become nonresponsive if clicked.</p>
|
||
<p>The iOS port has been updated to include modules that have been newly
|
||
added to Ren'Py, allowing the compilation of iOS apps.</p>
|
||
</div>
|
||
<div class="section" id="id43">
|
||
<h3>Other Changes<a class="headerlink" href="#id43" title="Permalink to this headline"> link</a></h3>
|
||
<p>The <code class="docutils literal notranslate"><span class="pre">audio</span></code> directory, which automatically defines
|
||
names in the <a class="reference internal" href="audio.html#audio-namespace"><span class="std std-ref">audio namespace</span></a>, has been made
|
||
visible in the launcher, and is added to newly-createrd projects.</p>
|
||
<p>The new <a class="reference internal" href="config.html#var-config.exception_handler"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.exception_handler</span></code></a> callback allows an application to
|
||
replace Ren'Py's exception handling system in its entirety.</p>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="renpy-7-3-4">
|
||
<span id="id44"></span><h2>7.3.4<a class="headerlink" href="#renpy-7-3-4" title="Permalink to this headline"> link</a></h2>
|
||
<div class="section" id="id45">
|
||
<h3>Fixes<a class="headerlink" href="#id45" title="Permalink to this headline"> link</a></h3>
|
||
<p>This release fixes major graphics glitches that were introduced in 7.3.3.</p>
|
||
<ul class="simple">
|
||
<li>On Windows, textures would fail to be reloaded when switching from fullscreen
|
||
to windowed mode or vice-versa. This would cause the wrong texture to be
|
||
displayed.</li>
|
||
<li>On all platforms, graphical glitches could occur when <a class="reference internal" href="displayables.html#Flatten" title="Flatten"><code class="xref py py-func docutils literal notranslate"><span class="pre">Flatten()</span></code></a>
|
||
was used.</li>
|
||
</ul>
|
||
</div>
|
||
<div class="section" id="id46">
|
||
<h3>Other Changes<a class="headerlink" href="#id46" title="Permalink to this headline"> link</a></h3>
|
||
<p>Dynamic images can now include "[prefix_]" everywhere, and especially when
|
||
<code class="docutils literal notranslate"><span class="pre">add</span></code> has been used to add a dynamic image to buttons, drags, and similar
|
||
focusable objects.</p>
|
||
<p>Creator-defined screen language statements may now take <code class="docutils literal notranslate"><span class="pre">if</span></code>
|
||
statements as children.</p>
|
||
<p>The drag and drop system has been improved to better interact with updated
|
||
screens.</p>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="renpy-7-3-3">
|
||
<span id="id47"></span><h2>7.3.3<a class="headerlink" href="#renpy-7-3-3" title="Permalink to this headline"> link</a></h2>
|
||
<div class="section" id="audio">
|
||
<h3>Audio<a class="headerlink" href="#audio" title="Permalink to this headline"> link</a></h3>
|
||
<p>Ren'Py now supports an <code class="docutils literal notranslate"><span class="pre">audio</span></code> directory, which automatically defines
|
||
names in the <a class="reference internal" href="audio.html#audio-namespace"><span class="std std-ref">audio namespace</span></a>. This makes it
|
||
possible to have a file named <code class="docutils literal notranslate"><span class="pre">game/audio/overture.ogg</span></code>, and play
|
||
it using:</p>
|
||
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">play</span> <span class="k">music</span> <span class="n">overture</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>The new <a class="reference internal" href="audio.html#AudioData" title="AudioData"><code class="xref py py-func docutils literal notranslate"><span class="pre">AudioData()</span></code></a> class allows you to provide compressed
|
||
audio data to Ren'Py, either generated programatically or taken
|
||
from a source other than a file. To support this, the Python wave
|
||
and sunau modules are now packaged with Ren'Py.</p>
|
||
<p>An issue with enabling the mixing of mono sound files has been fixed.
|
||
This issue caused many WAV files not to play. (We still don't recommend
|
||
the use of WAV files.)</p>
|
||
</div>
|
||
<div class="section" id="platforms">
|
||
<h3>Platforms<a class="headerlink" href="#platforms" title="Permalink to this headline"> link</a></h3>
|
||
<p>Ren'Py is now distributed as a signed and notarized binary on the
|
||
Mac. As this process takes a very long time to accomplish, the
|
||
ability to sign macOS binaries has been removed from Ren'Py itself,
|
||
in favor of external scripts that take care of the signing and
|
||
notarization process.</p>
|
||
<p>The minimum version supported by the Android port has been lowered
|
||
to Android 19 (Android 4.4 KitKat).</p>
|
||
<p>The web port of Ren'Py has seen a number of changes:</p>
|
||
<ul class="simple">
|
||
<li><a class="reference internal" href="screens.html#screen-variants"><span class="std std-ref">Screen variants</span></a> are now detected and set.</li>
|
||
<li>Fullscreen support has been improved, though the user may need to click to enable fullscren.</li>
|
||
<li>Leaving the web page is detected, so persistent data may be saved.</li>
|
||
<li>'game.zip' can now be renamed. 'DEFAULT_GAME_FILENAME' in index.html controls this.</li>
|
||
<li>Portable HTTP requests (native+renpyweb): see <a class="reference external" href="https://github.com/renpy/renpyweb/blob/master/utils/asyncrequest.rpy">https://github.com/renpy/renpyweb/blob/master/utils/asyncrequest.rpy</a></li>
|
||
<li>Enable networking in Python web port for testing WebSockets, transparently available through the Python 'socket' module</li>
|
||
<li>HTTP Cache-Control allows for smoother game updates.</li>
|
||
<li>The pygame.draw module is now included, allowing Canvas support.</li>
|
||
<li>WebGL compatibility has been improved.</li>
|
||
</ul>
|
||
</div>
|
||
<div class="section" id="id48">
|
||
<h3>Other Changes<a class="headerlink" href="#id48" title="Permalink to this headline"> link</a></h3>
|
||
<p>During profiling conducted for the GL Rewrite project, it became
|
||
clear that the switch to framebuffer objects in 7.3.0 was the
|
||
cause of certain performance regressions. By changing how FBOs
|
||
are used, Ren'Py performance has been improved.</p>
|
||
<p>The <a class="reference internal" href="input.html#renpy.input" title="renpy.input"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.input()</span></code></a> function can now be given the name of a screen
|
||
that is used to prompt the user for input.</p>
|
||
<p>The creation of list, dicts, and sets inside of screen language is now
|
||
analyzed correctly. This will allow more displayables to be analyzed
|
||
as constant, improving screen performance.</p>
|
||
<p>The notify screen is now hidden on rollback.</p>
|
||
<p>The NVL mode screen indicates that it shows the window, which prevents
|
||
problems when <code class="docutils literal notranslate"><span class="pre">window</span> <span class="pre">show</span></code> is in effect.</p>
|
||
<p>When a <a class="reference internal" href="screen_actions.html#Call" title="Call"><code class="xref py py-func docutils literal notranslate"><span class="pre">Call()</span></code></a> with <cite>from_current</cite> set to true occurs during a
|
||
multi-part statement (like a menu with dialogue), control is restored
|
||
to the first part of that multi-part statement (thus causing the dialouge
|
||
to be displayed).</p>
|
||
<p>More functions now use a tag's default layer.</p>
|
||
<p>The <a class="reference internal" href="other.html#renpy.is_init_phase" title="renpy.is_init_phase"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.is_init_phase()</span></code></a> function has been added.</p>
|
||
<p>Automatic voice now works for dialogue that is part of a menu
|
||
statement.</p>
|
||
<p>Support for GLES1 has been dropped. (It hadn't been used for years.)</p>
|
||
<p>The <a class="reference internal" href="screen_actions.html#SelectedIf" title="SelectedIf"><code class="xref py py-func docutils literal notranslate"><span class="pre">SelectedIf()</span></code></a> and <a class="reference internal" href="screen_actions.html#SensitiveIf" title="SensitiveIf"><code class="xref py py-func docutils literal notranslate"><span class="pre">SensitiveIf()</span></code></a> actions can now take
|
||
other actions as arguments.</p>
|
||
<p>Many BarValues now take a <cite>force_step</cite> argument, which forces changes to
|
||
the bar to be rounded to the nearest step value.</p>
|
||
<p><a class="reference internal" href="displayables.html#Frame" title="Frame"><code class="xref py py-func docutils literal notranslate"><span class="pre">Frame()</span></code></a> now allows the tile argument to be the string "integer",
|
||
which tiles the contents of the frame an integer number of times.</p>
|
||
<p><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> now allows the <cite>name</cite> argument to be a function or
|
||
callable object when <cite>dynamic</cite> is true.</p>
|
||
</div>
|
||
<div class="section" id="id49">
|
||
<h3>Translations<a class="headerlink" href="#id49" title="Permalink to this headline"> link</a></h3>
|
||
<p>The Korean and Spanish translations have been updated.</p>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="renpy-7-3-2">
|
||
<span id="id50"></span><h2>7.3.2<a class="headerlink" href="#renpy-7-3-2" title="Permalink to this headline"> link</a></h2>
|
||
<div class="section" id="id51">
|
||
<h3>Fixes<a class="headerlink" href="#id51" title="Permalink to this headline"> link</a></h3>
|
||
<p>Fix a regression in the platform variables, caused by the previous
|
||
release.</p>
|
||
</div>
|
||
<div class="section" id="id52">
|
||
<h3>Translations<a class="headerlink" href="#id52" title="Permalink to this headline"> link</a></h3>
|
||
<p>Update the spanish translation.</p>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="renpy-7-3-1">
|
||
<span id="id53"></span><h2>7.3.1<a class="headerlink" href="#renpy-7-3-1" title="Permalink to this headline"> link</a></h2>
|
||
<div class="section" id="id54">
|
||
<h3>Changes<a class="headerlink" href="#id54" title="Permalink to this headline"> link</a></h3>
|
||
<p>Descriptive text (text that is intended to be show when self-voicing is
|
||
enabled, so that scenes can be described to the vision impared) has been
|
||
updated. Descriptive text is now accessed using the <code class="docutils literal notranslate"><span class="pre">alt</span></code> character
|
||
(the old <code class="docutils literal notranslate"><span class="pre">sv</span></code> character has been retained as an alias.) It's also now
|
||
possible to display descriptive text using a custom character, rather than
|
||
the narrator.</p>
|
||
<p>Ren'Py now always initializes the media playback system, so that a movie
|
||
can be played even if no audio will be played.</p>
|
||
<p>The <cite>default</cite> property of most displayables, which is used to choose a
|
||
displayable to be focused by default, has been renamed to <cite>default_focus</cite>
|
||
so that it does not conflict with the <code class="docutils literal notranslate"><span class="pre">default</span></code> statement. It also now
|
||
takes an integer, with the displayable with the highest focus number
|
||
getting focus.</p>
|
||
<p>The <a class="reference internal" href="displayables.html#Flatten" title="Flatten"><code class="xref py py-func docutils literal notranslate"><span class="pre">Flatten()</span></code></a> displayable now passes positions from the child.</p>
|
||
<p>Seeded random number generators created with renpy.random.Random now
|
||
support rollback.</p>
|
||
<p>When emulating Android or iOS, the platform variables (like renpy.android,
|
||
renpy.ios, renpy.windows, and renpy.mobile) are set properly.</p>
|
||
<p>Renpyweb now stores the date and time that a save file was created.</p>
|
||
</div>
|
||
<div class="section" id="id55">
|
||
<h3>Fixes<a class="headerlink" href="#id55" title="Permalink to this headline"> link</a></h3>
|
||
<p>This release fixes a fairly major issue that could cause screens that
|
||
interpolate text to not update, or update improperly.</p>
|
||
<p>This release properly runs the image prediction routine from the
|
||
image prediction thread.</p>
|
||
<p>A problem with the {clear} text tag has been fixed.</p>
|
||
<p>The <a class="reference internal" href="config.html#var-config.end_game_transition"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.end_game_transition</span></code></a>, which was not working properly
|
||
in most circumstances, has been fixed.</p>
|
||
</div>
|
||
<div class="section" id="id56">
|
||
<h3>Translations<a class="headerlink" href="#id56" title="Permalink to this headline"> link</a></h3>
|
||
<p>The Russian, Korean, and Spanish translations were updated.</p>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="renpy-7-3-0">
|
||
<span id="id57"></span><h2>7.3.0<a class="headerlink" href="#renpy-7-3-0" title="Permalink to this headline"> link</a></h2>
|
||
<div class="section" id="renpyweb">
|
||
<h3>Renpyweb<a class="headerlink" href="#renpyweb" title="Permalink to this headline"> link</a></h3>
|
||
<p>Courtesy of Sylvain Beucler, Ren'Py now can generate distributions for
|
||
the the HTML5 web platforms, capable of running on modern web browsers
|
||
that support the Web Assembly standard. This is intended for small games
|
||
and demonstrations of larger games, as right now the implementation
|
||
downloads the full game to the web browser before running any of it.</p>
|
||
<p>Web support is marked as beta, as there are cases where problem with the
|
||
web platform (most notably, a lack of threading) cause problems such as
|
||
sound glitches if an image takes too long to load. As a result, it is
|
||
possible to have a Ren'Py game that works well on all other platforms,
|
||
but not in the web browser. As web browsers themselves improve, we will
|
||
improve our implementation and eventually remove the beta tag.</p>
|
||
<p>Building a web distribution can be done from the new "Web" button
|
||
on the Ren'Py launcher. The launcher now includes a small web server,
|
||
that can be used to launch the game in a creator's web browser for test
|
||
purposes.</p>
|
||
</div>
|
||
<div class="section" id="creator-defined-statements">
|
||
<h3>Creator-Defined Statements<a class="headerlink" href="#creator-defined-statements" title="Permalink to this headline"> link</a></h3>
|
||
<p>Ren'Py's creator-defined statements, and the Lexer objects that are
|
||
used by them, have been extended to improve the functionality in
|
||
many ways. With respect to the Lexer:</p>
|
||
<ul class="simple">
|
||
<li>It is now possible to ask the Lexer object to parse a single
|
||
line as a Ren'Py statement, or all the lines remaining in the
|
||
block as Ren'Py statements.</li>
|
||
<li>It is now possible to ask the lexer to catch errors, so as to
|
||
limit the scope of errors to a part of a creator-defined statement
|
||
rather than the whole statement.</li>
|
||
</ul>
|
||
<p>The <a class="reference internal" href="cds.html#renpy.register_statement" title="renpy.register_statement"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.register_statement()</span></code></a> function has new arguments to enable
|
||
new functionality.</p>
|
||
<ul class="simple">
|
||
<li>Statement prediction can be controlled by the <cite>predict_all</cite> and <cite>predict_next</cite>
|
||
arguments, which predict all possible next statements or take a function
|
||
that determines what will run next, respectively.</li>
|
||
<li>The new <cite>post_execute</cite> argument lets one specify an execute function that is
|
||
run as the next statement - the one after the creator-defined statement.
|
||
This allows a pattern where a statement runs, executes the block inside it,
|
||
and then runs something after the block to clean it up. (For example, an event
|
||
that serves as a label, and then jumps back to a dispatcher when it is done.)</li>
|
||
<li>The new <cite>post_label</cite> argument lets one specify a function to supply the
|
||
a label that goes after the creator-defined statement, which can function
|
||
like the <code class="docutils literal notranslate"><span class="pre">from</span></code> clause to the call statement.</li>
|
||
</ul>
|
||
<p>Ren'Py now stores the result of parsing a creator-defined statement in the
|
||
.rpyc files. While this allows for more complex syntax and faster startup,
|
||
it means that it may be necessary to force a recompile if you change a
|
||
creator-defined statement's parse function</p>
|
||
</div>
|
||
<div class="section" id="screen-language-improvements">
|
||
<h3>Screen Language Improvements<a class="headerlink" href="#screen-language-improvements" title="Permalink to this headline"> link</a></h3>
|
||
<p>It is now possible to supply an <code class="docutils literal notranslate"><span class="pre">as</span></code> clause to a screen
|
||
language displayable. This is especially useful with drags,
|
||
as it lets the screen capture the drag object and call methods
|
||
on it as necessary.</p>
|
||
<p>The <code class="docutils literal notranslate"><span class="pre">on</span></code> statement can now take a list of events.</p>
|
||
<p>A screen now takes a <cite>sensitive</cite> property, which determines if it is
|
||
possible to interact with the screen at all.</p>
|
||
<p>Ren'Py will now produce an error when a non-constant property follows
|
||
a Python statement, inside screen language. (This was very rare, and
|
||
almost always a mistake.)</p>
|
||
</div>
|
||
<div class="section" id="text-improvements">
|
||
<h3>Text Improvements<a class="headerlink" href="#text-improvements" title="Permalink to this headline"> link</a></h3>
|
||
<p>Ren'Py now includes support for self-closing custom text tags, which
|
||
are <a class="reference internal" href="custom_text_tags.html"><span class="doc">custom text tags</span></a> that do not require as
|
||
closing text tag.</p>
|
||
<p>Ren'Py now supports three new flags that can be applied when formatting
|
||
text:</p>
|
||
<ul class="simple">
|
||
<li>"[varname!u]" forces the text to upper-case.</li>
|
||
<li>"[varname!l]" forces the text to lower-case.</li>
|
||
<li>"[varname!c]" forces the first letter of the text to upper-case, capitalizing it.</li>
|
||
</ul>
|
||
</div>
|
||
<div class="section" id="android-and-ios-improvements">
|
||
<h3>Android and iOS Improvements<a class="headerlink" href="#android-and-ios-improvements" title="Permalink to this headline"> link</a></h3>
|
||
<p>Ren'Py now uses Framebuffer Objects on any device that claims to
|
||
support it. As a result <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> now works on Android
|
||
and iOS.</p>
|
||
<p>Ren'Py now produces 64-bit arm binaries for Android. These will be
|
||
required by the Google Play store later this year.</p>
|
||
<p>Text input on Android was rewritten again, to fix problems where the user
|
||
was unable to advance. Completion was eliminated, as it was the source
|
||
of the problems. While languages that require input methods will need
|
||
a larger rewrite to function, Ren'Py should now properly handle all direct
|
||
input keyboards.</p>
|
||
</div>
|
||
<div class="section" id="id58">
|
||
<h3>Translations<a class="headerlink" href="#id58" title="Permalink to this headline"> link</a></h3>
|
||
<p>The Ren'Py launcher and sample project have been translated into Turkish
|
||
by Arda Güler.</p>
|
||
<p>The Ren'Py tutorial game has been translated into Spanish by Moshibit.</p>
|
||
<p>French, Japanese, Korean, Russian and Spanish translations have been updated for
|
||
this release.</p>
|
||
</div>
|
||
<div class="section" id="id59">
|
||
<h3>Other Improvements<a class="headerlink" href="#id59" title="Permalink to this headline"> link</a></h3>
|
||
<p>The <code class="docutils literal notranslate"><span class="pre">side</span></code> displayable now renders its children in the order
|
||
they are provided in the control string.</p>
|
||
<p>The <code class="docutils literal notranslate"><span class="pre">say</span></code> statement, <code class="docutils literal notranslate"><span class="pre">menu</span></code> statement, and <code class="docutils literal notranslate"><span class="pre">renpy.call_screen</span></code>
|
||
statements now take a <cite>_mode</cite> argument, which specifies the <a class="reference internal" href="modes.html"><span class="doc">mode</span></a>
|
||
Ren'Py goes into when these statements occur.</p>
|
||
<p>The <a class="reference internal" href="screen_python.html#renpy.show_screen" title="renpy.show_screen"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.show_screen()</span></code></a> and <a class="reference internal" href="screen_python.html#renpy.call_screen" title="renpy.call_screen"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.call_screen()</span></code></a> functions now
|
||
take a zorder argument.</p>
|
||
<p>Ren'Py will now play a mono sound file with the same volume as a stereo
|
||
sound file, rather than sending half the energy to each ear.</p>
|
||
<p>The new <a class="reference internal" href="config.html#var-config.load_failed_label"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.load_failed_label</span></code></a> specifies a label that is jumped
|
||
to when a load fails because Ren'Py can no longer find the current statement.
|
||
This makes it possible to a game to implement its own recovery mechanism.</p>
|
||
<p>The new <a class="reference internal" href="config.html#var-config.notify"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.notify</span></code></a> variable makes it possible to intercept the
|
||
notification system and do your own thing.</p>
|
||
<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.</p>
|
||
<p><a class="reference internal" href="screen_python.html#Action" title="Action"><code class="xref py py-class docutils literal notranslate"><span class="pre">Action</span></code></a> and <a class="reference internal" href="screen_python.html#BarValue" title="BarValue"><code class="xref py py-class docutils literal notranslate"><span class="pre">BarValue</span></code></a> now support a get_tooltip method,
|
||
which allows the object to supply a default tooltip.</p>
|
||
</div>
|
||
<div class="section" id="id60">
|
||
<h3>Fixes<a class="headerlink" href="#id60" title="Permalink to this headline"> link</a></h3>
|
||
<p>A problem that could cause Ren'Py to drop certain characters, especially
|
||
accent markers in Arabic, has been fixed.</p>
|
||
<p>The filename of the internal copy of OpenDyslexic has been changed so as
|
||
not to cause problems with copies distributed with games.</p>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="renpy-7-2-2">
|
||
<span id="id61"></span><h2>7.2.2<a class="headerlink" href="#renpy-7-2-2" title="Permalink to this headline"> link</a></h2>
|
||
<p>Ren'Py now supports a new Accessibility menu, which can be accessed
|
||
by pressing the "a" key. This menu, which is intended to be used by
|
||
players, let's the player override the game font, change the scaling
|
||
and spacing of text, and enable self-voicing.</p>
|
||
<p>Ren'Py will now allow files in the public game directory
|
||
(/mnt/sdcard/Android/<cite>package</cite>/files/game) to override those included with the
|
||
game proper. This has been listed as a feature in 7.2.0, but didn't work
|
||
right.</p>
|
||
<p>Ren'Py will now include temporary image attributes in the say statements
|
||
generated as part of the translation process.</p>
|
||
<p>When uploading to itch.io, Ren'Py now downloads butler itself. This means
|
||
there is no longer a dependence on the location or structure of the Itch
|
||
app, as there was before.</p>
|
||
<p>The bar values <a class="reference internal" href="screen_actions.html#DictValue" title="DictValue"><code class="xref py py-func docutils literal notranslate"><span class="pre">DictValue()</span></code></a>, <a class="reference internal" href="screen_actions.html#FieldValue" title="FieldValue"><code class="xref py py-func docutils literal notranslate"><span class="pre">FieldValue()</span></code></a>, <a class="reference internal" href="screen_actions.html#VariableValue" title="VariableValue"><code class="xref py py-func docutils literal notranslate"><span class="pre">VariableValue()</span></code></a>,
|
||
and <a class="reference internal" href="screen_actions.html#ScreenVariableValue" title="ScreenVariableValue"><code class="xref py py-func docutils literal notranslate"><span class="pre">ScreenVariableValue()</span></code></a> all take a new <cite>action</cite> parameter, which
|
||
gives an action that is performed each time the value changes.</p>
|
||
<p>The rollback system has been optimized to reduce the amount of garbage
|
||
that needs to be collected.</p>
|
||
</div>
|
||
<div class="section" id="renpy-7-2-1">
|
||
<span id="id62"></span><h2>7.2.1<a class="headerlink" href="#renpy-7-2-1" title="Permalink to this headline"> link</a></h2>
|
||
<div class="section" id="ios-improvements">
|
||
<h3>iOS Improvements<a class="headerlink" href="#ios-improvements" title="Permalink to this headline"> link</a></h3>
|
||
<p>Ren'Py will now set the version field for the iOS application when generating
|
||
a project.</p>
|
||
<p>Ren'Py will now look for the files ios-icon.png and ios-launchimage.png,
|
||
and use them to generate the icon and launch image in the sizes required
|
||
for iOS.</p>
|
||
</div>
|
||
<div class="section" id="id63">
|
||
<h3>Other Improvements<a class="headerlink" href="#id63" title="Permalink to this headline"> link</a></h3>
|
||
<p>The <a class="reference internal" href="save_load_rollback.html#renpy.in_rollback" title="renpy.in_rollback"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.in_rollback()</span></code></a> function returns True when in the rollback that
|
||
occurs immediately after a load. This makes it possible to use:</p>
|
||
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">python</span><span class="p">:</span>
|
||
<span class="k">if</span> <span class="k">not</span> <span class="n">renpy</span><span class="o">.</span><span class="n">in_rollback</span><span class="p">():</span>
|
||
<span class="n">renpy</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">ShowMenu</span><span class="p">(</span><span class="s1">'save'</span><span class="p">))</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>To display a save menu during an initial playthough, but not during loading
|
||
or rollback.</p>
|
||
<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> now exists, making it possible
|
||
to select the transition to use on a per-say-statement basis.</p>
|
||
<p>The new <code class="docutils literal notranslate"><span class="pre">RENPY_SEARCHPATH</span></code> environment variable makes it possible to
|
||
override <a class="reference internal" href="config.html#var-config.searchpath"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.searchpath</span></code></a> on launch.</p>
|
||
</div>
|
||
<div class="section" id="id64">
|
||
<h3>Fixes<a class="headerlink" href="#id64" title="Permalink to this headline"> link</a></h3>
|
||
<p>Ren'Py has been audited to make sure that the semantics of == and != match,
|
||
whenever == was redefined.</p>
|
||
<p>There was a fix to problems that might occur when a transform is added
|
||
to a screen using the <code class="docutils literal notranslate"><span class="pre">add</span></code> statement.</p>
|
||
<p>The way <code class="docutils literal notranslate"><span class="pre">extend</span></code> processes arguments was changed to ensure that newer
|
||
arguments take priority over arguments given to the statement being
|
||
extended.</p>
|
||
<p>Ren'Py now properly considers the scope when comparing dynamic images for
|
||
equality. This fixes an issue that prevented some dynamic images from
|
||
updating when part of a screen.</p>
|
||
<p>A crash when <a class="reference internal" href="config.html#var-config.save_dump"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.save_dump</span></code></a> is true on macOS has been fixed.</p>
|
||
<p>A crash when <a class="reference internal" href="config.html#var-config.profile"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.profile</span></code></a> is true has been fixed.</p>
|
||
<p>Ren'Py now explicitly asks for text (as opposed to email, password, phone number
|
||
etc) input on Android when the keyboard is displayed.</p>
|
||
<p>An issue has been fixed that prevented roll-forward from working through a
|
||
menu statement.</p>
|
||
<p>Fixes a bug that prevents roll-forward through a menu.</p>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="renpy-7-1-4">
|
||
<span id="renpy-7-2"></span><span id="renpy-7-2-0"></span><span id="id65"></span><h2>7.2.0<a class="headerlink" href="#renpy-7-1-4" title="Permalink to this headline"> link</a></h2>
|
||
<div class="section" id="menu-arguments">
|
||
<h3>Menu Arguments<a class="headerlink" href="#menu-arguments" title="Permalink to this headline"> link</a></h3>
|
||
<p>Ren'Py now has support for <a class="reference internal" href="menus.html#menu-arguments"><span class="std std-ref">menu arguments</span></a>. Arguments
|
||
can be passed to a choice menu as a whole, or to the individual choices within
|
||
the menu, using the syntax:</p>
|
||
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">menu</span> <span class="p">(</span><span class="s2">"jfk"</span><span class="p">,</span> <span class="k">screen</span><span class="o">=</span><span class="s2">"airport"</span><span class="p">):</span>
|
||
|
||
<span class="s2">"Chicago, IL"</span> <span class="p">(</span><span class="mi">200</span><span class="p">):</span>
|
||
<span class="k">jump</span> <span class="n">chicago_trip</span>
|
||
|
||
<span class="s2">"Dallas, TX"</span> <span class="p">(</span><span class="mi">150</span><span class="p">,</span> <span class="n">sale</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
||
<span class="k">jump</span> <span class="n">dallas_trip</span>
|
||
|
||
<span class="s2">"Hot Springs, AR"</span> <span class="p">(</span><span class="mi">300</span><span class="p">)</span> <span class="k">if</span> <span class="n">secret_unlocked</span><span class="p">:</span>
|
||
<span class="k">jump</span> <span class="n">hot_springs_trip</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Menu arguments passed to the menu itself become arguments to the screen,
|
||
except the <cite>screen</cite> argument which selects the screen, and the <cite>nvl</cite>
|
||
argument, which - if present - selects the NVL-mode menu. The arguments to
|
||
the choices become arguments to the items passed to the menu screen.</p>
|
||
</div>
|
||
<div class="section" id="temporary-say-attributes">
|
||
<h3>Temporary Say Attributes<a class="headerlink" href="#temporary-say-attributes" title="Permalink to this headline"> link</a></h3>
|
||
<p>Ren'Py now supports temporary say attributes. Just like regular say
|
||
attributes, these are included as part of the say statement. However,
|
||
these temporary say attributes are reverted once the dialogue has
|
||
finished. For example, in the script:</p>
|
||
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">show</span> <span class="n">eileen</span> <span class="n">happy</span>
|
||
|
||
<span class="n">e</span> <span class="s2">"I'm happy."</span>
|
||
|
||
<span class="n">e</span> <span class="o">@</span> <span class="n">vhappy</span> <span class="s2">"I'm really happy!"</span>
|
||
|
||
<span class="n">e</span> <span class="s2">"I'm still happy."</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>In the first line and last line of dialogues, Eileen is using her happy
|
||
emotion. The vhappy emotion is shown before the second line of dialogue,
|
||
and replaced with the previous emotion (happy in this case), before it.</p>
|
||
</div>
|
||
<div class="section" id="text">
|
||
<h3>Text<a class="headerlink" href="#text" title="Permalink to this headline"> link</a></h3>
|
||
<p>There have been a number of text changes that affect text when a window
|
||
is scaled to a non-default size:</p>
|
||
<ul class="simple">
|
||
<li>The text is now aligned on its baseline, rather than at the top of
|
||
the text. This is relevant when an absolute outline offset is
|
||
used.</li>
|
||
<li>It is now possible to choose how the outline scales when the window
|
||
is scaled. This is done with 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.</li>
|
||
</ul>
|
||
<p>When positioning a Text object, the <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> property can be
|
||
renpy.BASELINE. When it is, the anchor is set to the baseline of the
|
||
first line of the text.</p>
|
||
</div>
|
||
<div class="section" id="statements">
|
||
<h3>Statements<a class="headerlink" href="#statements" title="Permalink to this headline"> link</a></h3>
|
||
<p>The new <code class="docutils literal notranslate"><span class="pre">window</span> <span class="pre">auto</span> <span class="pre">show</span></code> and <code class="docutils literal notranslate"><span class="pre">window</span> <span class="pre">auto</span> <span class="pre">hide</span></code> statements
|
||
allow <a class="reference internal" href="dialogue.html#dialogue-window-management"><span class="std std-ref">automatic dialogue window management</span></a>
|
||
to continue while showing or hiding the dialogue window.</p>
|
||
<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">hide</span> <span class="pre">screen</span></code> statements now take a with
|
||
clause, that works the same way it does with <code class="docutils literal notranslate"><span class="pre">show</span></code> and <code class="docutils literal notranslate"><span class="pre">hide</span></code>.</p>
|
||
<p>The screen language <code class="docutils literal notranslate"><span class="pre">use</span></code> statement now can take an <code class="docutils literal notranslate"><span class="pre">expression</span></code>
|
||
clause, that makes it take an expression rather than a literal screen
|
||
name. This allows a variable to be used when selecting the screen that
|
||
is included. See <a class="reference internal" href="screens.html#sl-use"><span class="std std-ref">Use</span></a> for more details.</p>
|
||
</div>
|
||
<div class="section" id="id66">
|
||
<h3>Changes<a class="headerlink" href="#id66" title="Permalink to this headline"> link</a></h3>
|
||
<p>The new <a class="reference internal" href="other.html#renpy.is_skipping" title="renpy.is_skipping"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.is_skipping()</span></code></a> function reports if Ren'Py is currently
|
||
skipping.</p>
|
||
<p>The <a class="reference internal" href="screens.html#sl-input"><span class="std std-ref">input</span></a> displayable now takes a new <cite>copypaste</cite>
|
||
property, which when true allows copying with ctrl+C and pasting with
|
||
ctrl+V. This is enabled in the console and launcher.</p>
|
||
<p><code class="docutils literal notranslate"><span class="pre">Preference("display",</span> <span class="pre">"window")</span></code> now avoids creating a window bigger
|
||
than the screen, and will be selected if the current window size is the
|
||
maximum window size, if the size selected with <a class="reference internal" href="gui_advanced.html#gui.init" title="gui.init"><code class="xref py py-func docutils literal notranslate"><span class="pre">gui.init()</span></code></a> is bigger
|
||
than the maximum window size.</p>
|
||
<p><a class="reference internal" href="cds.html"><span class="doc">Creator defined statements</span></a> now have a few more lexer methods available,
|
||
making it possible to to parse arguments, image name components, labels, and
|
||
delimited python.</p>
|
||
<p>The <a class="reference internal" href="other.html#renpy.force_autosave" title="renpy.force_autosave"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.force_autosave()</span></code></a> function takes a new argument, that causes
|
||
the autosave to block until it completes.</p>
|
||
<p>The <a class="reference internal" href="screen_special.html#ctc-screen"><span class="std std-ref">ctc screen</span></a> now takes a number of new parameters,
|
||
if required.</p>
|
||
<p>The new <a class="reference internal" href="im.html#im.Blur" title="im.Blur"><code class="xref py py-func docutils literal notranslate"><span class="pre">im.Blur()</span></code></a> image manipulator can blur an image. Thanks to
|
||
Mal Graty for contributing it.</p>
|
||
<p>LayeredImage groups now support a <code class="docutils literal notranslate"><span class="pre">multiple</span></code> property, which allows
|
||
multiple attributes in the same group to be displayed at the same time.
|
||
This is useful because it allows the auto-definition function of a group
|
||
to be applied to non-conflicting images.</p>
|
||
<p>Ren'Py will remain fullscreen when the mouse changes desktops, and will avoid
|
||
shrinking a maximized window during a reload.</p>
|
||
<p>The <code class="xref std std-var docutils literal notranslate"><span class="pre">config.allow_duplicate_labels</span></code> variable can be defined or set in an
|
||
init python block to allow duplicate labels to be defined in a game.</p>
|
||
<p>The <a class="reference internal" href="movie.html#Movie" title="Movie"><code class="xref py py-func docutils literal notranslate"><span class="pre">Movie()</span></code></a> displayable can now be told not to loop, and displays the
|
||
associated static image when it stops looping. It also can take an image
|
||
that is displayed before the movie proper starts.</p>
|
||
</div>
|
||
<div class="section" id="android-changes">
|
||
<h3>Android Changes<a class="headerlink" href="#android-changes" title="Permalink to this headline"> link</a></h3>
|
||
<p>The downloading of the Android SDK has been updated to fix a change in the
|
||
provided tools that prevented things from downloading.</p>
|
||
<p>An explicit action is now given to the keyboard, to make sure the enter
|
||
key works.</p>
|
||
<p>Ren'Py now uses the Amazon payment APIs when sideloaded onto a device
|
||
made by Amazon, allowing their payment system to be tested on a dual-store
|
||
APK.</p>
|
||
<p>Ren'Py will now allow files in the public game directory (/mnt/sdcard/Android/<cite>package</cite>/files/game)
|
||
to override those included with the game proper.</p>
|
||
</div>
|
||
<div class="section" id="id67">
|
||
<h3>Fixes<a class="headerlink" href="#id67" title="Permalink to this headline"> link</a></h3>
|
||
<p>A bug preventing Ren'Py from displaying zero or negative-width
|
||
characters (such as certain diacritics) has been fixed.</p>
|
||
<p>An issue that prevented Ren'Py from updating a displayable that was
|
||
added to a screen with transform properties has been fixed.</p>
|
||
<p>The order of drags within a drag group is now preserved when an
|
||
interaction restart occurs.</p>
|
||
<p>Size-changing properties like <a class="reference internal" href="style_properties.html#style-property-xysize"><code class="xref std std-propref docutils literal notranslate"><span class="pre">xysize</span></code></a> now apply to a Drag and not
|
||
the space it can move around in.</p>
|
||
<p>A bug that could cause a transparent, black, or gray line to appear on
|
||
the bottom line of a screen during a dissolve has been fixed.</p>
|
||
<p>A regression in support for imagefonts has been fixed.</p>
|
||
<p>Creating a new file from the navigation menu of the launcher now works.</p>
|
||
<p>Menu sets now work again.</p>
|
||
<p>Ren'Py will no longer crash if an incomparable type is given to <a class="reference internal" href="screen_actions.html#Function" title="Function"><code class="xref py py-func docutils literal notranslate"><span class="pre">Function()</span></code></a>
|
||
and other actions.</p>
|
||
<p>A case where rolling forward would fail is now fixed.</p>
|
||
<p>A problem that prevented the Steam overlay from showing up on macOS was fixed.</p>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="renpy-7-1-3">
|
||
<span id="id68"></span><h2>7.1.3<a class="headerlink" href="#renpy-7-1-3" title="Permalink to this headline"> link</a></h2>
|
||
<p>This was a quick re-release of 7.1.2 in order to fix a single bug, which
|
||
was that a test change had been left in causing <code class="xref std std-var docutils literal notranslate"><span class="pre">config.default_language</span></code>
|
||
to be set on initial startup.</p>
|
||
</div>
|
||
<div class="section" id="renpy-7-1-2">
|
||
<span id="id69"></span><h2>7.1.2<a class="headerlink" href="#renpy-7-1-2" title="Permalink to this headline"> link</a></h2>
|
||
<div class="section" id="id70">
|
||
<h3>Improvements<a class="headerlink" href="#id70" title="Permalink to this headline"> link</a></h3>
|
||
<p>Ren'Py's screen language now support the inclusion of anonymous ATL
|
||
transforms. It's now possible to write:</p>
|
||
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">screen</span> <span class="n">hello_title</span><span class="p">():</span>
|
||
<span class="k">text</span> <span class="s2">"Hello."</span><span class="p">:</span>
|
||
<span class="k">at</span> <span class="k">transform</span><span class="p">:</span>
|
||
<span class="na">align</span> <span class="p">(</span><span class="mf">0.5</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">)</span> <span class="na">alpha</span> <span class="mf">0.0</span>
|
||
<span class="n">linear</span> <span class="mf">0.5</span> <span class="na">alpha</span> <span class="mf">1.0</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>The new <a class="reference internal" href="screen_actions.html#SetLocalVariable" title="SetLocalVariable"><code class="xref py py-func docutils literal notranslate"><span class="pre">SetLocalVariable()</span></code></a> and <a class="reference internal" href="screen_actions.html#ToggleLocalVariable" title="ToggleLocalVariable"><code class="xref py py-func docutils literal notranslate"><span class="pre">ToggleLocalVariable()</span></code></a> actions
|
||
make it possible to set variables inside used screens.</p>
|
||
<p>The new <a class="reference internal" href="config.html#var-config.menu_include_disabled"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.menu_include_disabled</span></code></a> variable determines if menus
|
||
should include entries disabled by an if clause.</p>
|
||
<p>Shift-keybindings (like Shift+I and Shift+R) now work in the Android
|
||
emulation mode.</p>
|
||
<p>Ren'Py now better reports errors in text tags that require a value but are
|
||
not given one.</p>
|
||
<p>The new <a class="reference internal" href="store_variables.html#var-_version"><code class="xref std std-var docutils literal notranslate"><span class="pre">_version</span></code></a> variable indicates the version of the game itself
|
||
that was used when a new game is first created. This only stores the version
|
||
at game creation - after that, it's up to the creator to keep it updated.</p>
|
||
<p>The <a class="reference internal" href="movie.html#Movie" title="Movie"><code class="xref py py-func docutils literal notranslate"><span class="pre">Movie()</span></code></a> displayable now supports a new mode the color data and
|
||
alpha mask data are placed side-by-side in the same file. This prevents
|
||
issues where a main and mask movie could go out of sync.</p>
|
||
<p>The <a class="reference internal" href="screen_actions.html#FilePageNext" title="FilePageNext"><code class="xref py py-func docutils literal notranslate"><span class="pre">FilePageNext()</span></code></a> and <a class="reference internal" href="screen_actions.html#FilePagePrevious" title="FilePagePrevious"><code class="xref py py-func docutils literal notranslate"><span class="pre">FilePagePrevious()</span></code></a> functions now take
|
||
arguments that control if the they can bring the player to the auto or
|
||
quick save pages.</p>
|
||
<p>The new <a class="reference internal" href="config.html#var-config.skip_sounds"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.skip_sounds</span></code></a> variables determines if Ren'Py will skip
|
||
non-looping audio files that are played while Ren'Py is skipping.</p>
|
||
</div>
|
||
<div class="section" id="id71">
|
||
<h3>Translations<a class="headerlink" href="#id71" title="Permalink to this headline"> link</a></h3>
|
||
<p>Ren'Py now has the ability to automatically detect the locale of the user's
|
||
system, and use it to set the language. Please see
|
||
<a class="reference internal" href="config.html#var-config.enable_language_autodetect"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.enable_language_autodetect</span></code></a> and the <a class="reference internal" href="translation.html#translation"><span class="std std-ref">Translation</span></a>
|
||
documentation for how this works.</p>
|
||
<p>The French, German, Korean, Russian, and Simplifed Chinese translations
|
||
have been updated.</p>
|
||
</div>
|
||
<div class="section" id="id72">
|
||
<h3>Fixes<a class="headerlink" href="#id72" title="Permalink to this headline"> link</a></h3>
|
||
<p>A Windows-specific bug that caused RTL (the support for languages like
|
||
Arabic and Hebrew) to corrupt the second half of text strings has been
|
||
fixed. This should prevent garbage characters from being displayed when
|
||
rendering those languages.</p>
|
||
<p>Ren'Py will now report an error if a game accesses an image that does not
|
||
exist, but has as a prefix an image that does exist. Before this change,
|
||
if <code class="docutils literal notranslate"><span class="pre">eileen</span> <span class="pre">happy</span></code> exists and <code class="docutils literal notranslate"><span class="pre">eileen</span> <span class="pre">happy</span> <span class="pre">unknown</span></code> was shown, the
|
||
additional attribute would be ignored.</p>
|
||
<p>Lint has been improved to deal with images that take attributes that are
|
||
not in the image name, like layered images.</p>
|
||
<p>Ren'Py generates choice menu images that are suitable for use on the phone.</p>
|
||
</div>
|
||
<div class="section" id="android-fixes">
|
||
<h3>Android Fixes<a class="headerlink" href="#android-fixes" title="Permalink to this headline"> link</a></h3>
|
||
<p>As Ren'Py's new Android support only worked well on a 64-bit version of
|
||
Java 8, we make that 64-bit requirement explicit.</p>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="renpy-7-1-1">
|
||
<span id="id73"></span><h2>7.1.1<a class="headerlink" href="#renpy-7-1-1" title="Permalink to this headline"> link</a></h2>
|
||
<div class="section" id="history-fix">
|
||
<span id="history-7-1-1"></span><h3>History Fix<a class="headerlink" href="#history-fix" title="Permalink to this headline"> link</a></h3>
|
||
<p>This release fixes an issue with Ren'Py's history screen. The problem occurred
|
||
when a line of dialogue contained a quoted square bracket, so something like:</p>
|
||
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="s2">"I [[think] I'm having a problem."</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>When this occurs, the string "I [think] I'm having a problem." is added to
|
||
the history. Ren'Py would then display that in history, substitute the
|
||
<code class="docutils literal notranslate"><span class="pre">think</span></code> variable, and crash.</p>
|
||
<p>This is fixed by adding <code class="docutils literal notranslate"><span class="pre">substitute</span> <span class="pre">False</span></code> to the history screen. This
|
||
is done to new projects, but for existing ones you'll need to make the fix
|
||
yourself. Here's the new history screen:</p>
|
||
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">screen</span> <span class="n">history</span><span class="p">():</span>
|
||
|
||
<span class="k">tag</span> <span class="k">menu</span>
|
||
|
||
<span class="c1">## Avoid predicting this screen, as it can be very large.</span>
|
||
<span class="na">predict</span> <span class="kc">False</span>
|
||
|
||
<span class="k">use</span> <span class="n">game_menu</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">"History"</span><span class="p">),</span> <span class="n">scroll</span><span class="o">=</span><span class="p">(</span><span class="s2">"vpgrid"</span> <span class="k">if</span> <span class="n">gui</span><span class="o">.</span><span class="n">history_height</span> <span class="k">else</span> <span class="s2">"viewport"</span><span class="p">),</span> <span class="na">yinitial</span><span class="o">=</span><span class="mf">1.0</span><span class="p">):</span>
|
||
|
||
<span class="na">style_prefix</span> <span class="s2">"history"</span>
|
||
|
||
<span class="k">for</span> <span class="n">h</span> <span class="k">in</span> <span class="n">_history_list</span><span class="p">:</span>
|
||
|
||
<span class="k">window</span><span class="p">:</span>
|
||
|
||
<span class="c1">## This lays things out properly if history_height is None.</span>
|
||
<span class="k">has</span> <span class="k">fixed</span><span class="p">:</span>
|
||
<span class="na">yfit</span> <span class="kc">True</span>
|
||
|
||
<span class="k">if</span> <span class="n">h</span><span class="o">.</span><span class="n">who</span><span class="p">:</span>
|
||
|
||
<span class="k">label</span> <span class="n">h</span><span class="o">.</span><span class="n">who</span><span class="p">:</span>
|
||
<span class="k">style</span> <span class="s2">"history_name"</span>
|
||
<span class="na">substitute</span> <span class="kc">False</span>
|
||
|
||
<span class="c1">## Take the color of the who text from the Character, if set.</span>
|
||
<span class="k">if</span> <span class="s2">"color"</span> <span class="k">in</span> <span class="n">h</span><span class="o">.</span><span class="n">who_args</span><span class="p">:</span>
|
||
<span class="na">text_color</span> <span class="n">h</span><span class="o">.</span><span class="n">who_args</span><span class="p">[</span><span class="s2">"color"</span><span class="p">]</span>
|
||
|
||
<span class="k">$</span> <span class="n">what</span> <span class="o">=</span> <span class="n">renpy</span><span class="o">.</span><span class="n">filter_text_tags</span><span class="p">(</span><span class="n">h</span><span class="o">.</span><span class="n">what</span><span class="p">,</span> <span class="na">allow</span><span class="o">=</span><span class="n">gui</span><span class="o">.</span><span class="n">history_allow_tags</span><span class="p">)</span>
|
||
<span class="k">text</span> <span class="n">what</span> <span class="na">substitute</span> <span class="kc">False</span>
|
||
|
||
<span class="k">if</span> <span class="k">not</span> <span class="n">_history_list</span><span class="p">:</span>
|
||
<span class="k">label</span> <span class="n">_</span><span class="p">(</span><span class="s2">"The dialogue history is empty."</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>The new lines are the ones with <code class="docutils literal notranslate"><span class="pre">substitute</span> <span class="pre">False</span></code> on them. You'll want to make
|
||
this change to your history screen to prevent his problem from happening.</p>
|
||
</div>
|
||
<div class="section" id="android-improvements">
|
||
<h3>Android Improvements<a class="headerlink" href="#android-improvements" title="Permalink to this headline"> link</a></h3>
|
||
<p>Ren'Py now sets the amount of memory used by the Android build tool to
|
||
the Google-set default of 1536 megabytes. To change this, edit
|
||
rapt/project/gradle.properties. To make sure you're capable of building
|
||
larger games, please make sure your computer has a 64-bit version of Java 8.</p>
|
||
<p>Ren'Py explicitly tells Android to pass the Enter key to an input.</p>
|
||
<p>Ren'Py now crops and sizes the icon correctly for versions of Android below
|
||
Android 8 (Oreo).</p>
|
||
<p>Ren'Py gives a different numeric version number to the x86_64 apk. This will
|
||
allow both x86_64 and armeabi-v7a builds to be uploaded to Google Play and
|
||
other stores, rather than having to first created one build and then the other,
|
||
manually changing the version numbers between.</p>
|
||
</div>
|
||
<div class="section" id="id74">
|
||
<h3>Other Improvements<a class="headerlink" href="#id74" title="Permalink to this headline"> link</a></h3>
|
||
<p>Ren'Py now handles the (lack of) drawing of zero width characters itself, preventing
|
||
such characters from appearing as squares in text if the font does not support
|
||
the zero width character.</p>
|
||
<p>Ren'Py supports the use of non-breaking space and zero-width non-breaking space
|
||
characters to prevent images in text from being wrapped.</p>
|
||
<p>Ren'Py supports the a new "nestled-close" value for the <cite>ctc_position</cite> parameter
|
||
of <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>. This value prevents there from being a break between the
|
||
click-to-continue indicator and the other lines.</p>
|
||
<p>Drags (in drag-and-drop) now support alternate clicks. (Right clicks on desktop
|
||
and long-clicks on touch platforms.)</p>
|
||
</div>
|
||
<div class="section" id="id75">
|
||
<h3>Fixes<a class="headerlink" href="#id75" title="Permalink to this headline"> link</a></h3>
|
||
<p>The <a class="reference internal" href="screen_actions.html#SetVariable" title="SetVariable"><code class="xref py py-func docutils literal notranslate"><span class="pre">SetVariable()</span></code></a> and <a class="reference internal" href="screen_actions.html#ToggleVariable" title="ToggleVariable"><code class="xref py py-func docutils literal notranslate"><span class="pre">ToggleVariable()</span></code></a> functions have been extended
|
||
to accept namespaces and fields. So it's now possible to have actions like
|
||
<code class="docutils literal notranslate"><span class="pre">SetVariable("hero.strength",</span> <span class="pre">hero.strength</span> <span class="pre">+</span> <span class="pre">1)</span></code> or
|
||
<code class="docutils literal notranslate"><span class="pre">ToggleVariable("persistent.alternate_perspective")</span></code>.</p>
|
||
<p>Automatic management of the dialogue window (as enabled by the <code class="docutils literal notranslate"><span class="pre">window</span> <span class="pre">auto</span></code>
|
||
statement) now considers if an in-game menu has a dialogue or caption associated
|
||
with it, and handles that appropriately.</p>
|
||
<p>The source code to the embedded version of fribidi that Ren'Py is expected
|
||
to build with is now included in the -source archive.</p>
|
||
<p>There have been a number of fixes to the voice sustain preference to make
|
||
it work better with history and the voice replay action.</p>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="renpy-7-1">
|
||
<span id="id76"></span><h2>7.1<a class="headerlink" href="#renpy-7-1" title="Permalink to this headline"> link</a></h2>
|
||
<div class="section" id="id77">
|
||
<h3>Android<a class="headerlink" href="#id77" title="Permalink to this headline"> link</a></h3>
|
||
<p>This release sees a major rewrite of Ren'Py's support for Android to
|
||
modernize it. This is required so Ren'Py games can be uploaded to the
|
||
Google Play store. Some of these changes may require you to update
|
||
a game's files. Most notably, the format of icons has changed, so the
|
||
icons will need to be redone.</p>
|
||
<p>The minimum version of Android that Ren'Py will run on has been raised
|
||
to Android 19 (aka 4.4 KitKat), while it targets Android 28 (aka 9 Pie).</p>
|
||
<p>The x86_64 architecture has been added, while x86 has been dropped. (Some x86
|
||
devices may be able to run the arm platform version through binary translation
|
||
layers.)</p>
|
||
</div>
|
||
<div class="section" id="monologue-mode">
|
||
<h3>Monologue Mode<a class="headerlink" href="#monologue-mode" title="Permalink to this headline"> link</a></h3>
|
||
<p>It's now possible to write multiple blocks of dialogue or narration at
|
||
once, using triple-quoted strings. For example:</p>
|
||
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="n">e</span> <span class="s2">"""</span>
|
||
<span class="s2">This is one block of dialogue.</span>
|
||
|
||
<span class="s2">And this is a second block.</span>
|
||
<span class="s2">"""</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>will create two blocks of dialogue. See <a class="reference internal" href="dialogue.html#monologue-mode"><span class="std std-ref">Monologue Mode</span></a> for more
|
||
info.</p>
|
||
<p>There is also a new {clear} text tag that works with monologue. When
|
||
the {clear} tag is part of a line by itself, it is the equivalent of
|
||
the <code class="docutils literal notranslate"><span class="pre">nvl</span> <span class="pre">clear</span></code> statement. See <a class="reference internal" href="nvl_mode.html#nvl-monologue-mode"><span class="std std-ref">NVL Monlologue Mode</span></a> for more
|
||
about this.</p>
|
||
</div>
|
||
<div class="section" id="say-with-attribute-change">
|
||
<h3>Say-With-Attribute Change<a class="headerlink" href="#say-with-attribute-change" title="Permalink to this headline"> link</a></h3>
|
||
<p>There has been a change to the way a say-with-attributes is handled
|
||
when there is not an image with the tag displaying. Previously, Ren'Py
|
||
would use the attributes given in the most recent say-with-attributes statement
|
||
to selected the side image to show.</p>
|
||
<p>Now, Ren'Py will use the provided attributes and existing attributes to resolve
|
||
the side image. This makes a say-with-attributes that occurs when an image
|
||
is not showing work the same way as when it is. When the attributes do not
|
||
select a single side image, Ren'Py will select the image with all of the given
|
||
attributes, and the most possible of the existing attributes.</p>
|
||
<p>The rationale for this change is to help with side images that are defined
|
||
as layered images, where providing only the attributes that change makes
|
||
sense.</p>
|
||
</div>
|
||
<div class="section" id="updater-changes">
|
||
<h3>Updater Changes<a class="headerlink" href="#updater-changes" title="Permalink to this headline"> link</a></h3>
|
||
<p>The updater for Ren'Py itself now asks you to select the update channel
|
||
each time you go to update. The purpose of this is to make it clear
|
||
which channel you're updating to each time you update, so you don't
|
||
accidentally update to a prerelease or nightly version after a
|
||
release comes out.</p>
|
||
<p>As part of this, you might see the Prerelease channel missing for some
|
||
updates. That's normal – unlike in previous versions, the channel only
|
||
appears when there are prereleases available.</p>
|
||
</div>
|
||
<div class="section" id="id78">
|
||
<h3>Translations<a class="headerlink" href="#id78" title="Permalink to this headline"> link</a></h3>
|
||
<p>The Ren'Py launcher, template game, and The Question have been translated
|
||
into the Latin script of Malay by Muhammad Nur Hidayat Yasuyoshi.</p>
|
||
<p>The Korean translation has been significantly updated.</p>
|
||
<p>It is now possible to translate the strings used by RAPT into non-English
|
||
languages.</p>
|
||
</div>
|
||
<div class="section" id="id79">
|
||
<h3>Other<a class="headerlink" href="#id79" title="Permalink to this headline"> link</a></h3>
|
||
<p>Ren'Py can now automatically save the game upon quit, in a reliable
|
||
fashion. (As compared to the previous autosave, which could fail or
|
||
be cycled out.) This is controlled by the <a class="reference internal" href="store_variables.html#var-_quit_slot"><code class="xref std std-var docutils literal notranslate"><span class="pre">_quit_slot</span></code></a> variable.</p>
|
||
<p>File actions (like <a class="reference internal" href="screen_actions.html#FileSave" title="FileSave"><code class="xref py py-func docutils literal notranslate"><span class="pre">FileSave()</span></code></a>, <a class="reference internal" href="screen_actions.html#FileLoad" title="FileLoad"><code class="xref py py-func docutils literal notranslate"><span class="pre">FileLoad()</span></code></a>, and <a class="reference internal" href="screen_actions.html#FileAction" title="FileAction"><code class="xref py py-func docutils literal notranslate"><span class="pre">FileAction()</span></code></a>)
|
||
can now take a slot=True argument. When this is given, the action loads
|
||
a named slot, without involving the page.</p>
|
||
<p>The developer menu (accessed through Shift+D) can now display a screen
|
||
that shows the attributes associated with displayed and hidden images.</p>
|
||
<p>Added <a class="reference internal" href="text.html#renpy.transform_text" title="renpy.transform_text"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.transform_text()</span></code></a>, a function to transform text without
|
||
touching text tags or interpolation.</p>
|
||
<p>Buttons created using the <code class="docutils literal notranslate"><span class="pre">make_buttons</span></code> method of a Gallery object now
|
||
inherit from the empty style, and not button. This prevents properties from
|
||
the button style from causing problems.</p>
|
||
<p>The code to finish displaying text is now called from the event method,
|
||
as if the mouse button was clicked. This helps prevent interaction ends
|
||
when menus are up.</p>
|
||
<p>Displayable prefixes are supported when evaluating auto images in imagebuttons
|
||
and image maps.</p>
|
||
<p>A bug that caused an error in an NVL-mode statement if the next statement
|
||
was an NVL-mode statement with an undefined character name has been fixed.</p>
|
||
<p>When two ATL transforms are nested, the state from both is propagated, not
|
||
just the outermost.</p>
|
||
<p>Ren'Py now updates dynamic images that are used in windows, bars, and
|
||
frames. (And derived displayables, like buttons and imagemaps.)</p>
|
||
<p>An issue that caused Ren'Py to consume 100% of a core when modal True was
|
||
given has been fixed.</p>
|
||
<p>Ren'Py now includes a copy of fribidi, rather than requiring an OS-installed
|
||
version.</p>
|
||
<p>The new <a class="reference internal" href="style_properties.html#style-property-box_wrap_spacing"><code class="xref std std-propref docutils literal notranslate"><span class="pre">box_wrap_spacing</span></code></a> allows control of the spacing between
|
||
rows or columns introduced by <a class="reference internal" href="style_properties.html#style-property-box_wrap"><code class="xref std std-propref docutils literal notranslate"><span class="pre">box_wrap</span></code></a>.</p>
|
||
<p>The <a class="reference internal" href="style_properties.html#style-property-adjust_spacing"><code class="xref std std-propref docutils literal notranslate"><span class="pre">adjust_spacing</span></code></a> style property can now take "horizontal" and
|
||
"vertical" as values, causing text spacing to be adjusted in only the
|
||
specified direction.</p>
|
||
<p>LayerdImageProxy can now take an interpolated string.</p>
|
||
<p>The new <a class="reference internal" href="config.html#var-config.context_callback"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.context_callback</span></code></a> is called when starting the game or
|
||
entering a new context, like a menu context. It can be used to stop voice
|
||
or sounds from playing when entering that context.</p>
|
||
<p>The <a class="reference internal" href="drag_drop.html#Drag" title="Drag"><code class="xref py py-func docutils literal notranslate"><span class="pre">Drag()</span></code></a> displayable (and the screen language equivalent, <code class="docutils literal notranslate"><span class="pre">drag</span></code>)
|
||
have grown a new <cite>activated</cite> property. This is callback that is called when
|
||
the user first clicks the mouse on a drag. (Before it starts moving.)</p>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="renpy-7-0">
|
||
<span id="id80"></span><h2>7.0<a class="headerlink" href="#renpy-7-0" title="Permalink to this headline"> link</a></h2>
|
||
<p>Ren'Py 7.0 marks the completion of over a decade of development since
|
||
Ren'Py 6 that brought features like ATL, Screen Language, OpenGL and DirectX
|
||
acceleration, support for the Android and iOS platforms, Translation,
|
||
Accessibility, and so much more.</p>
|
||
<p>For releases between 6.0 and 7.0, see the other entries in this changelog,
|
||
and the older changelog on the Ren'Py website. The rest of this entry
|
||
contains the differences between 7.0 and 6.99.14.3.</p>
|
||
<div class="section" id="layered-images">
|
||
<h3>Layered Images<a class="headerlink" href="#layered-images" title="Permalink to this headline"> link</a></h3>
|
||
<p>A <a class="reference internal" href="layeredimage.html"><span class="doc">layered image</span></a> is a new way of defining images
|
||
for use in Ren'Py. It's intended to be used with a sprite that has been
|
||
created in Photoshop or some other program as a series of layers.
|
||
The layered image system can use the attributes the image was displayed
|
||
with and Python conditions to determine what layers to display.</p>
|
||
<p>Layered images are intended to be a replacement for the use of <a class="reference internal" href="displayables.html#Composite" title="Composite"><code class="xref py py-func docutils literal notranslate"><span class="pre">Composite()</span></code></a>
|
||
and <a class="reference internal" href="displayables.html#ConditionSwitch" title="ConditionSwitch"><code class="xref py py-func docutils literal notranslate"><span class="pre">ConditionSwitch()</span></code></a> to define layered images. It includes a language
|
||
that makes defining such images simpler, and Ren'Py can generate portions
|
||
of the definitions from appropriately named files. It also integrates better
|
||
with the rest of Ren'Py, as attributes can be predicted in ways that a
|
||
ConditionSwitch cannot, and layered images work with the interactive director.</p>
|
||
</div>
|
||
<div class="section" id="dict-transitions">
|
||
<h3>Dict Transitions<a class="headerlink" href="#dict-transitions" title="Permalink to this headline"> link</a></h3>
|
||
<p><a class="reference internal" href="transitions.html#dict-transitions"><span class="std std-ref">Dict Transitions</span></a> makes it
|
||
possible to use the with statement and certain other functions to apply
|
||
transitions to one or more layers. Ren'Py will not pause for these
|
||
transitions to occur. Dict transitions make it possible – and even
|
||
convenient – to have a transition apply to the sprites alone while dialogue is
|
||
being displayed.</p>
|
||
</div>
|
||
<div class="section" id="id81">
|
||
<h3>Changes<a class="headerlink" href="#id81" title="Permalink to this headline"> link</a></h3>
|
||
<p>The old tutorial and old templates are no longer included with Ren'Py.
|
||
They can still be used with new version of Ren'Py if copied into
|
||
this or later versions.</p>
|
||
<p>The new <a class="reference internal" href="screen_actions.html#Scroll" title="Scroll"><code class="xref py py-func docutils literal notranslate"><span class="pre">Scroll()</span></code></a> action makes it possible to have buttons that
|
||
change the position of a viewport or the value of a bar.</p>
|
||
<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 respect the alpha channels of their source displayables, as
|
||
if given the <code class="docutils literal notranslate"><span class="pre">alpha=True</span></code> argument. As omitting the alpha channel is no
|
||
longer an optimization, this change allows the same transitions to be
|
||
used in more places.</p>
|
||
<p>Automatic image definitions now take place at init level 0, rather than
|
||
an init level of greater than 999. This allows <a class="reference internal" href="displaying_images.html#renpy.has_image" title="renpy.has_image"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.has_image()</span></code></a> to
|
||
be used in <code class="docutils literal notranslate"><span class="pre">init</span></code> blocks.</p>
|
||
<p>The interactive director now has a button that allows you to choose if it
|
||
is displayed at the top or the bottom of the screen.</p>
|
||
<p>The <a class="reference internal" href="screens.html#sl-for"><span class="std std-ref">screen language for</span></a> statement now takes an index clause:</p>
|
||
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">for</span> <span class="n">i</span> <span class="k">index</span> <span class="n">i</span><span class="o">.</span><span class="n">name</span> <span class="k">in</span> <span class="n">party</span><span class="p">:</span>
|
||
<span class="o">...</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>When provided, it should return a unique value that can map information like
|
||
button and transform state to the object it originates from.</p>
|
||
<p>There is now alternate ruby text, allowing two kinds of ruby text
|
||
to be displayed at once (such as a translation and pronunciation guide).</p>
|
||
<p>The new <a class="reference internal" href="displayables.html#displayable-prefix"><span class="std std-ref">displayable prefix</span></a> system make it possible to define your
|
||
own displayables that can be accessed using strings, the same way that
|
||
images, image files, and solids have a string form.</p>
|
||
<p>Ren'Py now supports creating .zip files that have single files (such as
|
||
.rpa files) that are larger than 2GB. As this requires the use of the
|
||
Zip64 standard, unpacking such files may not be supported on some platforms,
|
||
most notably Windows XP.</p>
|
||
<p>The new <a class="reference internal" href="displaying_images.html#renpy.get_hidden_tags" title="renpy.get_hidden_tags"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.get_hidden_tags()</span></code></a> function returns the set of tags that
|
||
have attributes but or otherwise hidden, while the <a class="reference internal" href="displaying_images.html#renpy.get_showing_tags" title="renpy.get_showing_tags"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.get_showing_tags()</span></code></a>
|
||
function can return a list of tags in sorted order.</p>
|
||
<p>Showing a movie sprite a second time will now replay the movie from the start,
|
||
for consistency with ATL and other animations.</p>
|
||
<p>The documentation has received an editing pass, courtesy of Craig P. Donson.</p>
|
||
</div>
|
||
<div class="section" id="id82">
|
||
<h3>Translations<a class="headerlink" href="#id82" title="Permalink to this headline"> link</a></h3>
|
||
<p>The Ren'Py tutorial and The Question now have French translations, thanks
|
||
to Alexandre Tranchant.</p>
|
||
<p>The Japanese and Russian translations have been updated.</p>
|
||
</div>
|
||
<div class="section" id="id83">
|
||
<h3>Fixes<a class="headerlink" href="#id83" title="Permalink to this headline"> link</a></h3>
|
||
<p>This fixes a regression that prevented screens from handling the hide or
|
||
replaced events when the screen was not being shown. (This might be the
|
||
case when the player is skipping through the game.)</p>
|
||
<p>An issue that caused the interactive director to be translated into
|
||
Russian when the default (English) language was being used has been
|
||
fixed.</p>
|
||
<p>The <a class="reference internal" href="displayables.html#Composite" title="Composite"><code class="xref py py-func docutils literal notranslate"><span class="pre">Composite()</span></code></a>, <a class="reference internal" href="displayables.html#Crop" title="Crop"><code class="xref py py-func docutils literal notranslate"><span class="pre">Crop()</span></code></a> and <a class="reference internal" href="displayables.html#Tile" title="Tile"><code class="xref py py-func docutils literal notranslate"><span class="pre">Tile()</span></code></a> displayables are now
|
||
actually available under their new names.</p>
|
||
<p>An issue that could cause Ren'Py to roll back to an incorrect place when
|
||
accessing the console has been fixed. This could cause the console to
|
||
display incorrect data, while in the console itself.</p>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="older-changelogs">
|
||
<h2>Older Changelogs<a class="headerlink" href="#older-changelogs" title="Permalink to this headline"> link</a></h2>
|
||
<p>The changelogs for some Ren'Py 6 versions can be found <a class="reference internal" href="changelog6.html#changelog-6"><span class="std std-ref">here</span></a>,
|
||
with older changelogs being found at:</p>
|
||
<blockquote>
|
||
<div><a class="reference external" href="https://www.renpy.org/dl/6.10.2/CHANGELOG.txt">https://www.renpy.org/dl/6.10.2/CHANGELOG.txt</a></div></blockquote>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
<footer class="footer">
|
||
<div class="container">
|
||
<p class="pull-right">
|
||
<a href="#">Back to top</a>
|
||
|
||
</p>
|
||
<p>
|
||
© 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> |