For the immediate future, Ren'Py can be downloaded from:
http://www.bishoujo.us/renpy/
We are in the process of migrating the documentation for Ren'Py over to a new wiki. For documentation more recent then that included with this release, please go to:
http://www.bishoujo.us/wiki/Changes_in_5.6.0
To upgrade, copy over the game directory from your old version of Ren'Py, and set the library.script_version variable to (5, 6, 0). You then need to update your script as follows:
- Replace styles beginning with selected_ with properties beginning with selected_. For example, style.selected_button.color should be replaced with style.button.selected_color. style.selected_button_text.hover_color becomes style.button_text.selected_hover_color.
- Buttons on the game and main menus now use the styles menu_button and menu_button_text. It may be necessary to change these style to properly position menu buttons.
- There is now an implicit "with None" statement after many built-in interactions. The new behavior should probably be suitable for most changes, but if necessary it can be disabled by setting config.implicit_with_none to False.
- The default font has been changed to Deja Vu Sans. Vera.ttf no longer ships with renpy, please update your script to use DejaVuSans.ttf instead.
A goal of the 5.6 series is to eliminate most extras. To this end, the two_window_say and side_image extras have been replaced with parameters to the Character object. The old extras still work, but the new syntaxes are preferred.
Perhaps the neatest feature of this series is shift+R reloading. When config.developer is True, hitting shift+R will save the game, reload the script, and then reload the game. With some caveats, this makes it easy to see changes to the script.
I'd like to thank everyone in the community who contributed feature ideas and bug reports to Ren'Py. Because of you, this is a much better release. I'd also specially like to thank Piroshki for the new character art.
And now, the changelog. Please read this, as this announcement barely scratches the surface of...
What's New in Ren'Py 5.6.0.
The demo features new character art, contributed by Piroshki.
The syntax of the show, scene, and hide statements has been expression. Along with image names, these statements also can take image names and expressions evaluating displayables. So one can write:
Code: Select all
show expression "foo.png"
Code: Select all
show eileen happy zorder 2 show eileen vhappy as eileen2 zorder 1
+++
As part of this, "as" and "zorder" are now Ren'Py keywords.
Ren'Py now includes a bilinear scaling feature. im.Scale, Zoom, and the new FactorZoom function now use bilinear scaling by default. FactorZoom and Zoom default to a very fast scaling method that only works on opaque images, but this can be disabled usin their opaque parameter.
A new documented minigame interface has been added to Ren'Py. This interface allows programmers to write 2D minigames. These mingames take advantage of Ren'Py's screen update management code.
Character now takes two new parameters, show_side_image and show_two_windows. These parameters take the place of the side_image and two_window_say extras, which have been removed.
The default font has been changed to Deja Vu Sans. While the glyphs shared with Vera Sans remain indentical, Deja Vu improves support for Eastern European languages.
The new MultiPersistent object allows the storage of inter-game persistent data.
The same inputs that hide transient windows can be used to show them again.
Move, Pan, Motion, Zoom, and FactorZoom all take a time_warp parameter, which allows a function to be provided that changes how time is processed in those functions. This makes adding acceleration and deceleration easy.
We now support layers that comprise a rectangle that is smaller then the entire screen, through the config.layer_clipping variable.
Now, setting _window_during_transitions to True causes the narration window to be displayed during transitions.
Now, colors can be written in html-like hexadecimal notation strings, as well as 4-tuples. When a displayable is needed, an image can be specified by giving its filename as a string, and a solid color can be specified by giving a color string beginning with '#'.
+++
When config.implicit_with_none is True (the new default), the equivalent of a "with None" statement is run after each line of dialogue, menu, renpy.input() and renpy.imagemap(). This allows for transitions to be written as a single with statement, rather than a "with None/with transition" pair.
+++
There are quite a few changes in styles. A big one is that we have replaced the "selected_" styles, and replaced them with properties beginning with "selected_". For example, instead of writing:
Code: Select all
$ style.selected_button_text.hover_color = (255, 255, 0, 255)
Code: Select all
$ style.button_text.selected_hover_color = (255, 255, 0, 255)
$ style.button_text.selected_hover_color = "#ffff00"
The old style names now are used in a compatibilty mode, but that mode does not work with style inheritance. (So one can set style.selected_button_text, but you can't inherit from the selected_button_text style)
+++
We no longer support the activate_ style prefix, as it never really worked. (We still support activate_sound, which did.)
All buttons used by the main and game menus inherit from menu_button and menu_button_text.
Now, style properties are checked to see if they are valid, and it is an error to set a nonexistent style property. The config.style_properties variable lets one define new style properties, should it prove necessary.
Ren'Py now tries to give an accurate line number for runtime errors in python blocks found inside .rpy files.
Frame now takes a tile= parameter. When True, it will tile images rather then scaling them.
There is now a im.Color image manipulator, which is similar to im.Recolor, but takes colors as strings or tuples rather then 4 parameters. The im.Scale image manipulator is now documented. [doc]
The renpy.context_nesting_level function returns the depth of the context we are in. The renpy.count_displayables_in_layer returns the number of displayables in a layer. The renpy.showing function can be used to determine if an image tag is currently being shown on a layer.
When changing the script, Ren'Py now tries fairly hard to assign statements the same internal name they had in the previous version of the script. This means that it's now usually possible to load in a changed script, and come back to roughly the spot where you left off. (Previously, the closest we would come is the prior label.) Of course, variables are given the values they when the game was saved.
This allows us to implement a new feature. Pressing shift+R when config.developer is set saves the game, reloads the script from disk, and then reloads the game. Doing this generally brings you to the last unchanged line seen before saving, making it easy to edit the script and then see your changes in action. Like many developer features, this may not work perfectly in all circumstances.
Returning to the main menu no longer causes init code to be re-run. This improves the speed of returning to the main menu, while bringing its semantics inline with loading a game.
Ren'Py now checks, when parsing a file, that image statements are contained within init blocks. It has long been an error to run an image statement outside of an init block, so this primarily checks for useless image statements.
Ren'Py is now more forgiving of whitespace on the last line of a file.
We now look for the presplash image in the "game" and "data" directories, as well as the directory derived from the script filename.
!!!
Fixed a bug that prevented pauses from terminating when they occured in interactions beginning with a transition, when no events occured during the interaction. A symptom of the bug was that if the user moved the mouse, the pause would immediately terminate and the game would advance.
!!!
A bug with MP3 playback on Windows has been resolved.