Dynamic images have been added to Ren'Py. It's now possible to write code like:
image eileen happy = "eileen [outfit] happy"
This code creates a displayable that interpolates the value of the
output
variable at least once per interaction. The interpolated
string is then used to find another displayable to use.
Dynamic images can be used anywhere a displayable is expected, and the string can be an string that resolves to a displayable. One possible use might be to replace boring and repetitive condition switches in dress-up games with code like:
image eileen dressup = LiveComposite(
(300, 600),
(0, 0), "eileen_base.png",
(0, 0), "eileen_top_[top].png",
(0, 0), "eileen_bottom_[bottom].png",
(0, 0), "eileen_accessory_[accessory].png",
)
Dynamic image can be used in a screen language add statement:
for item in inventory:
add "store_[item].png"
When so used, the variables are looked up in both the screen and global scopes.
The define statement can now be used to define config and persistent variables. The code:
define config.screen_width = 1280
define config.screen_height = 720
Now works as expected. Persistent variables work in an idiosyncratic way, as the code:
define persistent.unlocked_endings = [ ]
Will only set the unlocked_endings variable if it has not already been set.
The android SELECT key - present on remote controls - is now supported for advancing text and selecting buttons, bars, etc. This means most TV-based android consoles should be supported.
Direct support for the OUYA console has been dropped. The console should still be supported as a general TV-based android console.
The new config.save_on_mobile_background
and config.quit_on_mobile_background
make it possible to adopt various strategies to deal with an Android or
iOS app losing focus.
Unknown gamepads can be calibrated from the shift+G menu.
The new config.replace_text
callback makes it possible to replace
text with other text. For example, one can replace multiple dashes with
en-dash or em-dash characters.
If a screen named skip_indicator
is present, it will be displayed
instead of the default skip indicator.
In the launcher, pressing F5 will launch the current project.
Skipping is now disabled when leaving a Replay.
Creator-defined statements can now return statements to be predicted.
The Finnish translation has been updated.
The new adjust_spacing
style property has been added. It
controls if the spacing of drawable-resolution text is adjusted to match
the spacing of viewable-resolution text. Setting this to False can prevent
kerning from changing after extend, but requires the GUI be designed
to adjust to the changing text size. To prevent obvious artifacts, this
is set to False for input text.
The following bugs have been fixed:
Support for HighDPI/Retina displays has been added to Ren'Py. This support is automatically used when running on iOS or Mac OS X systems that have a retina display.
On all platforms, Ren'Py now renders text at the display resolution, rather than the resolution the game was set to. The result is that text remains sharp even when upscaled significantly. Creators should be aware that due to variability in character size and kerning, this can cause changes in text layout and word wrap as the window is scaled.
To get the greatest benefit from these changes, the included copy of DejaVuSans has been updated to version 2.35, and the DejaVuSans-Bold font has been added. The bold font will automatically be used when a bold version of DejaVuSans.ttf is requested.
Ren'Py now uses the SDL2 controller API to support gamepads. This API provides a standardized mapping of controller buttons to something similar to an Xbox controller.
Ren'Py will now automatically back up .rpy files that are part of changed games. These backups will be placed in the same system-specific location that save files are placed.
A new achievement.sync()
function and achievement.Sync
action
have been added to Ren'Py. These synchronize achivements between local
storage and other backends, such as Steam.
A major bug in scanning archive files has been fixed. This bug often manifested as an archived images/ directory not being scanned some, but potentially not all, of the time. We strongly recommend upgrading from 6.99.5 if your game uses and archives the images/ directory.
If a file is not found in the game directory, Ren'Py will search the
images/ directory for that file. This behavior is controlled by
the config.search_path
variable.
Screens now take the style_group property, which was previously only allowed on displayable statements.
Screen language statements now take arguments and properties properties, which allows statement to be passed a list of additional positional arguments and a dict of additional properties, respectively.
The new Color
class allows conversion between color spaces and other
color-theory operations.
Ren'Py now supports a game/python-packages directory, which can be used with pure-python packages installed via pip. See the new 퍼스트 및 서드 파티 파이썬 모듈과 패키지 documentation for more details.
Renios now supports compiling for 32-bit simulators (for the iPhone 4 and 5).
The Korean and Russian translations have been improved.
A pause will now automatically end when auto-forward mode is enabled.
Much work has been done to reduce Ren'Py's startup time, especially on mobile platforms such as Android and iOS. This was largely accomplished by caching the results of transforms, analyses, and code compilation so less work is done when the game is unchanged. To take full advantage of this, perform a 'Full Recompile' of your project from the front screen of the Ren'Py launcher.
The desktop presplash code has been rewritten to use pygame_sdl2, and is now also faster.
A new config.minimum_presplash_time
has been added. This ensures that
the desktop presplash, android presplash, and iOS launchscreen are displayed
for at least a certain amount of time, making them more useful for branding
purposes.
As part of this work, script_version.rpy and script_version.rpyc will no longer be added to packages. Instead, script_version.txt will be added. (This ensures that the script does not change as part of packaging.) In addition, bytecode.rpyb has been moved to the game/cache directory, where addditional cache files now join it.
There have been a number of improvements to renios, some necessary to get Ren'Py games accepted on the Apple App Store. Nightly builds of 6.99.5 have been used to get multiple games accepted.
Renios has been upgraded to use SDL 2.0.4 rc1. This improves compatibility with iOS 8, and makes it possible to keep the launchscreen displayed until Ren'Py fully starts. As a result, support for the ios-presplash image is no longer necessary, and has been dropped.
A Simplified Chinese translation of the template game has been added, and the Korean and Arabic translations have been updated.
ATL has had an update event added. This event is called in rare (but possible) cases when a screen is re-created from scratch, such as after a load or when styles or translations are changed.
SetMute()
and ToggleMute()
actions have been added, along with
a new "all mute" Preferences()
that mutes all mixers.
Font hinting is now controllable using the hinting
style property.
The config.nearest_neighbor
variable configures Ren'Py to draw all
images using nearest-neighbor interpolation by default, helping ensure that
pixel art stays sharp when scaled up.
The new renpy.predicting()
function returns true if Ren'Py is running
a screen for prediction purposes.
The new renpy.return_statement()
function is a python equivalent to
the Ren'Py return statement.
The new _dismiss_pause
and _skipping
variables make it possible to
control pauses and skipping on a line-by-line basis.
Canvas objects (returned by the Render.canvas() method) now have a get_surface() method that returns a pygame_sdl2 Surface that is in a format that can be used by Ren'Py. This surface can be manipulated by Pygame drawing operations.
The new _get_voice_info()
function returns an object that contains information
about the voicing associated with the currently-running say statement.
The Ren'Py script language now includes a new default statement. This statement sets a variable to a value a default value at game start or load, if a default statement has not set the value of the variable in the current game. This makes it possible to initialize saved variables near the relevant code, rather than all at once at label start.
Lint will now warn if a define
or default
statement redefines a
Ren'Py or Python built-in name.
The screen language use statement now takes a block, which
can be transcluded into a screen using the transclude
statement. This makes
it possible to use statements to "wrap" a block of screen language code.
The screen language also supports creator-defined statements, which are transformed into use statements. These make it possible to extend the screen language syntax.
The new Render.place() is available for use in creator-defined displayables. This method renders a displayable, then applies Ren'Py's layout algorthing to place that displayable within a containing rectangle.
Ren'Py now logs errors importing the steam module to log.txt.
Ren'Py now logs the duration of various parts of the init process to log.txt.
On mobile, Ren'Py will wait until the start of the first interaction before creating the main window. This prevents a black screen from being displayed for some time as Ren'Py starts.
There are a number of improvements to iOS support, to support passing Apple's package verification process.
The launcher now includes a button to retrieve logcat information from an Android device.
The launcher now checks that the version of rapt and renios match the version of Ren'Py proper.
Fixed a performance problem caused by failing to release the Global Interpreter Lock while waiting for event input. This could cause problems running various background threads, like the image preloader and autosave.
Ensured that screens are only analyzed once as the game starts. Previously, screens could be analyzed multiple times as the styles and languages were set, leading to excessive startup times, especially on mobile platforms.
The volume curve has been changed to be more correct and perceptually accurate. The previous curve had serveral problems, most notably that is sharply jumped from 0 to 10%. This may require players to adjust their volume settings.
The gallery slideshow timer now repeats through multiple images.
Text blits are now expanded to include an outline on a descender on the bottom row of text.
Drags outside of a draggroup can now be snapped into place.
The Gallery now properly advances through locked and unlocked images. Previously, this advancing was reversed, so next_unlocked would advance through locked and unlocked images.
Text accounts for the size of outlines when allocating textures, preventing the bottom line of outlines from being cut off.
Position information (xpos, ypos, etc.) are now passed from an inner transform to an outer transform during as single frame. Previously, this information would lag by a single frame, which could lead to nested transforms lagging or failing to complete.
필요 없는 zipfile.txt 파일을 작성해 문제를 발생시키는 디버깅 코드를 제거.
Ren'Py now supports an images directory underneath the game directory. Images found inside this directory - or in subdirectories of this directory - will be automatically defined as images in Ren'Py. This will likely render the use of the image statement obsolete in simple games.
The new AlphaMask()
displayable allows one displayable to be masked by the alpha
channel of another.
The android and iOS emulators now emulate the onscreen keyboard.
The achievement API has been changed somewhat, but only with respect for progress functions. (Which were broken in the previous releases.)
Actions that care about the current screen (like SetScreenVariable) now work when used with the hovered and unhovered properties.
The updater has improved. If an incremental download fails, Ren'Py will try downloading the complete file before giving up.
When building for Android, Ren'Py will copy the apk files in to the dists directory used by the desktop platforms.
Added the RestartStatement()
action.
Added the renpy.reset_physical_size()
and ui.screen_id()
functions.
Allowed the screen language key statement to take the activate_sound style property. This makes it easier to play a sound when a key is pressed.
Documented ui.interact()
.
Updated the Simplified Chinese and Korean translations, and the Italian template.
renpy.load_image()
, renpy.load_surface()
,
renpy.get_showing_tags()
함수 추가.
Ren'Py is now based on Pygame_SDL2, a reimplementation of the Pygame API based on the SDL2 library. One of the largest changes in Ren'Py's history, switching to SDL2 lays the groundwork for many improvements, in this and future releases.
Ren'Py now supports the iOS platform. To develop for iOS, you will need a Macintosh computer, Xcode, and a paid membership in the iOS developer program. (An iPad or iPhone to test with is highly recommended.)
Ren'Py's iOS support includes the ability to create Xcode projects, and to update those projects with the latest version of a Ren'Py game. Xcode can be used to change project settings, and to create debug and release builds.
The iOS port supports iOS 7 and higher. Almost all of Ren'Py is supported, with the exception being that video playback is limited to fullscreen video in formats the iOS device supports.
For now, the default set of Ren'Py screens are not particularly compatible with iOS. You will need to customize your game to make it touch friendly and compliant with Apple's guidelines before submitting it to the iOS app store.
Please see the iOS documentation for more information and a copyright notice you must include as part of your app description on iOS.
Android support has been rewritten, and is now based in SDL2. This release brings Android support to parity with desktop platforms. Improvements include:
A number of issues with Android support have been fixed, including one that prevented Ren'Py from unzipping the android SDK automatically when the path to the Ren'Py install was too long.
Please see the Android documentation for more information and a copyright notice that should be included as part of your app description.
Ren'Py now ships with Python bindings for the steam API. These bindings are built as part of the Ren'Py build process, which means they will be maintained alongside Ren'Py going forwards.
For an explanation of how to use the Steam API, please contact the Ren'Py developers directly. The bindings make available:
The steam bindings will be integrated with Ren'Py as appropriate. For now, this integration consists of binding the steam achievement system to the new Ren'Py achievement API.
The launcher now has the ability to add from clauses to call statements, automatically turning:
call dayplanner
into:
call dayplanner from __call_dayplanner
From clauses, which are really labels, help Ren'Py to find the return site to use when a game is changed. This should help fix problem with games that may change greatly between releases.
When asked to package a game that is more than about 2GB in size, Ren'Py will produce a ZIP64-format archive. These archives may be less compatible that smaller zip files.
There is now a Russian translation of the tutorial game, and a Finnish translation of the launcher.
Ren'Py supports input methods (IMEs) on platforms where SDL2 makes that support available. (All platforms except for Linux.) Input methods make it possible to input complex non-ASCII text, such as Chinese, Japanese, and Korean.
Ren'Py now supports clipboard voicing, which is accessed by shift+C.
Clipboard voicing is a form of self-voicing that works by copying the text to the clipboard, where a screenreader program is likely to read it using settings preferred by the player.
Ren'Py snow supports a new form of custom text tags.
Custom text tags are applied after the text has been tokenized into tags and text. This makes it easier to write a custom text tag that manipulates text or applies multiple existing text tags to text.
The previously-existing form of custom text tag has been renamed to style text tag, and is still supported.
A high-level achievement API has been added to Ren'Py.
Ren'Py now includes support for recognizing touch gestures on Android and iOS.
It is possible to hide the editing buttons in the launcher, so they can't be used to open an absurd number of editor windows.
The developer can choose if strings should be empty when generating translations.
Three new set manipulation actions AddToSet()
, RemoveFromSet()
,
and ToggleSetMembership()
manipulate sets and lists-as-sets. (Such
as inventory lists.)
Drags (as in, drag-and-drop) now support the focus_mask style property.
The complexity of the style system has been reduced, decreasing memory usage and startup time.
The new renpy.suspend_rollback()
suspends the recording of rollback
checkpoints, while still allowing rollback to occur.
The RENPY_GL_CHECK_ERRORS controlls the logging of OpenGL/ANGLE function calls and errors.
A completion progress indicator can be toggled by typing shift-alt-P or swiping up-down-left-right-left-right.
As of this release, dictionary and set comprehensions are wrapped to support rollback.
This release adds the showif statement to screen language. The showif statement shows and hides its children based on a condition. When its children are ATL transforms, showif delivers ATL events to manage the show and hide process.
Ren'Py's image prediction mechanism now models the return stack, and can predict images through a call and return pair. Previously, a call followed by a return would block image prediction.
Ren'Py now predicts that the start label will be called from the main menu. This will help to avoid unpredicted image loads at the very start of a game.
The ATL on statement now can take a comma-separated list of event names.
The new updater.UpdateVersion()
function contacts an update server and
determines if an update is available.
The new renpy.invoke_in_thread()
function runs a function in a background
thread, and restarts the interaction when that thread finishes.
While in self-voicing mode, the {w} and {p} tags are ignored.
The Traditional Chinese and Russian translations have been updated.
Fixed a regression that could cause hiding transforms to skip time.
Fixed a bug that would cause the screen language if statement to show children from blocks with a false condition, if those child blocks were run during prediction.
Fixed an issue where SetScreenVariable and ToggleScreenVariable were declared as pure functions, but weren't. They now have been reimplemented as pure functions.
Fixed an issue where a grab could fail to transfer between interactions, leaving Ren'Py unresponsive.
The define statement can now take a store name, and the say statement
will search the character
store before searching the default store.
This means that if one uses:
define character.e = Character("Eileen")
Say statements like:
e "Hello, world."
will continue to work, even though e
has been freed up for other
purposes.
The default image cache size (set in config.image_cache_size
) has
been increased from 8 to 16 screens worth of images.
When set to True, the new crop_relative
transform property tells
a Transform to interpret float components of its crop
property
relative to the width or height of its transformed child, as appropriate.
For example, (0.5, 0.0, 0.5, 1.0) will cropout the lower-right quadrant
of the child.
When set to false, the new keyboard_focus
style property hides
buttons, bars, and imagemap hotspots from the keyboard focus mechanism.
The Mousearea screen language statement now respects the
focus_mask
style property, making it possible to have
non-rectangular mouseareas.
Ren'Py now includes functions that can be used to profile
the memory consumption of a game, including the memory consumption of
Ren'Py itself. These functions are renpy.profile_memory()
and
renpy.diff_memory()
. The new renpy.profile_rollback()
lets one more specifically see the memory consumption of the internal
rollback log.
When self-voicing mode is enabled, Ren'Py displays a notification that explains how to disable self-voicing mode.
This release fixes a subtle bug caused by incorrect analysis of for
loops in screen language screens, when the iteration variable is a
constant. (For example, when the iteration variable is define
ed
somewhere else in the game.)
This release adds Traditional Chinese translations of the launcher and template game, contributed by Civalin.
This release includes a new Placeholder()
displayable, which can be
used to display placeholder characters. Placeholders are now used when
displaying images that are not defined.
The new sv
Character-like object can be used when self-voicing is
enabled to display (and hence speak) descriptive text.
ATL transforms in screens now begin executing when first shown. Previously, ATL transforms began executing when the screen containing the ATL transform was first shown, which meant that if the transform changed over the course of screen display, a portion of the new transform would be skipped.
This release includes a German template contributed by NoJoker.
This release includes a new implementation of screen language that has the potential to be much faster than the original implementation of screen language. Where the original screen language evaluated screens from scratch at the start of each interaction, this new implementation can incrementally reuse large portions of a screen between interactions. Please see the new Screen Language Optimization documentation for information on how to maximize screen language performance.
Of special note is that screens now perform better when defined with a parameter list. Screens that do not expect parameters should be defined with an empty parameter list.
To support improved optimization, when the screen language use statement calls a screen with a parameter list, only variables in that parameter list are updated. (This is a change in previously-undocumented behavior.)
Screens now support passing properties to a displayable from within an if statement, provided the if statement is the first thing inside the displayable. For example:
text "Eileen":
if eileen_mad:
color "#fcc"
else:
color "#cfc"
now works.
As there is now a larger benefit from predicting screens, screen prediction has been improved in several ways:
show screen
and call screen
statements to predict the
screen. This is potentially dangers, as it means that if either statement
has side effects, those side effects will occur as part of screen prediction.
To mitigate this problem, both statements now take a nopredict
clause
that prevents screen prediction.renpy.start_predict_screen()
and
renpy.stop_predict_screen()
allows for manual prediction of time
images that will be used by screens, including parameterized screens.Ren'Py now supports profiling of screens, via the renpy.profile_screen()
function.
Ren'Py has been changed to make a copy of the screens being displayed before a transition occurs. This makes it possible to use a transition to show screen updates. For example, one could increase the value displayed by a bar, and then use the dissolve transition to dissolve in the new segment of bar.
Ren'Py now has a supported mechanism for manually predicting images in
cases where automatic image prediction fails. This mechanism consists
of two functions: renpy.start_predict()
starts prediction of images,
while renpy.stop_predict()
stops prediction.
Ren'Py now includes support for self-voicing, a mode in which Ren'Py will
read on-screen text to vision impaired players. To activate self-voicing,
press the v
key. For more information, please read the self-voicing
documentation.
The new alt
style property allows one to supply alternative
text that allows Ren'Py to voice imagemap components and buttons with
incomplete names.
The Ren'Py launcher now includes a large-text mode that can be accessed from the preferences page. This mode increases text size and contrast.
This version of Ren'Py includes a high-level interface that supports in-app purchasing on the Android platform. This interface currently support Google Play and the Amazon App Store.
Ren'Py supports nearest-neighbor filtering of images. This ensures that
screen pixels correspond to a single texture pixel, which is the scaling
mode preferred for use with pixel art. Nearest-neighbor mode is enabled
with the new nearest
transform property.
The new config.adjust_view_size()
callback makes it possible to
set the size of the Ren'Py viewport to something other than the size of
the window (or screen, in fullscreen mode). For example, a game can use
this callback to limit its viewport size to integer multiples of its
native size.
Voice volume is now adjustable on a per-character basis, using the
voice_tag argument to Character()
and the new VoiceVolume()
value.
Using the new config.emphasize_audio_channels
variable, Ren'Py
can emphasize audio on some channels. This is doen by lowering the
volume of non-emphasized channels when a emphasized channel is playing,
and returning the volumes to normal when no emphasized chanels are
playing. By setting this variable to [ 'voice' ]
, the voice
channel can be emphasized over music and other sounds,
To workaround a bug in Mac OS X 10.9, Ren'Py will now always open on the the primary monitor of a Macintosh.
With some limitations, non-ASCII characters can now be used as character names. Since Python code does not allow non-ASCII identifiers, such character names must be defined by the define statement, and used outside Python code.
The auto property of imagebuttons and imagemaps now can take image names as well as image filenames.
The new renpy.image_exists()
function returns true if an image has
been defined.
Gallery navigation can now be customized by customizing the gallery_nav
screen.
The new renpy.count_dialogue_blocks()
and renpy.count_seen_dialogue_blocks()
return the total number of dialogue blocks and the number of dialogue blocks that have
been seen by the current user in any game. With some caveats, these can provide an
indication of how much of the game the user has seen.
The config.autosave_on_choice
variable determines if Ren'Py will
autosave on choice, while the config.autosave_on_quit
variable
determines if Ren'Py will autosave when the game is about to end (by quit,
return, or loading a save slot).
The new events
transform property determines if events are
passed to a transform's children. This is useful for ATL transforms,
when some children should not receive events.
Save dumps (enabled by config.save_dump
) are performed before the
save occurs, making them far more useful for debugging pickling problems.
When show_ arguments are past to an NVLCharacter()
, the show_ prefix
is stripped and those arguments are passed to the nvl
screen.
This release add an Italian translation of the launcher and template game, contributed by Oshi-Shinobu.
This release adds a Portuguese translation of the template game, contributed by Mrstalker.
This release adds a Simplified Chinese translation of the launcher, contributed by Huanxuantian.
This release includes a number of Android changes:
This release includes a fix to an audio-video sync issue that affected the Windows, Mac OS X, and Linux platforms.
Marcel 덕분에 런처에 독일어 번역을 추가했습니다.
Baekansi 덕분에 런처와 게임 템플릿의 한국어 번역을 추가했습니다.
특정 Max OS X 컴퓨터에서 런처가 실행되지 않는 이슈에 대한 임시 방편을 추가했습니다.
The traceback system has been changed to generally report script statements, rather than the functions Ren'Py uses to implement those statements.
The renpy.pause()
function now only sets a checkpoint (allowing rollback)
if the delay time is 0. This prevents rollback from being blocked by short
pauses.
The new renpy.queue_event()
function provides a way to queue Ren'Py
events from user-written interface code. (For example, it could be used to
listen to commands on a serial port that's connected to a custom
controller.)
If set, RENPY_SKIP_MAIN_MENU and RENPY_SKIP_SPLASHSCREEN environment variables cause Ren'Py to skip the main menu and splashscreen, respectively.
The RENPY_TIMEWARP environment variable makes it possible to speedup and slow down time.
An experimental new autoreload system can be accessed by setting
config.autoreload
to True, then pressing shift+R to toggle
automatic reloading.
A regression in 6.17.4 caused a major memory leak on shift+R. This has been fixed. Several other problems with shift+R have also been fixed.
An issue preventing transitions from working properly inside a restarted ATL transform has been fixed.
The --warp was documented incorrectly, and had stopped working. It's been repaired, and its documentation has been improved.
This release contains a complete rewrite of shift+R reloading.
The rewrite was necessary to eliminate several major memory leaks that were triggered by reloading.
Ren'Py has been updated to use the newest (at the time of release) versions of the Android SDK and Ant. This should fix build problems caused by the use of older versions.
Ren'Py now recognizes and supports the Amazon Fire TV device. When a Fire TV is detected, the "firetv" screen variant is selected. To support pushing games to this device, Ren'Py now supports connecting to Android devices via the Remote ADB protocol.
Fixed a problem that occurred when an interaction containing a MoveTransition was restarted.
Added support for imagemaps that are larger than the screen. This allows an imagemap to be placed inside a viewport.
It is now possible to select the layer used by the say, choice, and nvl
choice screen. Please see config.say_layer
, config.choice_layer
,
and config.nvl_layer
statements.
The prediction of window and bar images has been improved.
The style system, which makes it possible to configure the look of displayables, has been rewritten from scratch. The new code reduces the amount of time it takes to create a new style to a small fraction of the previous time. Since every displayable creates an associated style, this has the potential to lead to a substantial performance improvement.
This release also introduced a new style statement that can be used to define styles, in place of python code. (Of course, the older form remains fully supported.) Lengthy and redundant code like:
init python:
style.quick_button_text.set_parent('default')
style.quick_button_text.size = 12
style.quick_button_text.idle_color = "#8888"
style.quick_button_text.hover_color = "#ccc"
can be replaced with:
style quick_button_text is default:
size 12
idle_color "#8888"
hover_color "#ccc"
Finally, the style inspector (accessed through shift+I) has been rewritten.
In addition to the new style statement, there are four other syntax changes:
The definition of a simple expression has been expanded. Simple expressions (which are used in ATL and the screen language, among other places) now encompass all Python expressions that do not include lambda or the ternary (... if ... else ...) operator.
This means that code like:
show logo:
xpos 800 / 2
is now legal. Previously, the expression had to be parenthesized.
The new show layer
statement allows one to apply a transform
or ATL transform to an entire layer, using syntax like:
show layer master at flip
or:
show layer master:
xalign 0.5 yalign 0.5 rotate 180
The new window auto
statement makes it possible for Ren'Py to
automatically show and hide the dialogue window. By default, it is
shown before say
statements, and hidden before scene
statements,
but this can be customized.
The init statement has been extended so it can be combined with other statements. It's now possible to write "init 1 image = ...", "init -2 define name = ..." and so on.
프랑스와 러시아 게임 템플릿 및 런처 번역을 추가했습니다.
It is no longer necessary to download RAPT (the Ren'Py Android Packaging Tool) separately from Ren'Py. As of this release, RAPT will be downloaded by the Ren'Py launcher when an Android build is requested, and will be updated by the Ren'Py updater.
Buttons may now have an alternate action that is triggered by longpress on Android and right-click on desktop computers.
This release fixes a bug in which Ren'Py would not save persistent data (including preferences) before being terminated by the Android system, and a regression that broke compatibility with some Android 2.3 systems.
There are two new preferences accessible through the Preferences()
function:
Neither of these is exposed as part of the default preferences screen, but both can be added by interested developers.
There is one changed preference:
ShowMenu()
can now pass arguments to the screen it displays.
The input displayable now takes a pixel_width property, that limits the size of the input field it a certain number of pixels.
The FileCurrentScreenshot()
function
The new xsize
, ysize
, and xysize
style
properties make it possible to directly set the size of a displayable.
The focus_mask
style property can now take as an argument a callable
that returns true when a displayable should be focused. If such a callable
can be written, it may be much faster than the current method of determining
pixel opacity.
Viewport now respects the xfill and yfill properties. The default viewport style sets these to true. Setting them to False will cause the viewport to shrink to fit its contents when those contents do not fill the entire viewport.
The new renpy.get_image_bounds()
function retrieves the bounding box
of an image that is being displayed, after all Transforms have been applied
to it.
The new renpy.retain_after_load()
can be used to retain data updated
by a screen after the game is loaded.
The new xsize
, ysize
, and xysize
style
properties make it possible to directly set the size of resizable
displayables.
Prediction of images with partial attributes and side images used in dialogue has been improved. Prediction of creator-defined statements now works as documented.
런처와 template 게임의 스페인 번역을 추가했습니다.
마우스 지원 기기에서 마우스 위치를 검색하는
renpy.get_mouse_pos()
함수를 추가했습니다.
안드로이드 서포트가 렌파이 런처에 통합됐습니다. 용량 문제로 RAPT는 여전히 별도로 다운로드하지만 렌파이 경로에 RAPT가 설치되어 있으면 런처에서
런처에서 안드로이드 폰, 태블릿 TV 기반 콘솔 환경을 모방해 프로젝트를 시험 구동해볼 수 있습니다.
OUYA 같은 TV 기반 안드로이드 콘솔을 지원합니다. 특히 OUYA 를 감지해, 적절한 스크린 종류를 선택합니다.
안드로이드 빌드에서 동영상 재생을 지원합니다. 전체 화면 동영상과 (안타깝게도 렌파이가 지원하는 코덱과 그다지 겹치지 않는) 안드로이드 플랫폼이 지원하는 코덱만 지원하지만 컷신 동영상을 재생하는 정도라면 충분할 것입니다.
새로운 스크린 종류 세트를 추가했습니다. "large", "medium", "small" 은 기기의 화면 크기를 반영하며 (예외로 TV는 멀리서 보기 때문에 small 로 간주됩니다.), "touch", "tv", "pc"는 기기의 입력 방식을 반영합니다.
안드로이드에서 텍스트 세로 쓰기가 표시됩니다.
저수준 로드/세이브 api 를 점검했습니다. 앞으로는 원하는
세이브 슬롯을 착기 위해 모든 세이브 슬롯을 검색할 필요 없이
세이브 슬롯 정보에 직접 접근할 수 있습니다. renpy.list_slots()
,
renpy.newest_slot()
, renpy.slot_mtime()
,
renpy.slot_json()
, renpy.slot_screenshot()
함수를 추가했습니다.
고수준의 기능에서는 최신 세이브 슬롯일 경우 참값으로 설정되는 FileNewest()
함수를 추가했습니다. FilePageNext()
와
FilePagePrevious()
함수가 인수 래핑을 지원해,
다수의 스크린이 존재할 때 마지막이나 첫 스크린에서 다음 또는 이전 버튼을 누르더라도 첫 스크린과 마지막 스크린으로 이동할 수 있습니다.
세이브 파일에 임의의 JSON 정보를 추가할 수 있습니다. 이것으로 세이브 항목마다 정보(예를 들면 현재 플레이하고 있는 비주얼 노블의 루트 정보, 시뮬레이션 게임의 날짜와 보유 현금 양, RPG 에서의 파티 구성 정보)를 save 및 load 스크린에서 접근할 수 있습니다.
JSON 정보는 config.save_json_callbacks
로 생성하며,
저수준 renpy.slot_json()
또는
고수준 FileJson()
함수로 접근할 수 있습니다.
렌파이는 앞으로 가능하다면 세이브 파일을 게임 자체와 사용자 공용 세이브 경로에 저장합니다. 즉 렌파이 게임이 USB 드라이버나 네트워크에 공유되어 있다면, 여러 컴퓨터에서 세이브 파일을 사용할 수 있다는 뜻입니다. (게임 자체에 저장된 세이브와 사용자 공용 세이브 경로에 있는 세이브 두 가지 모두 유효하다면 최신 세이브 파일을 사용합니다.)
네트워크 공유에 있는 세이브 파일이 갱신된다면 렌파이는 자동으로 해당 파일의 내용물을 재검색한 다음, 현재 인터렉션을 재시작합니다. (이로 인해 해당 세이브 파일을 사용할 수 있도록 save와 load 스크린이 업데이트됩니다.)
앞으로 메인 메뉴에서는 자동 저장을 하지 않습니다.
지속 데이터 역시 게임 경로와 사용자 공용 세이브 경로에 저장됩니다. 두 경로에
저장된 지속 데이터가 동일하지 않다면 지속 데이터들을 합칩니다. 기본적으로
각 필드에서 가장 최근에 갱신된 값을 사용합니다. 특별한 경우에는 (예를 들면
플레이어가 발견한 엔딩 세트) 이런 방식으로 작동하지 않아야 할 것입니다.
새로 추가한 renpy.register_persistent()
변수로 지속 데이터를 합치는
방식을 등록할 수 있습니다.
voice 명령문을 일일이 입력하지 않고도 음성을 재생할 수 있는 시스템을 추가했습니다. 이 시스템은 새로 추가한 두 가지 기능으로 구성되어 있습니다.
config.auto_voice
변수는 행을 가리키는 고유 식별자로
형식화된 파일이름 패턴을 지정할 때 사용됩니다. 다른 음성 파일을 재생하고 있는 상태가 아니며,
이름이 이 변수에 지정한 패턴과 일치하는 파일이 존재한다면 그 파일을
음성으로 재생합니다.음성과 관련된 환경설정도 추가되었습니다. "voice sustain" 환경설정은 다수의 인터랙션이 발생했을 때 음성 재생 유지 여부를 결정합니다. "wait for voice" 환경설정은 자동 진행 모드에서 대사를 넘기기 전에 음성이 재생 중이라면 재생 종료 대기 여부를 결정합니다.
CG 갤러리에서 "이전", "다음", "슬라이드 쇼", "돌아가기" 버튼을 나타내는 내비게이션을 띄울 수 있습니다. 이제 하나의 버튼을 클릭했을 때 이미지를 표시할 것인지 여러 가지 버튼으로 이미지들을 차례로 표시할 것인지를 결정할 수 있습니다.
음악 감상실에 무작위 재생 기능이 추가되었으며, 여러 음악을 무작위 재생, 반복 재생하는 기능과 선택한 음악만 재생하는 기능이 추가되었습니다.
렌파이가 앞으로는 문자 할당 영역을 벗어나는 폰트 문자의 일부분도 그리게 됩니다. (특히 힌팅 및 안티 앨리어싱 기능이 적용된) 텍스트가 잘려나가는 현상을 방지하지만 매우 부정확한 할당 영역 때문에 폰트 배치와 관련된 문제가 발생할 수 있습니다.
렌파이 런처가 일본어로 번역됐습니다. 런처에서 사용하는 언어는 환경설정 화면에서 교체할 수 있습니다.
일본어 게임 템플릿이 추가됐습니다. 기본으로 일본어 폰트를 지원하며 인터페이스가 일본어로 번역되어있습니다.
문서 대부분이 일본어로 번역되었습니다. 일본어 번역문은 다음 주소에서 확인할 수 있습니다.
기본 퀵 메뉴에 빠른 스킵과 롤백 기능을 포함시켰습니다. (template 폴더에 있는 screens.rpy 에 추가했기 때문에 이 파일을 게임 프로젝트에 붙어넣어야 할 필요가 있음)
기본 yes_no 스크린이 사용자가 우클릭했을 때 반응하지 않습니다. (template 폴더에 있는 screens.rpy 에 추가했기 때문에 이 파일을 게임 프로젝트에 붙어넣어야 할 필요가 있음)
이미 본 텍스트가 있는 지점에 도달하면 빠른 스킵이 중단됩니다.
렌파이가 배포판을 만들 때 배포판을 만들어낼 위치를 선택할 때
build.destination
변수를 사용합니다.
버튼에 마우스를 올리거나 내렸을 때 버튼이 반응하기는 하지만 클릭했을 때 아무 액션도 하지 않는 버튼을 만들 때 사용할 수 있는 NullAction을 추가했습니다.
ConditionSwitch 속도가 더 빨라졌습니다.
타임스탬프가 비정상인 파일에 현재 시간을 입력해 파일을 다룰 수 있도록 수정했습니다.
여러가지 버그를 수정했습니다. 중요한 버그 수정은 다음과 같습니다. :
안드로이드 플랫폼에서의 작동 성능을 향상시켰습니다. * 에셋은 APK와 확장 파일과 별개로 읽힙니다. * 로그와 트레이스백 파일은 외부 저장소에 자리합니다. * 저장 파일은 이전 렌파이 버전에서 저장한 세이프 파일이 없다면 외부 저장소에 자리합니다.
렌파이에서 사용하는 GL2 셰이더가 클리핑이 발생하지 않는 일반적인 상황에서는 간소화됩니다. 이로 인해 안드로이드 및 다른 플랫폼에서도 눈에 띄게 속도가 빨라집니다.
드래그 앤 드롭에서 발생했던 버그를 수정했습니다.
Skip()
액션이 스킵 상태 표시자를 띄우게 됩니다. 또한 다음 선택지까지 스킵할 지 결정하는 fast 매개변수를 지원합니다.
이번 버전에서는 예전 렌파이 게임들과의 호환성을 향상시키는 사소한 작업들이 이루어졌습니다. (이제는 렌파이 버전 5의 데모를 실행할 수 있습니다)
이번 버전에서는 두 가지 기능이 추가됐습니다. :
additive
트랜스폼 속성을 ATL 트랜스폼이나 Transform()
클래스에서 사용할 수 있게 됐습니다. 가산 혼합은 소프트웨어 렌더러를 사용할 때에는 작동하지 않으므로 이에 관한 문제를 해결하는 것은 제작자의 몫입니다.Flatten()
디스플레이어블은 여러 텍스처를 하나의 텍스처로 혼합합니다. 이 디스플레이어블은 (예를 들어 LiveComposite()
이 0과 1사이의 alpha
값이 적용되어 나타날 때처럼) 여러 텍스처가 포개진 텍스처를 포함하는 디스플레이어블이 원치 않는 방식으로 작동하는 것을 방지할 때 사용할 수 있습니다.다음 버그도 수정하였습니다.:
6.14.x 버전과 6.15.0-3 버전 렌파이가 64비트 리눅스 시스템 대부분에서 실행되지 못하도록 했던 컴파일링 문제를 수정했습니다.
이미지 예측이 더 부드러워졌으며 화면이 움직이는 도중에도 실행될 수 있습니다.
build.exclude_empty_directories
변수로 빈 폴더가 배포판에 추가되거나 제외될지 결정할 수 있습니다. 이전에는 플랫폼마다 기본값이 차이가 있었지만 이 변수의 기본값은 참값입니다.
렌파이에 체계적인 번역 틀 이 추가되었습니다. 번역 틀은 하나의 언어를 선택하여 대사, 선택지, 인터페이스 텍스트, 이미지, 파일, 스타일을 변경할 수 있는 기능을 지원합니다.
대사 번역 기능으로 번역가의 재량에 따라 문장을 나누거나 합칠 수도 있습니다. 번역 블록 안에 대부분의 렌파이 명령문을 작성할 수 있으므로 게임에 사용된 언어를 여러분의 언어로 옮기기에 적합하도록 조건문 같은 논리식을 이용할 수 있습니다.
런처에 새로 추가된 "번역 파일 만들기" 버튼을 눌러 다른 언어로 번역하기 위해 필요한 빈 번역 파일을 만들어낼 수 있습니다. 이 파일에는 공식 번역을 할 때 필요한 모든 스크립트가 적혀 있습니다.
렌파이 6.15 에서는 일본어 지원을 향상시키고자 여러 가지를 변경하였습니다.
튜토리얼 게임의 환경설정 메뉴에서 언어를 일본어로 선택하면 일본어로 번역됩니다.
튜토리얼은 Koichi Akabe가 번역하였습니다.
렌파이에서 세로 쓰기 기능을 사용할 수 있습니다.
텍스트의 vertical
스타일 속성과 hbox의 box_reverse
속성으로
대사문장이, 선택지, 기타 텍스트를 세로 방향으로 나타낼 수 있습니다.
세로 쓰기 스크립트는 Koichi Akabe가 작성하였습니다.
유니코드 6.2에 맞게 줄바꿈 알고리즘을 업데이트했습니다. 또한 스타일 "language"에 세 가지를 추가하였습니다. "japanese-strict", "japanese-normal", "japanese-loose" 는 (CSS3 텍스트 모듈에 있는 줄바꿈 옵션을 기초로 하여) 요음이나 촉음, 기타 여러 특수 문자들이 적힌 문장을 더 효과적으로 줄바꿈합니다.
renpy.language_tailor()
함수는 글자의 줄바꿈 클래스를 바꿀 수 있는 함수로, 이를 사용하면 줄바꿈 기능을 더 입맛에 맞게 바꿀 수 있습니다.
새로운 디버그 콘솔로 렌파이 스크립트와 파이썬 명령문을 대화형으로 실행할 수 있으며
바로 결과를 확인할 수도 있습니다. 콘솔은 개발자 모드를 실행중이거나
config.console
를 True 로 설정했을 때 쉬프트 + O 를 눌러
접근할 수 있습니다.
콘솔은 다음과 같은 상황에서 사용할 수 있습니다:
콘솔 기능은 Shiz, C, delta가 작성하였습니다.
스크린은 이제 레이블이나 트랜스폼처럼 이름을 지정한 매개변수를 받을 수 있습니다.
screen top_text(s, size=36):
text s xalign 0.5 size size
show screen top_text("잘 되네!")
렌파이에서 이제부터 장면 다시보기 시스템을 사용할 수 있습니다. 장면 다시보기는 렌파이의 어떤 부분에서든 실행할 수 있습니다. (예를 들면 메인 메뉴, 게임 메뉴 스크린은 물론이며 게임을 시작하자마자 실행할 수도 있습니다.) 다시보기가 끝나면 렌파이는 다시보기를 실행했던 지점이 스크린 내부이든 파이썬 코드 내부이든 상관 없이 그 지점으로 되돌아갑니다. 다시보기 중에도 롤백을 사용할 수 있으나 저장과 불러오기는 할 수 없습니다.
Replay()
액션으로 다시보기 기능을 시작합니다. renpy.end_replay()
로
실행중인 다시보기를 종료하며 다시보기가 실행되지 않은 경우에는 무시합니다.
음성 재생 시스템의 기능을 일부 개량했습니다.
새로 추가된 변수 config.voice_filename_format
로 voice 문에 사용한
음성 파일의 일부분만 사용할 수 있습니다.
Character()
에 추가된 voice_tag 매개변수는
SetVoiceMute()
와 ToggleVoiceMute()
액션을 함께 이용하여
특정 캐릭터의 음성을 음소거할 수 있습니다.
VoiceReplay()
액션으로 현재 재생중인 음성을 다시 재생할 수 있습니다.
이번 버전에서는 런처를 일부 개량했습니다.
매킨토시용 Ren'Py 를 구동하려면 64비트 프로세서와 Mac OS X 10.6 이상의 환경이 필요합니다.
렌파이 게임의 파일 배치가 조금 바뀌었습니다. 런처 프로그램을 제외한 모든 플랫폼 기반 바이너리는 lib/ 디렉토리 하위에 있습니다. 렌파이 자체는 renpy/ 디렉토리에 배치했습니다. common/ 디렉토리는 렌파이에 없어서는 안 될 폴더로 간주하여 renpy/common 으로 이동했습니다.
렌파이는 이제 이름만 새로 고친 파이썬 바이너리를 사용합니다(이전에는 플랫폼 종속 바이너리를 사용했습니다) 라이브러리의 일부는 데스크톱 배포판에서 서로 공유합니다.
렌파이 프로세스를 리눅스에서 실행하면 파이썬이 아닌 게임의 이름을 본따 이름이 지어집니다.
config.key_repeat
에서 관리할 수 있습니다.config.enter_yesno_transition
과 config.exit_yesno_transition
변수로
yes/no 프롬프트가 나타나거나 사라질 때 프롬프트에 적용할 트랜지션을 정의할 수 있습니다.transform_anchor
트랜스폼 속성을 새로 추가하여
트랜스폼이 크기를 변경하거나 회전할 때 어느 지점을 기준으로
삼을지 기준점을 지정할 수 있게 되었습니다. (예를 들면 단순히 그림의 가운데가 아니라
그림의 오른쪽 아래 모서리를 기준으로 그림을 회전시킬 수 있습니다.)box_reverse
와 order_reverse
스타일 속성이 새로 추가되어
vbox와 hbox의 하위 위젯을 배치하거나 그릴 때 그 순서를 정할 수 있습니다.child
스타일 속성을 스크린 언어에 노출됩니다.config.enter_yesno_transition
와
config.exit_yesno_transition
변수가 새로 추가되어 yes/no 프롬프트에 접근할 때
사용되는 트랜지션을 지정할 수 있습니다.다음 버그가 수정되었습니다.:
renpy.loadable()
안드로이드 패키지 안에 있는 파일을
검색하지 못하는 현상.renpy.loadable()
를 안드로이드용 게임에서도 사용할 수 있습니다.renpy.call()
로 호출할 수 있도록 수정.렌파이 런처를 고쳐 썼습니다. 다음과 같이 기능이 향상되었습니다.
Dischan 비주얼 노벨 팀의 Doomfest가 런처 디자인을 새롭게 바꿔주었습니다.
런처에서 직접 스크립트가 저장된 디렉토리와 게임 디렉토리, 스크립트 파일을 열 수 있습니다.
스크립트 네비게이션 기능을 지원합니다. label, define, transform, screen 등의 이름을 클릭하면 해당 이름이 정의된 부분을 스크립트 에디터로 열 수 있습니다.
또한 개별 스크립트 파일을 직접 열 수도 있습니다.
클릭 한 번만으로 프로젝트 배포판을 만들 수 있습니다. 단계를 여럿 거쳐 만드는 대신 클릭 한 번만으로
렌파이 업데이터를 이용하여 렌파이를 업데이트하거나 스크립트 에디터를 다운로드합니다.
렌파이 스크립트 에디터로 Editra를 사용하시기 바랍니다. 렌파이 런처와 호응할 수 있으며 렌파이 스크립트를 수정할 수 있도록 에디트라 플러그인을 개발해두었습니다.
에디트라는 아직 베타버전이긴 하지만 빠르고 가벼우며 코딩하기 편리한 에디터입니다. 스펠링 체크 기능도 있어 대사 및 기타 문자열에 적용해 이용할 수 있습니다.
에디트라를 스크립트 에디터로 사용하기로 선택했는데 설치되어있지 않다면 렌파이에서 자동으로 에디트라를 다운로드합니다.
제이에딧jEdit도 여전히 지원하므로 중국어나 일본어 한국어처럼 에디트라가 완벽히 지원하지 않는 언어를 이용할 때는 제이에딧을 사용하는 편이 낫습니다. 제이에딧을 사용하기로 선택한다면 렌파이에서 제이에딧을 자동으로 다운로드합니다.
또한 렌파이에서는 운영체제에서 파일에 연결한 에디터를 이용할 수도 있습니다. (하지만 문자열 대기 커서를 게임에서 실행하고 있는 스크립트 행으로 정확히 이동시키진 못합니다. )
렌파이에는 렌파이 엔진이나 개별 렌파이 게임을 업데이트하는 데 사용하는 업데이터가 있어, 제대로 설정된 웹서버에 업데이트 파일을 올려놓으면 해당 파일을 다운로드합니다.
렌파이 업데이터는 zsync를 사용하여 하드에 저장된 파일과 웹서버에 저장된 파일 간에 차이나는 부분을 찾아 다운로드합니다. 서버에 올려진 파일 묶음 하나로 이전 버전에서 바뀐 파일 전부를 업데이트할 수 있습니다.
업데이터 인터페이스는 기본으로 만들어져있으며 이를 수정할 의지가 있는 사용자라면 차후에 수정할 수도 있습니다.
이번 업데이트에서는 트랜스폼 작동방식을 변경하여 좀 더 제대로 작동하거나 사용하기 쉽도록 트랜스폼을 변경하였습니다.
xzoom 및 yzoom 속성이 디스플레이어블에 회전 속성보다 먼저 적용됩니다. 따라서 이미지 모양이 이미지가 회전되어도 그대로 유지됩니다. 이전에는 이미지가 회전하면 모양이 바뀌었습니다.
xzoom 및 yzoom 속성에 음수값을 넣어 이미지를 반대로 뒤집을 수 있습니다. 위치를 정하는 코드에서도 이를 계산하여 뒤집힌 이미지를 올바른 위치에 배치합니다.
MoveTransition()
코드를 다시 썼습니다. 새 버전에서는 트랜스폼을 써서 나타낼 이미지와 사라지는 이미지의 위치를 제어하며, 움직이는 이미지의 위치값에 값을 보간 할 수도 있습니다.renpy.fix_rollback()
기능이 추가되어 롤백 모드에서 내린 선택을 포함하여 게임에서 사용자가 내린 선택을 고정할 수 있습니다.
이 기능을 사용해도 롤백과 롤포워드를 할 수 있지만 사용자가 게임을 하면서 최초로 내린 선택을 바꿀 수는 없습니다.call screen
문을 건너뛰는 방식으로 작동합니다.렌파이의 동영상 재생 지원 기능을 일부 수정하여 안정성 및 속도, 프레임재생률 안정성을 향상시켰습니다. 이로 인해 렌파이의 프레임 드롭률이 줄어들며 프레임이 심하게 떨어졌을 경우 렌파이가 멈추는 현상을 막을 수 있습니다.
이번 버전부터 렌파이에서 WebM 비디오 형식을 지원합니다.
config.developer
값이 참이면 내부에서 이미지를 불러온 내역을 기록합니다.
이렇게 남긴 기록은 _image_load_log 스크린을 표시하면 볼 수 있습니다. _image_load_log 스크린에서는 어떤 그림가 보여지고 나면 해당 이미지 파일의 이름을 몇 초 동안 표시합니다. 이미지 예측기로 불려온 이미지라면 파일 이름이 흰색으로 나타나며, 이미지를 예측할 수 없었다면 분홍색으로 나타납니다.
스크린 함수를 두 개 추가하였으며, 스크린 액션 두 개를 수정하였습니다. :
FileUsedSlots()
함수는 현재 세이브 페이지에서
사용 중인 파일 슬롯 목록을 반환합니다.FileCurrentPage()
함수는 현재 세이브 페이지의 이름을 반환합니다.FileSave()
및 FileAction()
액션이 슬롯이름이 None 인 경우에
현재 시간을 기준으로 비어있는 슬롯을 사용하도록 수정하였습니다.이 함수들을 이용하면 사용자가 새 슬롯을 추가할 수 있는 세이브 슬롯 목록을 만들 수 있습니다.
파이썬 코드가 작동할 수 있는 곳에서 다중 저장 기능을 이용할 수 있습니다. 기본 저장공간에 저장된 변수와 마찬가지로 다중 저장 공간 내부에 있는 변수도 저장하거나 불러오거나 롤백할 수 있습니다.
파이썬 블록에 in 절을 적으면 저장공간에 접근할 수 있습니다.:
init python in stats:
def reset():
"""
스탯 변수를 리셋하는 코드.
"""
기본 저장 영역은 그 자체가 패키지이며, 사용자가 만든 저장 영역은 "store" 패키지에 배치됩니다. 이름은 패키지에서 불러올 수 있습니다.
init python:
from store.stats import reset
init python in stats:
from store import ToggleField
저장공간은 init python 블록이 실행되는 곳에는 영향을 미치지 않습니다. 이름은 우선 블록에 정의하고 난 뒤에 불러와야합니다.
리눅스 지원 부분이 바뀌었습니다.
렌파이에서 이용하는 라이브러리를 다수 업데이트하였습니다. 이와 관련하여 변경점이 발생하는 라이브러리 업데이트 내역은 다음과 같습니다.
renpy.call()
함수로 파이썬 코드 내부에서 렌파이 레이블을 호출할 수 있습니다.
파이썬 코드에서 레이블을 호출하면 현재 명령문을 즉시 끝냅니다.
액션을 입력해야 하는 곳에 액션이 적힌 다중 리스트를 적을 수 있습니다. 이 경우 리스트를 해체한 후 액션을 실행합니다.
URL을 웹브라우저에서 여는 OpenURL()
액션을 추가하였습니다.
오픈GL 모드에서 게임창 크기 변경 여부를 설정할 수 있는 config.gl_resize
변수를 추가하였습니다.
렌파이가 커맨드라인 인수를 처리하는 스크립트를 다시 썼습니다. lint를 다음과 같은 커맨드로 실행할 수 있습니다.
renpy.sh <gamename> lint
(renpy.exe 로도 같은 방식으로 작동합니다.)
config.gl_resize
변수로 오픈GL 모드에서 작동하는 게임창 크기를 바꿀 수 있는지 결정합니다.렌파이 안드로이드 패키징 툴로 안드로이드용 렌파이 배포판을 훨씬 쉽게 만들 수 있습니다. 안드로이드 배포판을 만드는데 필요한 환경을 설정하고, 배포판을 만들고, 안드로이드 기기에 배포판을 설치하는 일을 반자동화했습니다.
에디터 관련 문제를 수정하려 6.14 에서 업데이트 할 예정이었던 에디터 기능을 미리 업데이트하였습니다. 스크립트 에디터를 설정하는 과정이 달라지므로 관련 설명은 스크립트 에디터 설정 페이지를 참조하세요.
config.save_dump
변수를 추가했습니다. 이 변수를 참으로 설정하면 세이브 할 때마다 세이브 파일 내용을 기록하는 save_dump.txt 를 만듭니다. save_dump.txt 파일을 확인하면 세이브 파일 크기가 지나치게 큰 이유가 무엇인지 알 수 있습니다.
메사에 있는 버그때문에 일부 리눅스 시스템에서 충돌하는 문제를 해결했습니다.
아래 버그를 수정했습니다.
사이드 이미지 기능을 제어할 수 있습니다. config.side_image_tag
와
config.side_image_only_not_showing
변수를 이용해 사이드 이미지로 캐릭터 이미지 하나만 표시하거나 게임 화면에 없는 캐릭터 이미지만 표시하도록 설정할 수 있습니다.
파이썬 블록이 끝날때마다 호출되는 함수 리스트인 config.python_callbacks
변수를 추가했습니다.
렌파이 게임이 실행되면 컴퓨터의 비디오 카드를 테스트합니다. 기본 렌더러가 게임 화면에 텍스처가 매핑된 사각형을 그리지 못하면 다른 렌데러를 사용합니다.
변수 삽입 방법으로 이전 방법(%(variable)s)과 새 방법([variable])을 모두 사용할 수 있게 수정했습니다.
libpng 1.5 를 사용할 수 있게 되었습니다.
버그를 수정하였습니다:
텍스트 디스플레이 를 재작성하였습니다. 코드를 깔끔하게 다듬고, 새 기능을 추가하였으며 텍스트 표시 및 정렬 속도를 향상시켰습니다.
텍스트 디스플레이 시스템이 지원하는 새로운 기능은 다음과 같습니다:
이제부터는 대괄호 안에 변수를 적으면 텍스트에 변수값을 나타낼 수 있습니다:
"[max_score]점 만점에 [score] 점."
이 형식은 say 문이나 menu 문 뿐만 아니라 모든 텍스트 디스플레이어블에서 사용 가능합니다. 스크린에서 사용하면 스크린 범위 내에 있는 변수를 이용합니다.
필드나 아이템도 변수처럼 텍스트로 나타낼 수 있는 PEP 3101-스타일의 문자열 포매팅이 지원됩니다.
루비 문자(후리가나) 지원을 추가하였습니다. rt
,
rb
텍스트 태그나 ruby_style
스타일 속성으로 루비 문자를 사용할 수 있습니다.
cps
텍스트 태그로 텍스트 표시 속도를 제어할 수 있습니다.
렌파이에서는 유니코드 문장 분리 알고리즘을 이용해 문장 분리 지점을 검색하였습니다. 이 알고리즘은 영미권 언어와 아시아권 언어를 같이 사용한 경우에도 제대로 작동했으나 일부 한국어 텍스트에서 제대로 작동하지 않습니다. 따라서 korean-with-spaces 알고리즘을 구현하여 한국어 문장은 공백에서 끊어지도록 만들었습니다. 이 알고리즘은 language
스타일 속성에 사용할 수 있습니다.
Knuth-Plass 문장 분리 알고리즘으로 실제로 문장을 분리하는 지점을 선택합니다. 이 알고리즘으로 인해 문장을 여러줄로 분리될 때는 각 줄이 같은 양만큼 나뉘어집니다. nobreak 모드도 있어서 화면 길이보다 긴 문장을 작성할 수도 있습니다. layout
스타일 속성을 이용하면 어떤 알고리즘을 사용할 지 결정할 수 있습니다.
newline_indent
스타일 속성으로 문단이 시작되는 문장 앞에 들어갈 들여쓰기 양을 정할 수 있습니다.
line_leading
스타일 속성으로 문장 간격을 정할 수 있습니다(이 공간에 루비 문자가 나타납니다).
텍스트가 나타나기 전에 자동으로 번역됩니다(이 기능은 이후 의 대형 업데이트 때 더 개선될 예정입니다)
사용자의 PC에 OpenGL 2.0 이후 버전이 없다면 2010년 2월자 이후 버전의 다이렉트X 가 설치된 윈도우에서 ANGLE 어댑테이션 레이어를 이용해 다이렉트X를 사용하게 됩니다. ANGLE 레이어는 파이어폭스나 구글 크롬같은 웹브라우저에서 사용되는 어댑테이션 레이어입니다. ANGLE 레이어로 인해 OpenGL보다 빠르고 성능이 좋은 DirectX를 지원하는 드라이버에서는 내장 그래픽을 이용해 하드웨어 렌더링을 사용할 수 있게 되었습니다.
렌파이는 처음 시작될 때 컴퓨터의 그래픽 성능을 테스트합니다. 소프트웨어 렌더가 사용중이거나 게임 렌더링이 못 참을 정도로 느린 상태라면, 렌파이는 사용자에게 경고 메시지를 표시합니다. 경고 메시지에 나온 링크를 클릭하면 그래픽 드라이버 업데이트 방법이 적힌 렌파이 공식 페이지로 이동합니다.
이 버전 이후부터 렌파이는 다이렉트X나 OpenGL를 사용할 수 없는 경우에만 소프트에어 렌더러를 사용하게 됩니다. 소프트웨어 렌더러의 화면 크기 조절 기능은 간단하지만 좀 더 느린 버전으로 교체되었습니다.
스타일 옵션 시스템을 추가하여 초기화 단계가 끝난 다음에도 스타일을 바꿀 수 있게 되었습니다. 스타일 정보를 바꾸면 영구 데이터에 저장되어 플레이어가 게임에 사용되는 대사의 색상이나 크기, 폰트 등을 바꾸도록 만들 수 있습니다.
스크린 언어 기반의 CG 갤러리 와 음악 감상실 가 추가되었습니다. 이 두 기능은 플레이어에게 그림과 음악을 특전으로 제공할 때 쓰면 좋을 클래스로 이루어져있습니다. CG 갤러리와 음악 감상실을 만드려면 해당 스크린에서 쓸 수 있는 전용 액션을 사용하면 됩니다.
새 게임 프로젝트를 만들 때 사용되는 기본 screens.rpy 파일에 단축 메뉴 스크린이 추가되었습니다. 이로 인해 게임 화면에 퀵세이브, 퀵로드, 세이브, 대사 넘기기, 자동 진행 모드, 환경설정 메뉴가 추가로 나타납니다.
5개의 새로운 테마와 테마에 적용되는 색상 세트 여럿이 추가되었습니다.
새 액션이 추가되었습니다. 버튼이 눌려진 상태를 제어하는 SelectedIf()
, 특정값으로 믹서를 설정할 수 있는 SetMixer()
, 롤백 버튼을 만들 수 있는 Rollback()
과 RollForward()
액션이 추가되었습니다.
버전 6.12 에서 실수로 바뀌었던 xfill 과 yfill 스타일 속성의 작동방식을 6.12의 이전 버전과 같은 방식으로 작동하도록 수정하였습니다.
Dissolve()
와 ImageDissolve()
트랜지션이 time_warp 매개변수를 받도록 수정하였습니다.
Frame()
디스플레이어블에 상하좌우 경계값을 각각 따로 지정할 수 있도록 수정하였습니다.
input 위젯에 있는 글 입력 커서를 수정할 수 있도록 caret
스타일을 추가하였습니다.
사용자가 renpy.displayable()
함수를 직접 사용할 수 있도록 수정하였습니다.
Timer 위젯에 액션 리스트를 사용할 수 있도록 수정하였습니다.
문서를 추가하였습니다. 매뉴얼 디자인을 업데이트하였고, 일부 항목에 대한 인덱스를 추가하였습니다.
libjpeg-turbo 라이브러리를 사용하여 jped 파일 로딩 속도를 향상시켰으며, ffmpeg 0.8.2 버전을 사용하여 다양한 비디오 형식에 대한 호환성을 향상시켰습니다.
iLiad 플랫폼 지원을 중단하였습니다.
렌파이 배포판에서 PowerPC 지원을 중단하였습니다. 렌파이 공식 페이지에서는 다운로드할 수 있습니다.
이미지를 표시할 때 이미지 속성에 기초하여 이미지를 표시합니다. 이미지 이름은 이제부터 태그 하나와, 0 혹은 그 이상의 이미지 속성으로 이루어집니다. 이미지를 표시할 때 이미지 속성이 어떤 순서로 적혀있는지는 중요하지 않습니다. 이로 인해 한 세트의 이미지 속성을 사용하여 이미지를 정의할 수 있으며 이미지 속성 순서를 맘대로 쓰더라도 적당한 이미지를 표시할 수 있습니다.
이미지 속성은 또한 "고정성"을 띄게 됩니다. 새로운 이미지를 표시할 때 가능한 많은 속성을 보존한다는 뜻입니다.
image eileen beach happy = "eileen_beach_happy.png"
image eileen beach woozy = "eileen_beach_woozy.png"
위와 같은 이미지가 있다고 가정했을 때:
show eileen happy beach
첫 번째 이미지는 이렇게 적어도 표시할 수 있습니다. 속성이 어떤 순서로 적혀있는지는 이미지를 검색할 때 중요한 사항이 아니기 때문입니다.:
show eileen woozy
위처럼 명령문을 적으면 "eileen beach woozy" 이미지가 나타납니다(이는 그 외에 다른 이미지가 없을 때에만 정상으로 작동합니다. "eileen happy woozy" 라는 이미지가 존재한다면 위와같이 적었을 때 "eileen happy woozy"를 표시해야 할지 "eileen beach woozy"를 표시해야할지 알 수 없으므로 에러가 발생합니다).
다른 속성을 적지 않고 오직 이미지 태그만 적으면 현재 표시중인 이미지 중에서 같은 태그를 가지고 있는 이미지를 찾아 그 이미지의 속성을 태그에 보충해 사용하게 됩니다.:
show eileen at right
위와 같이 적으면 현재 표시중인 eileen 의 이미지를 화면 오른쪽에 표시하게 됩니다. 이미지에 지정된 속성은 바뀌지 않습니다.
say 속성. 이미지 속성을 say 문에서도 사용할 수 있게 되었습니다. 캐릭터 객체는 이제 image 인수를 받아 해당 캐릭터에 연결할 이미지 태그를 연결할 수 있습니다. 이미지 속성을 say 문에 사용하려면 대사 문자열 앞에 이미지 속성을 적으면 됩니다. 그러면 해당 속성이 캐릭터에 연결된 이미지에 전달됩니다.
예를 들어 캐릭터를 다음과 같이 정의하고 eileen 이라는 태그가 붙은 이미지가 표시중이라면
define e = Character('Eileen', image="eileen")
아래의 코드는:
e woozy "I think I'm getting too much sun."
다음 스크립트와 똑같이 작동합니다:
show eileen woozy
e "I think I'm getting too much sun."
사이드 이미지. 사이드 이미지 기능이 추가되었습니다. 이 기능을 이용하면 대사창 옆에 나타낼 이미지를 보통 이미지처럼 정의할 수 있으며 화면에 사이드 이미지를 간단하게 추가할 수 있습니다.
트랜스폼 고정. ATL 블록이나 트랜스폼이 적용되지 않은 이미지를 나타낼 때 이전에 사용했던 트랜스폼이 자동으로 적용됩니다. 이 때 적용되는 트랜스폼은 새로 표시할 이미지와 같은 이미지 태그를 지닌 이미지에 적용되었던 트랜스폼입니다.
에러 메세지 출력을 담당하는 프레임워크가 추가되었습니다. 에러가 발생하면 이전처럼 렌파이를 종료시키지 않고 렌파이 화면 내에서 에러 메세지를 출력하고 상황에 따라 렌파이의 동작 선택할 수 있게 되었습니다. 선택할 수 있는 동작은 다음과 같습니다:
스크립트 에디터를 설정했다면 파일 이름이나 행 번호를 클릭하여 해당 부분을 에디터에서 확인할 수 있습니다.
에러 메세지 프레임워크는 예외와 구문 오류를 표시할 때만 작동합니다.
OpenGL모드에서 실행되면 렌파이의 현재 창 크기를 기억합니다.
config.save_physical_size
를 수정하면 해당 작동을 비활성화 할 수 있습니다.
환경 설정 메뉴에서 "창 모드" 버튼을 누르면 창이 원래 크기로 돌아옵니다.
xcenter
, ycenter
위치 속성과 트랜스폼 속성을 추가하였습니다. 이 속성을 이용하면 디스플레이어블의 중심 위치를 지정할 수 있습니다.
renpy.vibrate()
함수를 추가하여 안드로이드 기기에서 작동하는 렌파이의 진동 여부를 결정할 수 있도록 했습니다.
하이퍼링크 스타일, 콜백, 포커스 함수가 hyperlink_functions
스타일 속성으로 이전되었습니다. 이제 스타일에 따라 함수 작동 방식을 바꿀 수 있습니다.
들여쓰기 오류가 들여쓰기가 잘못된 행을 보고하도록 수정되었습니다.
SetScreenVariable()
과 ToggleScreenVariable()
액션을 추가하였습니다.
스크린 지역 변수를 바꿀 수 있습니다.
에러 메세지 등을 출력시 파일 이름에서 개인정보를 제거하도록 수정되었습니다. 이제 파일 이름을 보고할 때 루트 디렉터리가 아니라 렌파이 디렉터리나 베이스 디렉터리로부터 경로를 추출하여 보고합니다.
box_wrap
스타일 속성을 추가하여 hbox나 vbox 가 열이나 행의 마지막 부분까지 확장될지, 그 이상까지 확장될지 결정할 수 있게 수정하였습니다.
액션 클래스에 Action.unhovered()
메소드를 추가하였습니다. 이 메소드는 hovered 의 매개변수로 공급된 액션이 포커스를 잃었을 때 호출됩니다.
스크린에 툴팁을 간편하게 정의할 수 있도록 Tooltip
클래스를 추가하였습니다.
config.debug_text_overflow
추가하여 텍스트의 글자수가 그에 할당된 영역을 초과하면 초과한 텍스트를 text_overflow.txt 에 기록할지 여부를 결정할 수 있게 하였습니다.
렌파이에서 시스템 볼륨 믹서를 조정할 수 없도록 수정하였습니다. 이제 렌파이로 컴퓨터 자체의 음량 출력을 늘릴 수 없습니다. 이로써 시스템 볼륨을 제어해 윈도우, 맥, 리눅스에서 다른 어플리케이션의 음량에 비정상적인 영향을 미치는 등의 버그가 발생하던 현상을 방지하였습니다.
새로 추가된 기능과 트랜지션 관련 문서가 매뉴얼에 추가되었습니다.
아카이브가 아스키 역순대로 검색됩니다. 자세한 사항은 config.archives
페이지를 참조하세요.
버그 수정 목록:
렌파이는 이제 안드로이드 플랫폼을 지원합니다. 이미지디졸브나 영상 재생 기능을 지원하도록 할 수는 없었지만, 그 외의 기능들은 대부분 지원합니다. 이 업데이트로 인해 렌파이 게임 배포판을 작성해서 안드로이드 마켓을 통해 배포할 수 있게 되었습니다.
스프라이트매니저 디스플레이어블을 추가하였습니다. 이는 화면에 다량의 스프라이트를 그리는 데 고급 동작 방식을 제공할 것입니다. 이 기능은 각각 비슷한 형태를 가지고 있는 다량의 파티클의 크기를 변경할 수 있습니다.
Mousearea 위젯을 추가하였습니다. mousearea는 화면의 특정 영역에 마우스가 진입하거나 떠날 때 hovered 와 unhovered 콜백이 발생하도록 해줍니다. 초점 시스템에는 관여하지 않기 때문에, mousearea 는 버튼이나 바를 추가할 수 있습니다
드래그 & 드롭 위젯과 디스플레이어블을 추가하였습니다. 드래그 & 드롭 시스템은 다음과 같은 기능을 지원합니다:
렌파이는 이제 이미지 사용을 더 잘 예측합니다. 일반적인 게임플레이에 사용되는 이미지를 예측하는 것과 동시에, 사용자가 클릭 한 번으로 볼 수 있는 스크린에서 사용되는 이미지를 예측하기도 합니다. 예를 들어 일반적인 게임플레이 중에, 렌파이는 게임 메뉴의 첫 번째 스크린에서 사용되는 이미지를 예측합니다. 게임 메뉴에 있을 때에는 게임 메뉴의 또 다른 메뉴들을 예측하며, 사용자가 메인 메뉴로 돌아갈 때 보게 될 이미지도 예측합니다. 이 예측은 자동으로 이루어지나 오직 스크린을 사용할 때만 발생합니다.
predict 속성이 False가 아니라면, 렌파이가 이미지 예측을 할 수 있도록 하기 위해 스크린은 어느 때나 호출할 수 있습니다. 이는 스크린을 표시할 때엔 어떤 부수적인 작용도 없어야 한다는 뜻입니다(대부분의 스크린에서는 버튼이 클릭되거나, 바가 변경될 때만 그에 따른 부수적인 작용이 발생합니니다 - 물론 이건 정상적인 것입니다).
렌파이는 이제 스크린 언어의 이미지맵에 사용될 핫스팟 캐싱을 지원합니다. config.developer
가 참일 때, 렌파이는 이미지맵에서 사용하는 각 핫스팟의 이미지 데이터를 포함하는 PNG 파일을 game/cache/ 디렉토리에 작성할 것입니다. 만일 (config.developer 의 설정과 상관 없이) 캐시 파일이 존재한다면 핫스팟 이미지를 로드하는 대신에 그 캐시 파일이 로드될 것입니다. 캐시 파일은 대개 핫스팟 이미지보다 파일 크기가 작기 때문에 이미지 캐시의 압박을 줄이고, 로드 또한 빨라져서 게임 동작을 향상시킬 것입니다. 이 기능은 오직 스크린 언어의 이미지맵에만 적용되며, config.imagemap_cache
를 통해 비활성화될 것입니다.
이로 인해 renpy.cache_pin()
은 사용할 필요가 거의 없어질 것입니다. 에러는 아니지만, 캐시 핀을 사용하면 부적합한 이미지를 불러올 때 불필요하게 메모리가 사용될 것입니다.
렌파이에는 이제 기본 스크린 세트가 실려있습니다. 이는 데모나 새 게임이 생성될 때 기본적으로 설치될 것입니다. template/game/screens.py 디렉토리에서 이를 발견할 수 있으며, 여러분의 프로젝트에 해당 파일을 복사하면 사용할 수 있습니다. 스크린은 레이아웃 시스템과 100% 호환되지는 않습니다 - 예를 들면, 사용되는 스타일이 서로 다릅니다. 그렇기 때문에 게임에서는 어떤 시스템을 사용할 것인지를 결정해야 합니다.
Choice 와 NVL 스크린에서 사용하는 items 매개변수의 정의가 변경되었으니, 새 버전에서 작업하려면 게임을 수정해야 할 것입니다.
show_
로 시작하는 캐릭터의 인수가 Say 스크린에 전달됩니다. show_side_image 나 show_two_window 를 say 스크린을 사용하면서도 사용할 수 있게 되었습니다. 렌파이에 포함된 스크린이 이를 지원합니다.
새로운 config.imagemap_auto_function
변수로 이미지맵이나 이미지버튼의 auto
속성 해석 방법을 제어할 것입니다.
위에서 언급했던 이미지맵 캐싱은 오로지 스크린에만 적용됩니다.
FilePageName()
과 FileSlotName()
함수를 추가해 파일 저장 슬롯에서 사용되는 명칭을 간편하게 지정할 수 있게 되었습니다.
config.screenshot_callback
이 호출됩니다. 이 함수는 기본적으로 스크린샷 저장 위치를 사용자에게 알리도록 구현되었습니다.Solid()
와 Frame()
디스플레이어블은 가벼워졌으며, 이제 이미지 캐시에서 훨씬 적은 공간을 차지합니다.Render.canvas()
from working with
the OpenGL renderer.Aleema가 관대히 제공해준 새로운 4개의 테마가 포함되어 배포되었습니다. 런처에서 "Choose Theme" 버튼을 클릭해서 새로운 테마들을 살펴보고 변경할 수 있습니다.
렌파이와 함께 배포되는 jEdit 텍스트 에디터가 4.3.2 버전으로 업데이트 되었습니다. 이 버전은 대부분의 플러그인을 구동시킬 수 있습니다.
렌파이 창의 최대 기본 크기는 화면 해상도의 높이보다 102픽셀 작은 크기입니다. 이로서 렌파이 창이 모니터 해상도보다 훨씬 크기 때문에 창의 크기를 재조정할 수 없었던 현상을 방지할 것입니다.
버튼은 이제 오직 그들이 포커스를 얻었을 때만 키 이벤트를 그들의 하위 위젯들에 전달할 것입니다. 이로써 스크린 언어의 key 명령문은 버튼의 하위 위젯으로 사용될 수 있으며, 버튼이 활성화되었을 때만 작동하도록 할 것입니다.
MoveTransition이 순서대로 이미지를 변경하는 데 있어 올바르게 그것들을 다루도록 재작성되었습니다. 순서가 정의되지 않은 이전의 버전에서는 작동이 다르게 될 수도 있습니다.
Fixed 647686 , a regression that prevented sounds from looping properly.
Fixed 661983 , which caused insensitive hotspots to default to the idle, rather than ground, image when no insensitive image was supplied.
Fixed 647324 , where ImageDissolves are rendered as if specified with alpha=True whether or not alpha=True was set.
Fixed a problem that caused the game to start when picking "No" after clicking the (window-level) quit button.
Fixed a problem that prevented AnimatedValue from functioning properly when delay was not 1.0. Thanks to Scout for the fix.
Fixed a problem that caused movies to display incorrectly when the screen was scaled using OpenGL scaling.
AlphaBlend()
디스플레이어블과 AlphaDissolve()
트랜지션을 추가했습니다. 이들은 두 개의 디스플레이어블을 취하여, 세 번째 디스플레이어블의 알파 채널을 사용하여 그것들을 함께 블렌드합니다(세 번째 디스플레이어블은 보통 애니메이션으로, 시간이 지남에 따라 효과가 변경될 수 있도록 합니다).
새로운 모드 시스템은 인터렉션이 교체될 때 콜백을 작동시킬 수 있도록 해줍니다. 이 기능은 예를 들면 트랜지션 이전에 윈도우를 자동적으로 숨기거나 할 때 사용될 수 있습니다.
스크린 언어를 사용하여 생성된 이미지맵은 이제부터 ground 이미지와 같은 사이즈를 가지게 됩니다(이전에는 화면 전체를 차지했음). 이로써 이미지맵을 화면의 여러 위치에 좀 더 쉽게 위치시킬 수 있게 되었습니다.
이미지맵은 이제 alpha 인수를 취합니다. true라면 핫스팟은 오직 idle 이나 hover 이미지에서 불투명한 영역에 마우스가 올려져있는 경우에만 포커스를 취하게 됩니다. false로 설정하면 핫스팟으로 설정한 영역 내에 마우스가 있는 겨우 포커스를 얻게 됩니다.
renpy.focus_coordinates()
함수를 추가하였습니다. 이 함수는 현재 포커스를 얻은 디스플레이어블의 좌표값을 반환합니다.
새로운 renpy.notify()
함수와 Notify()
액션을 이용하면 화면에 일순간 보이는 메세지를 간단히 띄울 수 있습니다. 퀵세이브나 스크린샷 등이 완료되었다는 것을 사용자에게 알리기 위해 사용할 수 있습니다.
HideInterface()
액션은 스크린 언어 액션으로, 인터페이스를 일순간 숨기도록 합니다.
개발자 메뉴에는 game 디렉토리 안에 있는 모든 파일의 이름을 뽑아내는 커맨드가 추가되었습니다.
파이썬 표준 라이브러리인 urllib과 urllib2 모듈이 이제 렌파이의 일부가 되었습니다. 이 모듈들은 웹서버의 데이터를 검색하는 데 이용할 수 있습니다.
렌파이 런처에 시험적인 업데이터가 포함되어, 가장 최근에 선배포된 버전을 업데이트하기 용이해졌습니다. 런처 메인 메뉴에서 쉬프트 + U를 누르면 렌파이가 업데이트를 진행할 것입니다.
MoveTransition()
now respects the xoffset and yoffset
parameters.
Fixed several bugs with screen-language imagemaps.
Fixed a bug (#626303) that was caused by an incorrect texture unit check. Thanks to tmrwiz for the fix.
Transforms no longer cause a divide by zero exception when the zoom, xzoom, or yzoom properties are 0.
Clockwise and counterclockwise revolution in transforms now works.
Fixed a bug with scaling, that occured when switching between the scaled software and GL renderers.
Hidden screens are no longer considered when assigning default focus.
FieldValues with max_is_zero set to True now work properly. Thanks to SleepKirby for the fix.
렌파이는 이제 컴퓨터의 OpenGL 하드웨어 가속이 지원될 경우 이를 활용할 것입니다. 이 OpenGL 지원으로 인해 몇 가지 눈에 보이는 변화가 발생합니다:
소프트웨어 렌더링은 여전히 지원하며, 렌파이는 부적절하게 구성된 비디오 카드를 감지할 경우 자동적으로 소프트웨어 렌더링 사용을 중지할 것입니다.
OpenGL 모드의 렌파이인지 아닌지는 윈도우의 크기를 변경해보면 테스트할 수 있습니다. 크기를 변경할 수 있으면 OpenGL이고, 그렇지 않으면 소프트웨어 렌더링이 사용되는 것입니다.
이번 업데이트에서는 새 스크린 시스템이 등장합니다. 이로 인해 유저 인터페이스의 특정한 위치를 선언적으로 지정할 때 새로운 스크린 언어를 사용할 수 있습니다. 스크린 언어는 레이아웃, 오버레이 함수, 이미지맵, 그리고 대부분의 게임 외 메뉴와 게임 내 메뉴 스크린의 커스터마이징을 다른 방법으로 대체합니다.
게임 메뉴의 작동을 변경하는 이전의 방식 (레이아웃 시스템)은 특히 이미지맵 레이아웃을 사용할 때 문제가 있었습니다. 스크린은 단일 목적이었으므로, 파이썬 코드 없이 (예를 들면) 퀵 세이브된 게임을 메인 메뉴로부터 불러오는 데에 어려움이 있었습니다.
스크린 시스템은 함수 리소스를 Actions 와 BarValues의 형태로 제공하여 문제를 해결합니다. 이것은 함수를 고르거나 선택하는 것을 가능하게 해주며, 스크린에 필요하다고 간주되는 것을 추가할 수 있도록 합니다.
만약 트랜스폼이 xpos
, ypos
, xanchor
, yanchor
중 하나를 정의하지 않으면 그 속성은 트랜스폼의 하위 위젯에서 취하게 됩니다.
이로 인해 하나의 트랜스폼이 디스플레이어블의의 수직 모션을 다른 하나는 수평을 컨트롤할 수 있게 되었습니다. 그러나 이것은 이전 버전의 작동과는 호환되지 않으므로, config.transform_uses_child_position
변수로 비활성화할 수 있습니다.
새로운 config.default_transform
변수는 특정한 트랜스폼이 지정되지 않은 이미지들의 초기 트랜스폼 속성들을 지정하도록 합니다. 이것의 기본값은 center입니다.
이것은 작동방식의 변화를 가져왔습니다. 이미지가 나타나고 나서 트랜스폼이 나타나면 트랜스폼은 화면의 하단 중앙으로 초기화됩니다(왼쪽 상단이 아니라). 트랜스폼 리셋은 위치를 왼쪽 상단으로 리셋할 때 사용할 수 있습니다.
렌파이 문서를 재작성하고 있는 중입니다. 이 업데이트 기록(changelog)은 이제 렌파이 문서의 일부로 포함되었습니다.
복합 스타일 속성에 대한 지원이 추가되었습니다. 몇가지 스타일 속성이 하나의 매개변수를 사용하는 것으로 설정될 수 있습니다. 새로운 복합 스타일 속성은 아래와 같습니다.:
ui.add는 이제 트랜스폼속성을 키워드 인수로 받아들입니다. 적어도 하나의 트랜스폼 속성이 존재한다면, ui.add 는 화면에 추가하려는 디스플레이어블을 감싸는 트랜스폼을 생성할 것입니다.
LiveTile()
디스플레이어블은 대량의 메모리를 사용하지 않고도 하위 디스플레이어블을 타일화합니다.
config.quit_action
은 윈도우 구석에 있는 종료 버튼을 눌렀을 때 실행될 행동을 지정합니다. config.game_menu_action 은 게임 메뉴에 진입했을 때 실행될 행동을 지정합니다.
config.screenshot_crop
설정 변수는 유저가 스크린샷 키를 눌렀을 경우 저장될 화면의 범위나 지역을 컨트롤합니다.
renpy.music.register_channel()
메소드는 file_prefix 와 file_suffix라는 두 개의 추가적인 매개 변수를 갖게 됩니다. 이것들은 접두되며 파일 이름들 앞에 추가됩니다. 등록된 채널에 각각에게 제공됩니다.
renpy.list_files()
메소드는 game 디렉토리와 archives 디렉토리에 있는 파일의 리스트를 리턴합니다. 자동적으로 이미지를 로딩하는 메소드 등을 만들 때 사용 가능합니다.
Character 와 Text 간의 인터렉션이 텍스트가 한번만 토큰화되는 것을 확실히 하기 위해 재작성되었습니다. 이로 인해 약간의 ADVCharacter와 NVLCharacter에 쓰인 메쏘드들이 변경될 필요가 있으니, 이 클래스들로부터 상속하는 코드들을 체크해보세요.
배포판 작성 코드가 launcher/distribute.py로 이동되었습니다. 이 파일은 쉘 스크립트 혹은 다른 자동 처리 과정 내의 커맨드 라인에서 배포판을 만들기 위해 실행할 수 있습니다
투명한 영역이 화면에 있고, config.developer
값이 참인 경우 투명한 영역은 체스판 패턴으로 채워질 것입니다
새로운 input
, side
, grid
, fixed
스타일이 생성되었으며, 그에 상응하는 디스플레이어블이 이 스타일을 기본적으로 사용합니다.
스타일이 init 블록을 불러오는 동안 접근되었으나 존재하지 않는 경우, 그것을 처음으로 나타나는 언더바를 통해 두 부분으로 나눕니다. 만일 뒷 부분이 이미 존재하는 스타일과 같다면, 에러를 발생시키는 대신 새 스타일을 생성합니다.
파이썬 컴파일러가 파이썬 ast 모듈을 사용하도록 재작성하였습니다. 성능이 개선되었고, 파이썬 구문에 대한 오류 처리를 향상시켰습니다.
이 변경점으로 인해, 렌파이는 현재 파이썬 2.6을 사용합니다.
아래의 버그들이 수정되었습니다:
기타 버그들도 수정되었습니다: