forked from renpy/renpy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CHANGELOG.txt
4796 lines (3342 loc) · 179 KB
/
CHANGELOG.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
New in Ren'Py 6.10.2
--------------------
Ren'Py now caches the individual words of text that are rendered. This
can lead to a speedup in text display when there are many words of
text on the screen, and that text is re-displayed, as is the case
where the text text speed is not the maximum. This is especially
beneficial for eastasian languages, where every character is treated
as a word.
The new config.menu_clear_layers variable allows layers to be cleared
when entering the game menu. This makes it easier for a layer to have
overlay-like things on it when in the game, but not when in the game
menu.
The new renpy.cache_pin function pins images into memory, loading them
as soon as possible and keeping them loaded. The renpy.cache_unpin function
undoes this.
The new config.automatic_images_strip variable can strip out prefixes
when automatically defining images.
It's now possible to assign style properties to individual imagemap
buttons, by indexing style.imagemap_button. (So for example, one could
assign to style.imagemap_button["Start Game"].hover_sound .)
The new voice_replay function replays the voice played on the current
interaction. The new voice_can_replay function returns True if a voice
can be replayed.
The launcher now accepts a RENPY_DEFAULT_PROJECTS_DIRECTORY, which sets
the default for the projects directory, if it has not already been set
by the user. It also will report an error when creating a project fails,
rather than producing a traceback.
The launcher now links to the new Ren'Py Games List, at
http://games.renpy.org/.
Previously, it was impossible to pass an arguments list to a call
expression. Now, we allow the pass keyword to be used to distinguish
the two, using code like:
call expression foo pass (bar, baz)
Ren'Py will now not show the click-to-continue indicator when a
character is called with interact=False, unless that character is also
called with ctc_force=True.
Ren'Py now builds zip files in distributions 64k at a time.
Ren'Py will now ignore music files that do not exist. Previously, it
could loop trying to play them. (This would increase CPU usage, rather
than causing a crash.)
The following numbered bugs were fixed:
* lp:501351 - Displaying a Frame() with tile=True crashes
* lp:506322 - MoveTransition is not applied to overlay even when explicitly stated
In addition:
* Fixed a bug that caused pixellate to crash.
* Fixed a bug that caused the overlay to display twice in some cases.
* Fix an infinite loop that could rarely occur when rolling back or saving.
New in Ren'Py 6.10.1
--------------------
Images and other surfaces are now created with a 1px transparent border
around them. This change allows transform to work correctly with a 1:1
scale, where as previously Ren'Py would blur the image slightly, while
trying to ensure it never accessed a pixel outside of the original
image bounds.
ATL now has a "function" statement, which allows an ATL transform to
use the same functions that are supplied to Transform.
The layout.imagemap_main_menu and layout.imagemap_load_save functions
now allow one to define variant screens. This allows one to select an
imagemap main menu screen to use, or to define different screens for
loading and saving.
The overlay semantics were changed such that transitions apply to overlays
in the same way they apply to everything else. (So, for example, dissolves
will apply to overlays.)
The image text tag can now take any textual image representation. So
something like {image=eileen happy} is legal, if odd.
The following numbered bugs were fixed:
lp:366412 - Ren'Py could crash on shift+R at the main menu, under some circumstances.
lp:485631 - The transfer of state from a transfrom to a transform supplied as part of an image didn't work.
lp:487688 - non-ASCII characters didn't display in the window title bar.
lp:487701 - Ren'Py didn't work when in a directory containing non-ASCII characters.
lp:488814 - Scaling to the same size could blur an image.
lp:489212 - Interpolation didn't work when the starting value was None.
lp:493062 - One could roll back into an imagemap main menu.
lp:494779 - The window shown state wasn't being tracked correctly.
lp:494820 - Error handling in ATL hid too many error messages.
A major bug that caused Ren'Py to fail as scaling was enabled was fixed.
A number of minor bugs revealed by pyflakes were fixed.
New in Ren'Py 6.10.0
--------------------
The demo game is in the process of being converted into a new tutorial
game, which shows recommended Ren'Py code examples rather than
requiring the user to learn from the game itself's source code.
Ren'Py now supports an Animation and Transformation language
(ATL). This provides a convenient syntax for animating an image, or
transforming it by positioning it, rotating it, zooming it, and
adjusting its opacity.
To a large extent, ATL supersedes the Animation, TransitionAnimation,
anim.SMAnimation, anim.Blink, Zoom, FactorZoom, RotoZoom, SizeZoom,
LiveCrop, Move, Pan, Position, Motion, and Revolve functions, and
perhaps others. As it allows properties to be scripted, ATL is more
powerful that all of these functions. (For example, many of these
functions can only do relatively simple repeats, while ATL allows
complex patterns to be easily specified.)
ATL can be used in the new transform statement, and new variants of
the image, scene, and show statements.
When an image is shown, Ren'Py checks to see if there was a previous
image with that tag, and if that image used a transform. If this is
true, Ren'Py does two things:
# If the new image is not a transform, it wraps it in a transform.
# The transform is initialized to have the properties of the old transform.
The generally has the effect of "remembering" the position of images
shown on the screen. In some cases, this memory effect may override a
position encoded into an image. In that case, the image must be hidden
and shown again.
The default positions (left, right, center, truecenter, offscreenleft,
and offscreenright) are now defined as ATL transforms. This means that showing
an image at such a position will cause the position to be remembered.
Support for Arabic and Hebrew has been added to Ren'Py. To enable this
support, config.rtl needs to be set to True. It may also be necessary
to set various style properties to do a credible job of right-to-left
layout.)
The freetype library has been updated, and we have added support for
the use of TrueType collections. Using a name of [email protected] will get
the first font in the collection, [email protected] will get the second font,
and so on.
The displayable code has been adjusted to consider strings that do not
contain at least one dot as image references. Now, one can write
"eileen happy" to refer to an image with that name.
A pause statement has been added to Ren'Py.
The new config.auto_load variable allows you to specify a save file
that is automatically loaded when Ren'Py starts. For example, setting
this to "1" loads the game in save slot 1. This is intended for use by
developers, so they can easily return to a point in the game after
restarting Ren'Py.
The layout.imagemap_yesno_prompt now supports a prompt_images
argument, which is can be used to specify images to replace the
text of a yes/no prompt.
The new ui.tag function allows one to specify the image tag of a UI
widget. This can have positive interactions with transforms.
Ren'Py now has a define statement, which combines into a single
statement running code at init time, and assigning it to a
variable. Ren'Py keeps track of these definitions, which may in the
future make it easier for editors to determine where something is
defined.
The new config.window_overlay_functions variable contains a list of
functions that should be called only when once the dialogue window has
been shown.
The new config.automatic_images variable, when set correctly, will
cause Ren'Py to automatically define images for appropriately-named
image files found in the archives and game directory.
Python blocks are now compiled in a mode that allows the python "with"
statement. Container displayables now support the context manager
protocol, automatically closing at the end of a with block. (Note
that the python with statement postdates the Ren'Py with statement,
and has totally different semantics.)
The play and queue statements now take optional loop and noloop
modifiers, which force looping (or lack of looping) on that channel.
The play statement takes an if_changed modifier, which prevents a song
from being restarted if it is already playing on the channel. [doc]
Ren'Py now allows save games to be deleted. To do this, select a save
game (either with the keyboard, or by hovering the mouse over it), and
hit delete.
Buttons now take a keymap argument, which specifies an alternate
keymap that is used when the button is focused.
Added the Image Location Picker to the Developer (shift+D) menu. This
tool lets the user pick an image, and then pick locations that
image. It displays the mouse coordinates, imagemap rectangle, and
cropping rectangle.
Added a FPS meter to the Developer (shift+D) menu.
Added a .001s sleep for frames that are framerate-limited. This should
prevent Ren'Py from consuming all CPU unless the game is CPU-bound.
Added config.file_open_callback, which allows Ren'Py to load files
from user-definable archive types.
Added the renpy.get_roll_forward function, which is the infrastructure
needed to create a button that lets the user roll forward.
Changed MoveTransition to preserve the timebases of the thing being moved
in all circumstances.
Ren'Py is now built using SDL-1.2.13. On Linux systems with pulseaudio
support, it will use pulseaudio for audio output.
Fixed a bug with archive files that could cause crashing in some
circumstances.
Fixed a bug that prevented {w=1} from working.
Fixed a bug that prevented style.rebuild from working.
Fixed a potential segfault bug with certain transforms, zooms, and
rotations.
New in Ren'Py 6.9.3
-------------------
This release includes Launcher2, a near-total rewrite of the Ren'Py
launcher. Among the more important changes are:
* The launcher now supports a project directory. It is no longer
necessary to move projects around when upgrading Ren'Py.
* The launcher has support for selecting the editor to use. While we
ship with jEdit support, other editors can be downloaded from the
Ren'Py web site.
* When building distributions, the launcher now allows the user to
choose which distributions are built.
* The Macintosh distribution now places all non-documentation files
inside a single application.
* There is a new combined distribution, which includes support for
Windows, Linux, and Macintosh in a single zip file.
The new ui.detached function allows one to use the ui functions to
define displayables without adding them to a layer.
Ren'Py will now search for a directory named "Ren'Py Data" in the
directories above your Ren'Py installation. If found, save data will
be placed in that directory, rather than the system-specific default
location. This should help make it easier to develop Ren'Py games when
using a USB drive.
The save location for screenshots has now been standardized. It is now
the directory containing the executable used to start Ren'Py, be it a
.exe, .py, .sh, or .app. (The latter is handled specially.)
Allow config.layer_clipping to specify layers that are larger than the
screen.
The various layouts now change the mouse to the gamemenu or mainmenu
mouse, as appropriate.
This distribution include a new NVL-mode tutorial, teaching people how
to make NVL-mode games.
Fixed a long-standing problem that could cause Rollback to operate
incorrectly with object that were unreachable at the time of the
Rollback.
Fixed a problem that prevented animations from displaying correctly
when the animation was displayed more than once.
Fixed a problem that could cause children of the various
MultiBox-based displayables (Fixed, HBox, VBox, and LiveComposite) to
display animations incorrectly.
New in Ren'Py 6.9.2
-------------------
The semantics for play and queue have changed slightly. Now, when a
play statement is followed by one or more queue statements, the first
file in each play or queue statement will be played. For example:
play music "a.ogg"
queue music "b.ogg"
queue music "c.ogg"
will play "a.ogg", "b.ogg", and then loop "c.ogg". This change also
applies to renpy.music.play and renpy.music.queue.
Rollback was changed so that doing anything other than a roll-forward
while in rollback mode exits rollback immediately.
The library alias for config has been removed.
Fixed a regression that caused dissolves to be terribly slow.
Fixed a bug that caused Ren'Py to crash when playing music on Windows
when Data Execution Prevention was enabled. DEP is enabled by default
on 64-bit Windows Vista.
Fixed a bug that caused Ren'Py to crash when a window icon was used on
a computer with a 16-bit or 8-bit screen depth.
Fixed a bug that caused ui.sizer to malfunction.
Fixed a repeated word in "The Question".
Fixed a bug that could cause it to take two tries to define a joystick
button.
New in Ren'Py 6.9.1
-------------------
The music and video playback code has been completely rewritten. The
new implementation uses the ffmpeg library. It includes the following
features:
* Support for ogg, mp3, mp2, wav, and flac audio.
* Support for theora, mpeg4 part 2 (including DivX and Xvid), mpeg2,
and mpeg1 video.
* Support for an arbitrary number of named channels, replacing the
previous eight numbered channels.
* Audio files are now automatically converted to the output sampling
rate (by default, 44100hz). This prevents the problems that would
previously crop up when playing audio sampled at other rates.
* The play, queue, and stop statements now take a channel name as the
second argument, which makes using user-defined channels easier.
As part of this rewrite, we have eliminated support for mod formats,
as they are not supported by ffmpeg.
Please read the reference manual documentation for Audio and Movies to
learn the new interface.
The new code requires some changes in the saved data. As a result,
loading a file saved with a prior version of Ren'Py may lead to a lack
of music until the next track is played.
The new window statement allows one to control if an empty window is
shown when no character is speaking. Specifically, the
window show [transition]
statement shows the window, and the
window hide [transition]
statement hides it. Both can take an optional
transition. config.empty_window is responsible for displaying the
window, while config.window_show_transition and
config.window_hide_transition are default transitions. The state of
the window can be determined by testing _window. The
renpy.shown_window function can be called to suppress displaying the
empty window, and is called automatically when characters speak.
Hotspots for the game menu buttons can be defined as part of
layout.imagemap_load_save, layout.imagemap_preferences, and
layout.imagemap_yesno_prompt. Doing so prevents layout.navigation from
being called for that screen. It also allows opaque imagemaps to be
used, rather than forcing them to be transparent to allow the
navigation to show through.
There is a new config.windows_icon variable, that lets one set the
window icon for Windows separately from Mac OS X and Linux.
Ren'Py now automatically scales itself down when it detects that the
game window is too large for the screen.
The define.move_transitions function can now pass keyword arguments to
the moves it creates. The most useful thing with this is to pass
subpixel=True, in order to create subpixel move transitions.
The Motion (including Move and Pan), Zoom, RotoZoom, and FactorZoom
displayables now use the style.motion style, which now has xanchor and
yanchor both set to 0. This gives these movements the same semantics
when used inside an image clause as they have outside one.
im.Grayscale and im.Sepia now take properties, so they can be
positioned.
The new renpy.get_placement function returns information about the
placement of displayables.
Improved the render management code, so there should no longer be any
leaks reported during shutdown.
Deal with the case where a bmfont has a negative offset for the first
character in a string.
Added more verbose diagnostics when illegal statements are run in the
init phase.
Added _rollback, which controls if rollback is enabled.
Added a target parameter to renpy.full_restart, which allows the main
menu screen to be selected after a restart.
Fixed a bug that caused layout.imagemap_main_menu to call a label even
though there was a button with the same name.
Fixed a bug that prevented Zoom from working in non-bilinear mode.
Fixed a bug that could cause buttons not not consume events when using
an imagemap main menu.
Fixed a bug that caused Transform to produce an incorrectly-sized
render.
Fixed a bug that could cause crashing when rolling back to a Zoom with
an after_child.
Fixed a bug that could cause segfaults when saving overly-complicated
images.
New in Ren'Py 6.9.0
-------------------
This release features a rewritten rendering system. The rendering
subsystem is what manages drawing to the screen. There have been
several major improvements:
* The render system has been simplified. Although still complex, it's
now easier to understand than the old system, while also being
naturally a bit faster.
* That being said, the render system now focuses more on framerate
consistency than raw speed.
* The render system now supports subpixel drawing, drawing images at
locations that are not integer pixel boundaries. This is enabled by
setting the subpixel style property to True for a displayable. (It
makes the most sense to do this for Move and Pan, and less sense to
do this for non-moving displayables.)
* The render system supports specifying subpixel placement of
displayables. This is done using the new absolute type. (A
floating-point position is still interpreted as a fraction of the
area in which the displayable is placed.)
* The render system supports a rotate-zoom-alpha mode, in which allows
a displayable to be rotated, zoomed, and have its alpha
changed. When this mode is used, the cost remains constant, even
when multiple transformations are composed. Currently, this is only
used by Transform and ui.transform.
* The render system supports rotating and scaling focusable objects.
Improved the transform routine used by RotoZoom and Transform. It's
now both more accurate and faster. On Intel computers, it is now
accelerated using MMX instructions.
The image statement now implicitly places itself inside an init block
if it's not inside an init block to begin with. The code:
image bg world = "world.jpg"
is now equivalent to:
init 990:
image bg world = "world.jpg"
When compiling python blocks containing strings with a unicode
character in them, Ren'Py will automatically prepend a u to any string
that's missing it. This should make life easier for users of non-ASCII
languages.
The new ui.autobar function makes it easy to make a bar that
varies between two values over time.
The new renpy.Container class can be subclassed to create a user-defined
displayable thatr contains other displayables, like Transforms.
The new im.FactorScale image manipulator allows images to be scaled by
a specified factor at preload time. This is generally faster than doing the
equivalent scaling at display time with FactorZoom.
The new renpy.sound.set_pan function allows sound and music to be
smoothly panned over time.
The new config.label_callback variable allows a function to be called
whenever control reaches a label. It can distinguish between jumps to
that label and control falling through.
There have been a couple of places where properly documented functions
have superseded semi-documented calls into the Ren'Py internals:
The renpy.game_menu and ui.gamemenus functions are now the preferred ways
of getting access to the game menu.
The ui.jumps function now takes a transition argument, allowing it to subsume
the undocumented _intra_jumps.
Ren'Py now looks for the file environment.txt in the directory
containing Ren'Py itself. If it finds it, it loads the file as a
python file, and uses it to set the default values of environment
variables. This allows things like the editor or the scale factor to
be set even on platforms that don't make it easy to change environment
variables globally.
The reporting of parse errors involving missing quotes has been
improved.
Changed the behavior of overlays during transitions. Now, both the old
and new screens will use the new overlay. Previously, the overlay was
cleared out during a transition, which didn't work well, as (for
example) a dissolve would cause the overlay to blink out and then
dissolve back in again.
MoveTransition and define.move_transitions have been changed to take
a layers argument, giving the list of layers the transition applies
to. By default, this is only the master layer, which is a change in
their behavior.
Calling theme.roundrect() no longer implies layout.button_menu().
Ren'Py now autosaves when entering the quit prompt, and will not actually
quit until this autosave is complete.
The default framerate limit (config.framerate) has been raised to
100fps. This make tearing less noticable than on a 60hz screen.
Added renpy.partial as a version of renpy.curry that requires two
function calls, rather than three.
Fixed a divide by zero error that occured when Alpha was used for 0
seconds.
Libvorbis has been upgraded to version 1.2.0.
To reduce distribution size, OGG Speex support was dropped.
New in Ren'Py 6.8.1
-------------------
Added support for the iRex iLiad ebook reader platform. This required
adding the following features, which may prove useful for other
platforms:
Added support for the RENPY_SCALE_WIDTH environment variable, which
allows the game to be scaled to a specific width, if it's larger.
Added support for the RENPY_LESS_MEMORY environment variable, which
reduces the amount of memory used by Ren'Py in exchanged for reduced
speed.
Added support for the RENPY_LESS_UPDATES environment variable, which
tries to reduce the number of screen updates to one per interaction.
Added support for the RENPY_LESS_MOUSE environment variable, which
prevents the mouse from being shown.
The iLiad support was sponsored by Hixbooks.
It is now possible to rebuild the distribution of a game by unzipping
it underneath the Ren'Py directory, selecting it as a project, and
building the distributions. This makes it easy to upgrade the version
of Ren'Py used by a game, or to build a version of it that works on
your favorite platform.
The new Alpha function can be used to change the alpha level of a
displayable. (im.Alpha can only be used with other image
manipulators.)
User-defined statements are now documented in the reference manual,
making them officially supported.
A user-defined statement can now be used as the default
statement. This allows you to replace the say statement with an
alternate of your own devising.
Fixed a bug that occured when space characters were inserted
immediately after a newline.
Fixed a problem displaying a presplash image on the mac platform.
New in Ren'Py 6.8.0
-------------------
Ren'Py now includes its own font-handling library, derived from
pygame.font/SDL_ttf, which it uses in place of them when
possible. This gives two advantages:
* Outlined text is now possible. The new outlines style property
allows you to specify one or more outlines, including offset
ones. This allows for several fairly complicated text effects, similar
to what you'd see in modern subtitles.
* The bug preventing fonts from being archived has probably been
fixed. It should now be possible to include a font in an archive, and
have that work. The archiver has been modified to allow ttf files to
be archived again. Please report any bugs/crashes that occur.
There is now a new justify style property, that causes lines of text
to have additional whitespace inserted between words so that the left
and right margins are even, except on the last line of a paragraph.
Ren'Py now supports the MudgeFont and BMFont image-based font file
formats. The new renpy.register_mudgefont function is used to register
a MudgeFont, and the renpy.register_bmfon function is used to register
a BMFont.
Newly-created games will have a Help option on the main and game
menus. This is controlled by the config.help variable. By default
the help system shows the README.html file in the game's base directory.
If the file icon.ico is present in the base directory, it will be used
as the icon of the windows exe when building the windows
distribution. Similarly, the file icon.icns will be used as the icon
of the Macintosh application. (Note that .icns is a different file format
from .ico.)
On Mac OS X, Ren'Py will not change the application icon unless
config.window_icon is set. More specifically, it will default to the
launcher icon rather than a generic pygame icon.
The Macintosh application will now show the name of the game in the
menu bar, rather than "Ren'Py Launcher".
The "Continue Game" option on the main menu has been renamed "Load
Game", for consistency with the game menu.
When config.developer is set and an undefined image is used in a show
or scene statement, a list of undefined images will appear centered at
the top of the screen. A black screen (configurable with
config.missing_background) will be shown instead of any missing
background. This makes it easier to write a script before all images
are present.
The newly-documented Style.set_parent method lets you change the
parent of a style. The new style.rebuild function allows styles to be
rebuilt even after the game has begun running, with some
caveats. (Changes are not persisted, for one thing.)
The new unscrollable style property allows one to choose how
unscrollbable scrollbars are displays. None keeps the current
behavior, which shows the bar normally. If set to "insensitive", the
bar becomes insensitive, while if set to "hide", the bar is not
drawn at all.
The new renpy.easy_displayable method can be used by user-defined
displayables to convert strings into Solid or Image displayables.
Alt-F4 and Command-Q now trigger the quit event, as if you pressed the
quit button on the top of the window. The first press brings up the
quit prompt, and a second press forcibly terminates the game.
Alt-M and Command-M iconify the window.
The new RENPY_SCREENSHOT_PATTERN environment variable lets you
configure the name of screenshot files. Ren'Py can now write out
screenshots as JPGs, as well as PNGs.
Several of the libraries underlying Ren'Py have been updated. Pygame
has been updated to version 1.8.1, while Freetype is now at version
2.3.7.
The presplash code now looks for presplash.jpg in the game directory
if presplash.png is not found.
On Windows, config.window_icon will be scaled to 32x32 if it is wider
than 32 pixels. This allows the same icon to be used across platforms.
Custom mouse cursors should now be properly hidden when the mouse
leaves the window. Previously, this failed to work on the Mac OS X
platform.
The launcher has been moved into the launcher/ directory. This really
shouldn't matter much, but may affect packaging and translation.
New in Ren'Py 6.7.1
-------------------
Ren'Py now ships with jEdit as its default text editor. This means Java
1.5 or later is now required to edit scripts.
The Macintosh application is now universal, including both i386 and
ppc binaries. This means it should run faster on newer Intel systems.
Ren'Py will now use Launch Services to report errors that occur on the
Macintosh.
User-defined displayables can now use a canvas to draw lines, polygons, arcs,
and ellipses on the screen.
The new _window_subtitle variable allows a portion of the window
caption to be varied depending on the game circumstances. The new
config.menu_window_subtitle variable controls the value of _window_subtitle
when in a menu.
Image preloading now takes place in a separate thread. This allows
image loading to proceed even while animations are playing on the
screen.
A new button in the launcher now provides easy access to the local
copy of the Ren'Py documentation.
The definitions of config.editor and config.editor_transient have been
changed. While it's simplified, older values may no longer
work. Please read the documentation for details of the new syntax.
Ren'Py now limits the framerate to 60 frames per second, which should
improve smoothness on fast enough machines.
Ren'Py now scans the game directory for all .rpa files, and adds them
to config.archives automatically. In addition, the archiver tool now
prompts for the name of archives, and uses filename patterns to decide
what to archive. This makes it easier to break the files up into
multiple archives, in a single game.
The new renpy.copy_images function copies images with one prefix to a
second prefix.
The launcher will no longer include directories beginning with a dot
(like .svn and .bzr) when copying the template directory to create a
new project.
This version includes a refresh of the character art included with
"The Question". The new art is by Deji, and the full-color version of
the art is available from http://wiki.renai.us/.
New in Ren'Py 6.7.0
-------------------
The new layout.imagemap_navigation, layout.imagemap_preferences,
layout.imagemap_load_save, and layout.imagemap_yesno_prompt layouts
allow one to use imagemaps to define the game menu. Together with the
existing layout.imagemap_main_menu, the entire interface can now be themed
with imagemaps. (except for the rarely-used joystick preferences)
The new SplineMotion motion function, contributed by Aenakume, allows
motions to be specified using linear, quadratic, or cubic
splines. This allows complex non-linear motions to be specified. A
spline editor can be downloaded from:
http://www.renpy.org/wiki/renpy/Spline_Editor
The new SizeZoom motion function allows displayables to be scaled to a
specific size. Along with SizeZoom, the Zoom and FactorZoom functions get
a new repeat argument that makes the zooms repeat.
If the new config.save_directory variable is set, Ren'Py will now try
to save games and persistent data underneath the user's home
directory. The precise directory saved to varies by platform:
* Windows: %APPDATA%/RenPy/<save_directory>
* Mac OS X: ~/Library/RenPy/<save_directory>
* Linux/Other: ~/.renpy/<save_directory>
Newly-created projects will have config.save_directory set to a value
based on the project name.
Since finding the save directory is now more difficult, the launcher
has gained an option that allows the user to easily delete a game's
persistent data.
A new variable, nvl_variant, allows one to change the styles used by
nvl-mode. or example, if nvl_variant is set to "foo", then
style.nvl_window["foo"] will be used instead of style.nvl_window.
The renpy.full_restart function now takes an argument that lets one
specify the label that will be restarted to. By calling
renpy.full_restart(label="start"), one can start a new game.
Software-drawn mouse cursors are now hidden when the mouse leaves the
window. Previously, the mouse cursor would be kept around in the same
place until the mouse re-entered the window.
The \ character is now the universal quote character. One can use \%
to prevent % from performing interpolation, and \{ to prevent { from
starting a text tag.
Using stdin for the remote control didn't work on Windows, and could
lead to errors in some cases. Instead, the remote control mode now
uses a file, which gets deleted after processing the command.
Improved the numerical stability of interpolation. This fixes a
problem where moves could wiggle from side to side for no good
reason.
The archiver will now cowardly refuse to archive .ttf files. This is
because reading those files out of an archive will crash on windows.
The new config.clear_layers variable allows layers to be cleared out
when entering the game and main menus.
Fixed style inheritance, which in some cases wouldn't pick up the
style inherited from.
Fixed a bug that made image prediction fail when a hide statement was
encountered.
Fixed a bug that prevented im.AlphaMask and ImageDissolve from working
with some images. Also improved the quality of im.AlphaMask, which was
incorrectly blending fractional alphas with black.
Fixed a bug where style inheritance did not work properly.
Fixed a bug where the launcher could choke when launching non-English
gamedirs.
Fixed a bug that prevented the style inspector from working on animated
screens.
New in Ren'Py 6.6.3
-------------------
Ren'Py will now error out quicker if you give it None when it's expecting
a displayable. This makes it more likely the correct line will be
reported when a problem occurs.
Added a new remote-control mode, that allows Ren'Py to be commanded to
perform a number of things, by sending the appropriate command to
stdin. This is useful for editor integration, as it allows for
warping to an appropriate line.
Music and sound-effects are now stopped when returning to the main
menu, save for channel 7. The music on channel 7 is only stopped if
it is not the same as the config.main_menu_music, otherwise, it is
allowed to continue playing.
Allow a thumbnail to be used with classic load-save.