This is required because on Linux, Steam sets LD_LIBRARY_PATH to
something that contains the SDL libraries. Since these aren't the
libraries we ship, functionality (ie. WEBP support) could be missing.
The new GUI uses clipping on almost every screen. This slows things down, and
can cause problems on buggy drivers. With this change, we only use clipping
when necessary, and hence makes such problems less obvious.
(We can't fix the drivers, but we can work around them a little.)
This is important for StylePreferences, where we want object
identity to remain the same so we can update the object even
after restoring a style backup.
This fixes a problem where renpy.music.play(..., if_changed=True)
would requeue the current track, which would cause it to start
playing from the beginning, rather than the loop point.
Now, if the music hasn't changed we just update the loop, which
causes it to start playing from the loop point.
Fixes#1055.
This is a mode where the viewport only eats the mousewheel
if it would cause it to change. Doing so make it possible
for other code to handle the same event - for example, code
like:
screen history():
# ...
key "viewport_wheeldown" action Return()
viewport:
mousewheel "change"
# ...
Will dismiss the viewport if scrolling down doesn't cause the
viewport to change.
This is a variable that is used to set style._default.font, in both
normal and error conditions. This helps when None is translated into
a language that can't be represented by DejaVuSans.
The latter proved hard to maintain, as it could changed as children
transitively changed. It's just easier to recurse everything when
it's time to make the copy.
This has the effect of "locking" DynamicImage before a transition,
so that the transition changes it from the old value of the variables
to the new value.
Fixes#1067.
Previously, doing something like:
default a.b.c = 42
would not create a variable named b in the store.a namespace. (It would
create 'a.b' in the store namespace, which is wrong.) This fixes that.
There's no point in duplicating a layer, and doing so will duplicate
everything on it - causing transforms to not work properly, perhaps
among other problems.
Fixes#1034.
This involves extracting translations from the old launcher transations
and the template games, deleting the old translation, generating a new
translation, merging in the strings. Then font and style files were
copied from old->new, and the translation was cleaned up to remove
TODOs.
In general, script.rpy wants to be totally customized for each
language. So if it exists, we'll copy launcher/game/tl/<language>/script.rpym
over script.rpy, allowing translators to customize it in any way they
fancy.
This is a function that copies strings from the current launcher
translation into the None translation of the project. (Thus
translating the Ren'Py strings used by the interface.)
This tries to ensure that a string is translated as part of the
"right" file - for example, it's translated as part of the
screens.rpy translation, rather than _layouts/something_screen.
The goal is to provide a logical order to the translaton process.
The semantics are too different for a single implementation, like
6.99.11 had. In first_fit, the first child is used to choose the
size that is offered to the rest of the children. xfit and yfit
render all at full size, then fit to them.
Fixes#1050.
This has too high a potential to break existing games - it broke
pefile.py, for example. So we require code to ask for unicode_literals
before we use it.
Fixes#1047.
This is a function that lets a translation register that a define
should be set for that language, making it possible to change
fonts and such on a per-translation basis.
In the normal skip mode, if skip isn't possible, exit out of skip
mode. We'll exit out of skip mode anyway when the player clicks to
dismiss, so we combine it into a single step (and update the interface
to better reflect what's going on).
Fixes#1031.
This was broken by the add_from integration.
While in 00console.rpy, removed the credit line, as it's the only
place in Ren'Py that gave specific credit to the contributors.
On Android (and probably slow PCs), a stream might not be ready in
time for the first callback. If we delay the callback for too long,
we'll cause skipping. So instead we read silence until the stream
is ready.
This fixes a problem where, since current.json was not included,
the DLC was not being updated properly, meaning that updates
would also be required.
Fixing this (while still preserving fast building) required changing
the format of upgrades a little. The pretty version number is no
longer included in update files (it wasn't used), and the versions
themselves are hashes of the file content. This allows us to include
current.json in update files without having to constantly regenerate
those files.
This fixes a bug where _history would be set by the defaults system,
but because it's a context-dynamic variable, it could get unset as
the context system unwound things.
Needed to get in a Hamilton reference somewhere, since I've been
listening to it Non-Stop while making this version. And that seems
to be another reference.
(And I'll mention Silver here, too - the car we took on our road
trip to Dallas and Hot Springs. A 2016 Dodge Challenger rental,
VIN 2C3CDZAG1GH254389, we had her from miles 2302-4557, 2255 miles
total. We listened to Hamilton for probably over 150 of those
miles...)
Video was too taxing for some of our systems and we wanted to be able
to fallback to the already defined backup images for movie sprites
without deleting the original file paths.
This behavior - which can lead to logging a spurious line in history -
is almost certainly not desired. So we introduced a new method on
Character that is called instead, to simply display the window
without any of the logging.
This might produce bad results, but it's better than producing a
crash - especially a crash in error handling completely unrelated
to the underlying error.
The idea is that all of the simple and intermediate customization
can be done in gui.rpy, and only when the player needs to make
major changes do they need to touch screens.rpy.
As update 11.1626 launched translation was updated with 3 new files
this is the 2nd pull request out of 3 pull request.
next pull request will be gui.rpy
As update 11.1626 launched translation was updated with 3 new files
this is the 1st pull request out of 3 pull request.
next pull request will be options.rpy
and gui.rpy
Add new translation : for # renpy/common/00layout.rpy:459
# TODO: Translation updated at 2016-07-22 12:50
translate indonesian strings:
# renpy/common/00layout.rpy:459
old "Are you sure you want to skip unseen dialogue to the next choice?"
new "Apakah kamu yakin ingin meloncati dialog yang belum terlihat sampai ke pilihan berikutnya?"
Fix some leftover translation
Fix some miss translation
Revert the {#Bulan} to {#month},etc
Fix line 813 change 'here' to 'disini'
Change line 817 from 'Sebuah Permainan Ren'Py' to 'Permainan Ren'Py'
This only uses an xmaximum/ymaximum that was given to the button,
rather than using a width or height that could be zero.
This fixes a bug that was preventing buttons below the viewport end
on the launcher projects list from appearing.
This makes the result more visually pleasing, as the image
lines up properly with vertical lines in DejaVuSans glyphs.
(For example, the left side of D in display.) This is offset to the
right of the text bounding box by ~3 pixels, probably so slanted
lines can go a little to the left of it.
The new approach is to use a pair of functions to try to generate
the sizes and properties of buttons, to improve functionality
and reduce the amount of code needed.
Trying to make a GUI proved very difficult. It was hard to
pick the right size for buttons, since font changes could
break things. There were also way too many button images.
This change lets us get away with far fewer button images (as little
as 4, although some will be duplicated).
It also makes it easier to reposition certain things.
Specifically, a list of image files or filenames. This makes it
possible to have Ren'Py (and especially the new GUI) select from
a list of alternative choices.
In screen code like:
for i in range(100):
text "[i]"
I becomes a local constant. In the case where the entire screen
is constant, i could be missing (or have the wrong value) when
_scope is called to update text with the changed global
variables.
This fixes that problem, by storing the local constants and
adding them back to the scope before calling _scope().
* The default input values now take a returnable field, that controls
if a value is returned when enter is pressed.
* ScreenVariableInputValue has been fixed.
The idea behind this change is that it's pretty common to
indicate idleness by a text color change, and it's better
to just reuse the idle_ prefixed-image if no insensitive
one exists, rather than erroring out.
After a long time of having parameterize mutate and take on
additional meaning, it makes sense to rename the method
to describe what it does - duplicate displayables that
do not take user input. It also supplies arguments to
those displayables as necessary.
Fixes#936.
This is used to get the ultimate target of one or more
ImageReferences, especially if that target is a displayable.
This used to be a lot more complicated, but since going forwards,
all ImageReferences will be parameterized, it makes sense to
use a simpler name and semantics for the method.
This returns the refresh rate of the underlying monitor, which
allows games (especially those that use nearest-neighbor) to
create movements that are synchronized with the speed of the
underlying monitor.
We went from a small number of constants to a larger number of
config-like variables, so it makes sense to have them follow
the casing convention of config variables.
Insets were defined as part of the gui. Borders are defined as
part of Ren'Py proper. gui.Frame went away, as we can now use
plain-old Frame with a Borders object as the second parameter.
This previously required using the weird python early syntax.
We can hide some of that complexity by moving the weirdness
into the define statement itself.
If it's not laid out, it hasn't been drawn recently, and so the
text isn't animating and there's no reason to wait for the
animation to complete.
Fixes#905.
This allows to have 'local' labels with short names without
name collisions. Such labels are prefixed by '.' (e.g. .local_label)
and can be referenced directly in current global label context or
from any context by using full form 'global_label.local_label'
This is intended for internal use, and lets the launcher provide an
additional set of files to the translation system. (The main goal
here is to let it grab translations from the GUI.)
The mofivation behind this is that we want translate code to be
able to use a translate python statement to update a couple of
variables that control fonts and sizes, rather than having to
update every style that uses the font or size.
To make this work, we add a way of deferring style statements
until after the translate python code has run, and change
the order of translate python and style code.
We don't want to do this resizing on surfaces, since a surface
containing Text can overhang its Render. But once that's done,
we want to ensure the Renders are the correct size, so
main_render_at_point works.
Fixes#887.
Prior to 6.11, screens weren't a thing and as such there wasn't a "screens" layer.
If games before this time unwisely overwrote the entirety of config.layers,
the screens layer would go missing, leading to all kinds of nasty and unexpected
behaviour later on. An example of a game that can be ran on modern Ren'Py
with this fix is Digital: A Love Story by Christine Love.
This adds the _history variable, which contains one History
object for each line of dialogue shown to the player. It
also adds the following variables:
* _history
* config.history_length
* config.history_callbacks
This is initialized to the same things as default, but should
generally not be changed. It's used when we want a new style
that doesn't inherit from anything else.
This is a new displayable that combines a viewport and a
grid, allowing the information from the viewport to control
which grid elements are rendered.
(That's the theory. We still have to finish optimizing it.)
This implements the proper behavior of the overlay screens appearing
and disappearing with the overlay - and hence, having the appearance
of being in-game only.
Style_prefix is a better name, as it makes the puropose of the
property more apparent. Style_suffix makes it possible to write
screen code that both uses custom styles and can be reused with
style prefixes.
Fixes#868. Fixes#743.
This is better than checking for it in renpy.image, as the latter
can cause problems if things in the images directory have filenames
that have a - in them.
At most one InputValue can be focused at a time. This is enforced
by Ren'Py, and can be used along with buttons to handle switching
between multiple Inputs.
This is similar to a bar value, except it's taken by an input,
rather than a bar. An input value has:
* A method that returns a default value for the input.
* A method that is called when the input text changes.
* A method that is called when the user presses enter.
* A method that's called to determine if the input should be
considered editable.
InputValue objects also have methods that return actions that
enable, disable, and toggle editing.
This is a function that adds an attribute to the image of the
speaking character while the character is speaking, and removes
that attribute once speaking is finished.
Due to changes, we were detecting the use of the movie channel by
a Movie displayable as a fullscreen movie, which meant a different
code path was in use and it didn't work.
This is a channel that doesn't play or queue sounds, but creates
a new channel and plays the sound on that. This is useful for
games and interface sounds, where we don't want to stop the
already playing sound because we're playing something new.
Fixes#838.
We use a clause-based syntax, which both is a lot more readable,
and may be extended with other clauses in the near future.
This also adds a silence clause, which allows us to use
"<silence to 10>" to play 10s of silence, which fixes#847.
Using av_packet_init for packets (especially those on the stack)
has to be done, as it fixes a very subtle crash due to uninitialized
data in the packets.
Moving to ref and unref gets rid of deprecation warnings, and
also makes packet memory management easier to understand.
This prevents potential crashes caused by SDL not being thread-safe,
especially when it comes to the format refcount. When multiple threads
were allocating Surfaces, the refcount could fail to increment,
causing a double-free when the refcount came all the way down.
When multiple videos are playing, we need them to play in lockstep,
to ensure that frames stay in sync. (This is especially important
for video sprites, to ensure the color and alpha images have the
same pts.)
When multiple movies are playing, Ren'Py now checks that there is a
frame available from every playing movie before reading the frame from
any movie. As long as the movies have the same framerate, they should
always remain in lockstep.
Framedropping now works by dropping all frames that should be
displayed before the time the last frame was actually displayed.
This ensures that framedropping is consistent on all playing
movies. (Again, assuming the framerates are the same.)
Previously, this only took into account the number of characters
involved. Now, we read the actual time it will take to display
the text out of the Text object.
This means maintaining a global current time for ffmedia that
is updated once per frame. This makes it possible to play back
two streams in sync, which is necessary for videosprites.
This is done by reducing how often the lock is held. The decode
thread now hold locks for short, constant amounts of time,
ensuring the main thread can always make progress.
Perhaps most notably, deallocation has been moved to the decode
thread, ensuring it can't block the main thread at all.
This text tag can be used to just control the opacity of the
affected text. It takes a value between 0.0 and 1.0, corresponding
to invisible to fully opaque, respectively. Values can optionally
be prefixed by + or - to indicate a change in opacity, as opposed
to a total replacement.
Now that we've patched the SDL library to handle this, it's
unnecessary for Ren'Py to handle it directly, and doing so causes
problems. So out this code comes.
-1 is not a valid value for an unsigned int, and since 0 is an
invalid texture name, we use that instead.
Fixes#778. (Well, not really, but we run on the new cython.)
This lets one combine two testing clauses - for example,
click until "Yes."
with the first one executing until the second one is ready to
execute, after which the second one executes once.
This function was previously exposed as renpy.run_action. It's now
properly documented and exposed as renpy.run, with the old name
left around as an alias.
This allows an action to be run, exposing everything that actions
can to to tl. For example, a statement like:
run Jump("mylabel")
causes the game to jump to mylabel. Actions are delayed until
all input has been processed before being run.
The test language is the language introduced by the testcase
statement, with commands that will help exercise Ren'Py and
games.
The test command is a command-line command that runs a named
testcase.
This should improve the performance of load, since nearly 100% of
the time the language will stay the same when a load occurs, and
hence it's wasteful to rebuild styles and re-prepare screens when
that happens.
Outside of the init phase. This prevents screens from being run
twice - once at an old version, and once at the new - when
a style rebuild occurs.
This manifested in problems with the CTC indicator, since Character
would hang the CTC stuff on the Text object created by the old
screen version.
Fixes#811.
This fixes a problem where Ren'Py would evaluate both the correct
path, and the other path as unlikely, and then use the widget
found on the unlikely path. This could result in Character picking
up the wrong widget with the what id, preventing CTC from
working.
Since emphasize audio controls the same volume control as
renpy.music.set_volume, we only want to have it adjust those
volumes if it's enabled.
Fixes#806.
This new API makes it possible to boost the framerate to the maximum level for a defined
amount of time. It only makes sense if a third-party overlay - steam - needs us to increase
the framerate for some reason.
Now that we separate out the initial window size from other window sizes,
we can support maximization properly. Only Windows Vista and 7 have
performance problems with maximized windows, so we treat only those
OSes specially.
This fixes#798, since maximization was broken in gnome.
This is a feature, intended for mobile, that lets one rollback
by touching the left or right side of the screen. (Think of it
like paging around on a kindle.)
It's now possible to apply a transform (and hence a transition)
when a side image changes. Different transforms can be used
when a the change is within a single character, versus a
change between characters.
Fixes#781.
This only matters when an ImageReference is saved and loaded again.
Since the target may have been given information (from the
default transform or a previously shown transform), we have to
propagate that information along to the target that is newly-found
after load.
Fixes#795.
Since SDL doesn't understand highdpi on windows, it was placing
the window offscreen. This prevents Ren'Py from popping up a
window that can't be moved.
This commit makes it possible to associated a layer with
an image tag. Show and hide operations associated with that
tag will take place on the given layer.
Fixes#782.
This is a function that plays a sound file on the voice channel
with the given voice tag. This makes it possible to preview the
voice with the volume that would be used.
This fixes a bug where, if you're using the software renderer on Xorg on Debian Jessie,
switching into fullscreen produces an unusable screen (usually, a fullscreen window with
the current screen contents stuck on it; sometimes the game window scaled to full screen
but refusing to accept graphic updates (though clicks ARE passed through to the underlying
game), sometimes the game window drawn actual size in the upper left corner of the screen
with the rest of the screen occupied by the previous screen contents). This bug was
seen on two different Jessie machines.
If the user requests vsync yet vsync happens to be broken, we'll
consume 100% CPU. This can happen on a mac, for example when
the window is fully covered by another window. This code inserts
a sleep in that case.
Fixes#757.
This lets us write:
default weather = 'sunny'
add "logo [weather]"
textbutton "Make it Rain" action SetScreenVariable("weather", "rainy")
in SL2, and have it work properly.
This required a genericization of the way SL handles providing scopes to
displayables, especially Text.
Because of one of the changes made to support drawable-resolution
text, we would increase the size of Renders. When clipping was
involved, this could make the render too large, causing overlap.
This fixes a bug that affected the scrollbars in some of the
default themes.
This fixes a problem where hyperlinks were not being unscaled
properly, and hence hyperlinks that were not in the top-left
of a Text block would not handle focus the correct way.
This is necessary for setting _rollback to False to work
properly. Before this, greedy rollbacks could go to the
first line with _rollback=False, since they would go
until just after the last checkpoint.
Fixes#740.
This is used in inputs (and can be used with extend) to ensure that
text does not change spacing when it changes. However, when doing so
it's important that the creator ensure there's enough space for
the text at all reasonable resolutions.
We had the problem that spacing tweaks would force characters to
the right, leaving space between the last character and this one.
This fix now stores these adjutments, and uses them to add an
extra pixel to underlines and strikeouts when necessary to
compensate for this kind of shift.
A function to get the properties passed to a widget. The main reason
for this is so that it can be passed to other widgets - for example,
the "who" widget's color can be used to set up a background.
It's possible for drawable-res text to be bigger or smaller than
the virtual-res box. This can lead to ugliness in text layout, as
centered text will not be centered, margins will be uneven, etc.
This fix adds code that adjust glyph placement to ensure the
drawable glyphs fill the same place as the physical glyphs,
using techniques similar to kerning and line_spacing.
The goal here is to retain the proportion of the various outlines, to
avoid the case where 1px and 2 px outlines, when scaled up by 1.5x,
become 1px and 3px, respectively.
Text drawn using the new rendering code can be drawn outside the
Render, due to the difference between virtual- and drawable-resolution
text layout. Subsurface would not crop to the intersection of the
crop-box and the render, which cut text off.
This changes to only crop to the crop-rect, which means that text
leaving the Render ist still drawn (as long as it's in the crop-rect).
See: http://lemmasoft.renai.us/forums/viewtopic.php?f=8&t=31311&start=120#p385132
A problem with the new text code is that the text can change its
virtual size. This can cause other layouts to jump around as the
screen is scaled.
To fix this, this change renders text twice, first at the virtual
size, and then at the drawable size. The first pass is used to
compute line breaking, and to get the size of the final Render.
Once that's done, the drawable size is used to draw cleaner text.
Fixes#728.
A possibly-focusable thing is a button/bar/etc that is currently
insensitive, but might change to become sensitive in the future.
We want to have those things reserve their place in the focus
order, so the thing with focus doesn't lose focus when
something else becomes focusable.
Fixes#725, maybe. This is my best guess as to what's going on
there.
This is another attempt to fix Nyaatrap's problem. It's now
easy to align to drawable - and even if this fails to fix
the problem because their card is broken, it should fall back
to a reasonable rendering.
This is intended to fix an issue reported by Nyaatrap, here:
http://lemmasoft.renai.us/forums/viewtopic.php?p=384227#p384227
where the new text rendering code would cause artifacts. My guess
is the artifacts were caused by rounding errors that meant the
text images were not the correct size. By drawing the screen
at the drawable resolution, we attempt to eliminate these
errors.
text.
This is almost always visually spurious, but can happen due to scaling
of of bounding boxes of ruby text. This prevents such scaling from
causing errors.
The problem was that IMAGEDISSOLVE would cause a render-to-texture,
which would use the buffer that is_pixel_opaque had been drawing
to, causing a problem.
We check for this case, and try again - there should be no
render-to-texture the second time around, since all such
rendering has been done.
This should make posting errors easier. Fixes#722.
Right now, this is only supported on windows/mac. Linux should work,
but appears to be having problems - perhaps with the relatively
large text pastes.
This is mostly used by drawable-resolution text. Before this change,
the text (which was not generally drawable-aligned) might have
been bilinearly interpolated, which is less than ideal.
This is a method that, given virtual coordinates, returns the virtual
coordinates of the closest point in drawable space. This will be used
to eventually drawable-align text, even if the natural blit point is
not an integer pixel.
Fixes#695.
The problem is that Ren'Py had no way of telling Transforms created by
an at-list from those supplied to renpy.show as input. The result is
that we'd get a stack of transforms, and then change the child the
entire stack, which could cause repeats in the transform stack
(see the bug).
This is fixed by wrapping Transforms passed to renpy.show in an
ImageReference, which makes it clear which are on the "outside"
and which are on the "inside" of the at_list.
Backup is done if script_version.{rpy,rpyc,txt} is not present,
and at least one .rpy file has changed (as compared to the
corresponding .rpyc files).
Backups are placed in the "backups" directory underneath the
user-global saves directory.
Fixes#687.
There are cases (including joysticks and touch events) where SDL2
generates multiple events for every event we're interested in. For
example, it generates a touch and mouse event for each touch. We
filter events to the list of events we're interested in.
When an image is zoomed down and the drawable screen is bigger than
the virtual screen, Ren'Py will draw the additional information
present in the image. This information was being lost during RTT
operations that occured at the virtual resolution. (This usually
manifested as a blurry dissolve.)
Now, RTT occurs at the drawable resolution, and so the information
is shown to the player.
This also adds the information needed to render text at drawable
resolution.
This is a way of creating a new screen language statement that
returns a creator-defined displayable.
This is necessary since register_sl_statement doesn't integrate
closely enough with SL to allow proper style handling while still
allowing the screen to be optimized.
This is a class that represents a color. While functioning as a
tuple, it also has methods and properties that allows one to
convert to and frop other color systems.
If the user is trying to edit a file but has selected the None
editor, they're probably questioning the wisdom of their initial
decision. Prompt again for their selection.
Reloading wouldn't do much, since the underlying files do not
change. Reloading also requires us to back up Ren'Py, which
is moderately expensive, so eliminating that reduces start
time.
This event is triggered when a screen is updated without being shown
or replacing another screen, such as when the game is loaded or when
styles or translations change.
This allows code to take a displayable or None, without having to
be enclosed in an if statement - it makes customizing screens a
little easier.
Fixes#677.
- Fixes purchasing, which was broken because the products weren't
being validated on startup.
- Improves things in general - iOS will now only prompt for the
username and password when the user actually enters the IAP
screen.
I noticed that Ren'py did not have any simplified-chinese template in
GitHub, only one in our local blog, made by a Chinese guy who didn't
want to upload his work to GitHub. So I made a translation for free and
uploaded to Git.
Moving the evaluation of arguments later meant persistent data
would be saved when the game quit. This fixes that by adding a
flag that controls if persistent data is saved.
Analyzing parameters multiple times caused the creation of a new
global_constant set each time. If that was changed by the
parameters, the analysis would never reach a fixed point,
causing an infinite loop.
This will ensure that the various .rpyb files are emptied of legacy
code, and that they all reflect the version of Ren'Py the game
has been built with.
Fixes#660.
At this point, the vast majority of the script load time is in the
unpickler - we're going to have to address that if we want the script
to load any faster.
This was causing pulseaudio to lock up in a rare circumstance, and
doesn't really do much positive good, as the audio system will
terminate as the process quits.
Closes#658.
try to quit while Pulseaudio is locked.
To replicate the lockup:
startx as two different users.
Do something that locks the sound card as user1 (say, playing a pile of mp3s
through mpg321)
As the other user, start and then quit a Ren'Py game.
Result: strace will show the Ren'Py game sitting there waiting indefinitely
for a futex until such time as mpg321 releases the sound card.
This makes the caching of the screen analysis relatively
safe - if the Ren'Py version or the screens/init code/whatever
changes, the analysis will be performed again.
(The only potential problem is if the creator conditions renpy.const
or renpy.pure on init code - and in that case, they deserve what's
going to happen.)
This avoids a problem where script_version is created on distribution,
requiring Ren'Py to load it in, thus causing the various caches to
have to be updated and rewritten.
This changes the way we execute SL2 to try and improve performance,
compared to the previous version. The two big changes are:
* Avoid copying screens just to analyze them, although we will
load a copy of the cached analysis.
* Avoid copying screens that are used or transcluded - instead,
we make two copies of the screen (one where the transclude is
const, and one where it's not) and use the appropriate one.
This change ensures that the variants are compiled all at once when
args.compile is true, which is necessary to ensure that all the code
is placed into the analysis and ast caches.
A DeltaSet stores the difference between its contents and an
underlying set. This makes the DeltaSet much smaller than the
backing set, making it easier to store and faster to pickle
and copy.
The cache directory is for generated files that speed up Ren'Py but
don't cause incorrect behavior when omitted, so it makes sense to
put bytecode.rpyb there.
This is intended for performance reasons. In a large game, it
reduces the time it takes to prepare screens from 4s to 1s.
(And the interim results can be stored on disk, perhaps.)
While rpyc1 only supported a single representation of the script,
rpyc2 supports multiple representations. This will make it possible to
store both the original script, and a transformed version of the
script - allowing us to avoid such transformations at runtime.
This defines a label in an init parser context, so that
the style/image/define/etc statements inside will only
be run if the label is called.
This is intended to be part of the new theme system, allowing
a theme to be defined using style statements. It's not intended
for creator use.
Previously, positions would be inherited between frames, but
because the order was wrong, a 1-frame delay occured. This
meat that there would be a 1-frame lag between a transition,
and that transition wrapped in a second transition.
Now, the two transitions will run in lockstep.
Fixes#632.
The default statement now runs after all rollbacks, not just loads.
It also stores the names of the default variables that have already
been set - this will allow a default to override a builtin present
in a future Ren'Py version.
Lastly, it checks for multiple defaults for a single variable, and
errors out if it finds them.
There are some exceptions that are very unlikely to be internal
to Ren'Py, and hence it makes sense to report them as part of
the script code that logically triggered the exception.
The previous volume control was simply wrong, as we used the volume
as the exponent, which meant there was a hard floor of .1. Now, we
use volume ** 2 as the multiplier, which sounds right to me and
allows adjustment all the way down to zero.
We've been having problems where rapt goes out of sync with Ren'Py.
This will detect that problem, and will prompt the user to upgrade
again if it happed.
At the very least, this should have the problem occur earlier, rather
than being a hard-to-diagnose Android problem.
Screen preparation is expensive, and needs to be done every time
styles are rebuilt. Previously, we had been rebuilding multiple
times in the start process. Now, on a normal start, we only
prepare once.
This required quite a bit of reorganization of init code, but
it should be worth it.
Previously, current_screen was not updated during focus operations.
This meant that in hovered and unhovered, actions like
SetScreenVariable could be applied to the wrong screen (basically,
whatever screen happened to be lying around after the event
processing or update cycle).
After this change, we track the current screen as we change focus,
and update current_screen appropriately.
Fixes#610.
There's no way returning a save is a good thing. There are functions
for that, and it could cause problems with code that looks at files
that may or may not be there.
Steam stats (get_int_stat and set_int_stat) have been unreliable on
windows. I'm not sure what the problem is, but this doesn't use
them.
I'll revisit this if it proves to be a steam problem.
In steam, to display progress, we have to update a progress stat
associated with an achievement. This new code does that as part
of the achievement system.
This uses the alpha channel from a mask displayable to mask a child
displayable. While this could be done with AlphaDissolve, this is
a little more efficient. (And could plausibly be made much more
efficient.)
Previously, we'd consider the first undefined image to be shown to be
a placeholder background - even if a non-placeholder background was
already showing.
Fixes#602.
This triggers a total download of the update. That's a pain and
consumes bandwidth, but it's what the user would have to do anyway
if the update fails.
Before this change, we only stored uses_scope on the outermost
constant displayable (in a constant subtree). But this meant that
in the copy_on_change case, only the outermost displayable in the
tree would be copied.
This fixes that, by recursively killing the constant stuff until
all the copy_on_change displayables that uses the changes scope
have been copied.
We don't want to mark a tree of displayables constant if a displayable
in that tree throws an error during prediction, since the tree will
be incomplete. (This is possible if the displayables in the tree
access missing non-parameter data, like a Text that interpolates a
missing variable.)
We propagate such fails up the tree of contexts, and do not allow
a SLDisplayable to become constant if a failure has occured.
It's possible for the number of particles to drop to 0 if all
particles fall off the screen, but we don't want to do the fast
behavior in that case - only during the initial show, when st is 0.
Fixes#572.
This means that for event handling to respond to a repeated key,
Ren'Py has to expect it - preventing things like a toggling tab
key from slowing down skipping.
For some reason, SteamAPI_RunCallbacks() crashes after a callback has
been run, on Windows only. This happens both with our callbacks, and
with those registered using CCallback.
Since callbacks don't add much in normal use cases, and hours of
work didn't lead to a fix, I've disabled the callback support.
- Pop return blindly pops things - which prevents problems if the return
label doesn't exist.
- When config.developer is true, we monitor for and try to fix call stack
corruption.
- When config.developer is false, we try to survive call stack corruption,
although this may lead to other errors.
If an imagemap statement is non-constant, neither are its hotspot
children. We need to re-evaluate the hotspot children whenever
the non-constant imagemap changes.
Fixes#567.
This fixes a problem reported where ATL was being compiled at screen
prediction time - which might be before variables used by the ATL block
have finished updating.
The fix was to compile non-constant ATL twice - first, during ATL
prediction, and then again once the ATL is ready to execute for
real.
PM: http://lemmasoft.renai.us/forums/ucp.php?i=pm&mode=view&f=0&p=163661
Parameterization (a terrible name) is used to reset transforms. In
cases where a single transform should be reset, a Fixed full of
tranforms should be replaced with a Fixed full of reset transforms.
(This is especially true for Fixeds created as part of a multiple
contains block in an ATL transform.)
These are redundant on SDL2, which will synthesize more appropriate
system events from the platform-specific keypresses. This redundancy
can cause problems - when we first synthesize a quit event from
alt-F4, and then get the real QUIT, we behave incorrectly.
Fixes#554.
Windows seems to generate a spurious 1x1 resize event after leaving
fullscreen, and the occasional spurious (though correct) resize when
entering and leaving fullscreen mode.
We use the size of the window to debounce these events.
Fixes#382.
Many power users have no need for the edit shortcuts in the launcher,
and in projects with a large number of script files hitting "edit all
script files" by accident can be annoying
This makes editing the files possible, since we now know where we can
insert new clauses at the end of a statement.
As part of this commit, we change how we remove CR from the file,
so we can get unicode-byte accurate locations within the file.
These new text tags process the token list, which makes it possible
to change tags and text to other things. (For example, we are now
able to make a rot13 text tag.)
Add the translation function _() to `raise UpdateError` strings because they are showed to the end user.
Don't know how this can be done in line 1030: `raise UpdateError("While unpacking {}, unknown type {}.".format(info.name, info.type))`
This ensures that Transforms used as children of Sprites maintain
their own state (or more precisely, all Transforms added in a
single frame will have a state different than Transforms from
other frames).
Fixes#529.
Previously we only stroked the outside border. This caused problems
when a portion of the character had an interior border on the
outside.
For example, we encountered a ? character where the top
part was outside and the bottom part was inside - it seems to
have something to do with the clockwise/counterclockwise order
of the font's control points.
The latter is a flag that determines if we're on android or ios,
inclusive. (These platforms tend to behave similarly, and different
from the desktop platforms.)
To reduce the size of the compiled library, we replace the use of
python properties for prefixed style properties with the __setattr__
and __delattr__ methods.
This shouldn't have much performance impact, as sets of style
properties should only occur in init code.
Now that we're wrapping the GL functions, all the functions in gl.pyx
have to exist. The gl1 functions are missing on GLES2 systems, which
means they can't exist in a file we use there. Hence breaking things
up into two files.
These (especially the timed variants) tend to disrupt
text-to-speech. It's best to just have them speak in a
single block, whih is closest to the human speech pattern.
Fixes#483.
This is a function that contacts an update server and determines
if there is an update available. It does this in a background thread,
so as to not make the game unresponsive.
We now simply deliver "appear", "show", and "hide" to the child,
rather than trying to exploit _hide. The advantage of doing it this
way is that we can preserve the hide state going into show, without
having to transfer it between transforms.
These functions were marked as pure, but weren't actually pure
functions, since the scope they update can change. This change
has them return objects, which are pure.
When a displayable in a screen that has focus/grab is replaced,
we transfer the focus to its replacement. This fixes a problem where
we would transfer grab only, which could lead to a permagrab condition.
Fixes#477.
It doesn't make sense for Play on the sound channel to participate
in get_selected(), since it's very likely the sound will quickly
end.
See: http://lemmasoft.renai.us/forums/ucp.php?i=pm&mode=view&f=0&p=148211
where Play causes Ren'Py to restart the interaction repeatedly.
Setting this property to False hides a button, bar, or hotspot from the
keyboard focus mechanism. This might be useful for games where we
want to hide interface from the user, like hidden object games.
It seems like SDL_image has problems reentrantly loading some
formats, certainly GIF and maybe TGA and BMP. So we whitelist
the common formats (png and jpeg), and lock loads of the rest.
Fixes#426.
They're really the same operation, except invalidation can be
run in the middle of a render. So let's check for that, and
use a single codepath.
This fixes a bug where when something was shown twice, the
invalidate could not take.
See: twelvethousand
The actions (at least the purchase action) requires us be interacting,
so we can go to sleep and let play services take over to handle the
actual transaction.
This requires us to interact in the middle of a callback, so we do
an invoke_in_new_context to make that possible.
The ATL time adjustments only make sense after take_execution_state.
If we're in a context where take_execution_state is never called,
we don't want to do the time adjustments.
So now, we make it a requirement that take_execution_state be called
before doing time adjustments.
Using the object id proved to be error prone when new objects were
created during each iteration of the list (something we support).
This also returns the behavior to what it was in 6.17.
See: Seasons of the Wolf.
We really should be propagating the transform state, but there
isn't really a good way to do that at the moment. (It isn't clear
where we'd store the old state.)
This is a reasonable, if ugly, workaround.
See: http://lemmasoft.renai.us/forums/ucp.php?i=pm&mode=view&f=0&p=147158
This is a function that munges a string beginning with __ in the
same manner that Ren'Py munges names when parsing a file.
jump __test
and:
jump expression renpy.munge("__test")
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 prevents an error that was caused by when an exception in
finish_load would cause the .rpy file to load after finish_load
had already started updating data structures.
This displays a placeholder image. The image displayed may be chosen
by the creator, or automatically determined based on the name of the
image being placeheld.
We do this by cheating heavily - avoiding re-preparing screens, and
busting the render cache. This wouldn't work for arbitrary code,
but it's good enough for the theme chooser.
Where sl1 used structural equality to transfer state between
screens sharing the same tag, sl2 can't do that. (Doing so would
require maintaining _name, which is expensive.)
Instead, we allow uses of screens to include an id property,
which explcitly specifies equality of used screens.
By being a displayable, OnEvent is able to invoke actions even when
a screen is not being updated. This is important in the new version
of Ren'Py, which tries to avoid screen updates as much as possible.
While a reserved word, it's the sort of thing we didn't use much,
and that might be used a lot by end users. So we'll try to avoid
adding uses of type, prefering _type instead.
This is purely to make it possible to port sl1 games up to newer
Ren'Py, without rewriting them. This shouldn't be used in new games,
and may go away at some point.
When a parameter to a transition changes, we have a different
transition, so taking the state doesn't work - it means we will
be representing the state of a different transition.
This prevents us from copying transforms that already have had
take_execution_state called. This fixes a regression that caused
copied transforms to reset, and hence the show event to be fired
multiple times.
When the return site exists, we simply return to it. If the return
site disappears, we look up the call site, and return to the next
node, if one exists.
If we're in developer mode, we report an error at this
point. Otherwise, we pop the stack, and try again.
We now treat this as a mute, and do not play the voice file. This
prevents us from emphasizing voice when the user has disabled the
voice of a particular character.
When an emphasized channel is playing, all non-emphasized channels
have their volume lowered. When emphasis ends, the non-emphasized
channels resume their normal volume.
This is a generalization of (and replacement for) #360.
This will break existing games, by changing the volumes in a way
creators will not expect. Let's make this opt in across the board.
Removed it from the various templates since voice stuff is pretty
rarely used, and shouldn't required attention from a new user.
With the new screen system, it's now possible to reuse the same
displayable between two interactions. Such displayables need to
retain grab until they go away, or grab is explicitly released.
This fixes a problem where a constant bar would lose focus after being
adjusted in a way that restarts the interaction, as volume sliders do.
Previously, we were handling this in SDL. However, this conflicted
with the MOUSEMOTION merging - the other event could be moved before
the mouse release, leading to unsightly jumps, and (perhaps) the
viewport being in the wrong place.
We now synthesize the mouse release move in Ren'Py, which lets us
control the order in which it occurs.
Fixes#391.
We had been using the mouse to determine focus at the start of
each interaction. We now only use the mouse to determine focus
if the last event - the event that ended the interaction - was
a mouse event.
Fixes#299.
This includes:
* When predicting, we do not stop on the first exception. Instead, we
keep going, trying to predict what we can.
* This includes screen parameters and arguments as well.
* If we can't evaluate the list part of a for loop, we use [ 0 ] - in
conjunction with the error handling, this should get us
something. In many cases, it gets us everything important.
* Once per if statement, we predict all branches.
This fixes a regression that caused screens without hide transforms to
immediately become empty, even when they should have been used in an
old transition.
There are certain nodes that can't have keywords, like if nodes that
occur after a python statement that defines a variable used by the if
statement.
This change ensures that we only execute the keywords() method if:
* Some keywords are present.
* Nothing precludes the keywords method from running.
The screen's format may not be the for RGBA format we expect surfaces
to be in when we load them into textures. This would cause
FileCurrentScreenshot to break.
Fixes#314.
We would pass say_vbox_properties, which is only used in pre-screens
code. When iterating through a say_list containing multiple
lines of text, we could use say_args from a previous line.
This is optionally a function that returns the size of the OpenGL
viewport in which Ren'Py draws the game. Having this a callback makes
it possible to constrain the sizes of the game window.
For example, this makes it possible to limit the viewport to integer
multiples of the starting window size, as requested in #406.
These are functions to count the number of dialogue blocks and the
number of seen dialogue blocks in the game. This makes it possible
to give an indication of how much of the game text the player has
seen.
The focusable field was not being set correctly, which made the button
participate in the focus mechanism and get the idle background when
it should have been insensitive.
Used screens that take parameters now run isolated from their parent
context. This lets us treat global const variables as constant,
without having to worry about the parent scope redefining them.
Our definition of constant includes field access, indexing, etc. Since
a screens parameter might be mutable (a list, for example), we can't
treat it as const in the general case.
We can analyze parameterized screens more thoroughly than
non-parameterized screens, since the parameters limit what can
be overridden in the screens' scope.
Each product has a name, used to identify it. This name may be
different from the names used in the various app stores, which can be
specified independently.
The SL fixed statement was calling renpy.display.layout.Fixed with
the layout parameter. Since Fixed also supplied a layout parameter
we'd get a crash.
We had previously been assuming the audio started at 0, while
respecting the video PTS. If the PTS of the first video frame was
non-zero, this would lead to the video being delayed behind the audio
and never catching up.
Fixes#386.
This ensures that when we prepare screens - such as after a language
change - the cache is dropped. If we don't do this, sl2 can use old
values for displayable arguments and const displayables.
Do not mark transforms that aren't intended for use in screens - but
may have names that would be common for screen parameters - as const.
This should improve compatibility with older screens.
This is required so we can pass the layout argument to MultiBox,
which makes the distiniction between fixed, horizontal, and vertical
layouts when the style does not.
This allows one to navigate through all of the displayables on the
screen with the cursor keys, without having to do 2-d navigation,
which is what Ren'Py does by default.
Pyttsx would try to invoke TTS from the python process, which
required a ton of dependencies. (Pyobjc and win32api) We now
use subprocess to run platform-specific executables, passing
the text to speak on the commands line.
* Generate alt text only when voice is enabled.
* Allow the text of the children to be interpolated into alt text.
* Alt text for the preferences screen.
This required several fixes, including making sure copy_on_change works
and copying constant displayables if a change to the scope causes a Text
to change its contents.
fixed the path where Ren'Py had the wrong path for the arabic font AdvertisingBold.ttf which created an error message while trying to access "Options" from the inside the game.
This is a function that takes displayables that are being implicitly
added to a widget by ChildOrFixed. We do not want to copy transforms
added this way, which we had been doing, causing problems.
We now only use the newly-created boxes if at least one displayable
has changed. Otherwise, we don't bother, preferring to use the old
box (which likely has been cached).
Transform had a problem parsing arguments with underscores in the
name, like transform_anchor. That's been fixed.
Transform also did a lot of allocation for rare cases, such a
Transform being given an argument with a style prefix,
like hover_xpos. This has been optimized in order to reduce
the amount of allocation required.
This determines if events will be passed to the child of the
transform. This allows one to prevent events from being passed
to the old_widget in an ATL transform.
This is a behavior change, and a potentially dangerous one, since it
could execute arguments with side effects multiple times. But those
should be rare, this provides a nice performance boost, and users
will be able to disable prediction using the new nopredict clause.
There are a couple of caveats here, since non-ascii identifiers
can't be used in python code.
* The names must be defined with the define statement.
* The names can't be accessed in python code.
Stil, something like:
define 彁 = Character("Boy who is not able satisfactorily to explain what a Hrung is, nor why it should choose to collapse on Betelgeuse Seven")
彁 "Don't forget your towel."
should work.
Chinese_Simplified translation for ren'py launcher
Created by huanxuantian
Translate by huanxuantian
Translation version 1.3.b
update to github on 2014-5-25 sun
This restarts the interaction, and then reports the amount of time
it took to do so. This can give us an idea of how much (if any)
performance is being improved by the new screens code.
--compile compiles the script before doing anything else.
--lint is a backwards compatable way of invoking the lint
command. We've been parsing it as an argument for a while, but it
didn't work.
These are displayables that have constant arguments and constant
children, and hence where the same displayable can alwaye be used. We
use a very fast path for these displayables (simply retrieving them
from the cache), and avoid evaluating their children entirely.
Due to inheritance of SLBlocks, we had the problem that
frame:
textbutton "test" xysize (100, 100)
Would pass the xysize parameter to both the textbutton and the frame.
Viewport was broken with sl2, so we now have a compatible
implementation.
Several screen language things are implemented as composite
displayables. For example, a textbutton consists of a Text
and a Button, and a viewport scrollbars "both" consists of
a Side, two Bars, and a Viewport.
The main displayable (stored in _main on the outer displayable) is the
displayable we add children to, and return for get_widget.
This is a workaround for #351, which only seems to manifest on certain
Macs, and hence is proving hard to actually fix. At least with this
change, it will only show up when switching to Arabic. (And may not
show up at all, as it may have something to do with filesystem
encodings.)
Reusing a displayable is possible when we realize that the positional
and keyword arguments of the displayable are the same. We can also
reuse the transform if we apply the same transform to the
displayable.
This fixes an issue where renpy.pause(0) would effectively block
rollback, since there would be no time for the rollback to occur.
(The same issue occurs when pausing for a short time.)
This is a class that can be used to create sentinel objects. Even if
we pickle and unpickle an object of this class, it remains the same
object, as far as the 'is' operator is concerned.
This fixes a problem with the shift+R module backups. (The same
problem 9dec1f32ab tried to fix.)
The reload backup process would back up singletons, but not functions
and methods that used those singletons as default arguments. The
result was that the singletons would change identity, but not
the default arguments - and the code using them would fail in
odd ways.
An example problem this caused is
http://lemmasoft.renai.us/forums/viewtopic.php?p=320775#p320757 .
The major problem fixed here is one where if a transform was
replaced (like one in a screen would be), it would not know that
the old child was being shown. This would prevent the
"<displayable> with <transition>" ATL construct from doing
anything.
Fixes#340.
The raspi one somewhat works (it has problems, such as positioning the
window in the wrong place), but the slowness of the raspi system make
using it problematic.
The x11 mode hasn't been tested.
We now use the .report_traceback method whenever it's available to
produce nicer-looking tracebacks. (Previously, we only used it
for the simple tracebacks, and only for Contexts.)
The regression was introduced by dd4d3410a6,
and shows up in the Sunrider tutorial battle, when the PACT ships
attack with missiles.
The problem was that we were adjusting the times improperly - using
AdjustTimes to make the adjustment. Instead, we want the MultiBox
containing the layer to make the adjustment (which it does when
layer_name is set). This is because the MultiBox handles start
and animation times that are not the time at which the layer
was shown.
This doesn't support arguments yet, and passes everything through to
use_screen. But it does successfully let one include SL2 and SL1
screens inside an SL2 screen.
This queues an event by name. For example, renpy.queue_event("dismiss")
will act like dismiss has been pressed.
This is intended to make it easier to interface Ren'Py with custom
controllers.
The problem would manifest when we did something like
$ renpy.transition(move), and restarted the interaction. We had been
creating a MultiBox with a layers dict, which would adjust the times
for its children. When shown as part of the second interaction, the
times would be reset to 0, and the move would appear to restart.
By getting rid of the layers dict, we prevent this the adjustment
of times from occuring, and things work as expected.
This fixes a problem where we'd inherit padding from the button
style, which could cause the hotspots to show up in odd places.
This would only occur if ui.hotspot was called directly - so almost
never in actual code.
This is necessary for us to have imagemap statements. The imagemap
needs the keywords to be evaluated, and the imagemap needs to be
created before the keywords can be created.
The Applications folder in OS X is large and installers tend to expect apps to stay where they were placed (i.e. the root of /Applications). Since Lion, there's been application category metadata for View --> Arrange by Application Category but if the metadata's not in info.plist, the app gets sorted into "Other" at the bottom.
https://developer.apple.com/library/Mac/releasenotes/General/SubmittingToMacAppStore/#//apple_ref/doc/uid/TP40010572-CH16-SW8 (this applies to all Mac apps, not just those installed through App Store).
The style rewrite prevented direct access to prefixed styles,
which caused prediction not to work. With this change, we
handle the prediction in cython, which has access to
prefixed and unprefixed styles.
This can happen with some game changes, especially when changing
config.developer = True to False. Rather than crashing in this
case, we display an empty screen.
Fixes#320.
Constant positional arguments are evaluated during a prepare phase,
while non-constant arguments are evaluated at runtime. (When a mix
of arguments is given, they are combined.)
If we don't do this, the children will be shown at the timebase
of the layer at_list, which cause huge problems if the children
themselves are being transformed.
It does some wierd direct keyboard access stuff that might change
in future versions of windows or linux, so this seems like a
reasonable bit of paranoia.
This is a feature that scans for changes in file existence and times.
If a file changes, this triggers a restart of Ren'Py, reloading the
script and game.
Directories in the projects directory might contain filenames
that aren't representable in the system encoding. We now
ignore these directories, rather than throwing an exception.
<p>To advance through the game, <tt>left-click</tt> or press the <tt>space</tt> or <tt>enter</tt> keys. When at a menu, <tt>left-click</tt> to make a choice, or use the arrow keys to select a choice and <tt>enter</tt> to activate it.</p>
<p><aname="Game_Menu"id="Game_Menu"></a></p>
<h3><spanclass="editsection">[<ahref="/w/index.php?title=renpy/Help&action=edit&section=2"title="Edit section: Game Menu">edit</a>]</span><spanclass="mw-headline">Game Menu</span></h3>
<p>When playing a game, <tt>right-click</tt> or press the <tt>escape</tt> key to enter the game menu. The game menu gives the following choices:</p>
<dl>
<dt>Return</dt>
<dd>Returns to the game.</dd>
<dt>Save Game</dt>
<dd>Allows you to save a game by clicking on a save slot.</dd>
<dt>Load Game</dt>
<dd>Allows you to load a game by clicking on a save slot. Clicking on "Auto" accesses the automatic save slots.</dd>
<dt>Preferences</dt>
<dd>Changes the game preferences (options/configuration):
<dl>
<dt>Display</dt>
<dd>Switches between fullscreen and windowed mode.</dd>
<dt>Transitions</dt>
<dd>Controls the display of transitions between game screens.</dd>
<dt>Text Speed</dt>
<dd>Controls the rate at which text displays. The further to the right this slider is, the faster the text will display. All the way to the right causes text to be shown instantly.</dd>
<dt>Joystick</dt>
<dd>Lets you control the game using a joystick.</dd>
<dt>Skip</dt>
<dd>Chooses between skipping messages that have been already seen (in any play through the game), and skipping all messages.</dd>
<dt>Begin Skipping</dt>
<dd>Returns to the game, while skipping.</dd>
<dt>After Choices</dt>
<dd>Controls if skipping stops upon reaching a menu.</dd>
<dt>Auto-Forward Time</dt>
<dd>Controls automatic advance. The further to the left this slider is, the shorter the amount of time before the game advances. All the way to the right means text will never auto-forward.</dd>
<dt>Music, Sound, and Voice Volume</dt>
<dd>Controls the volume of the Music, Sound effect, and Voice channels, respectively. The further to the right these are, the louder the volume.</dd>
</dl>
</dd>
</dl>
<dl>
<dt>Main Menu</dt>
<dd>Returns to the main menu, ending the current game.</dd>
<dt>Help</dt>
<dd>Shows this help screen.</dd>
<dt>Quit</dt>
<dd>Exits the game; the game will be closed and ended.</dd>
<h3><spanclass="editsection">[<ahref="/w/index.php?title=renpy/Help&action=edit&section=3"title="Edit section: Key and Mouse Bindings">edit</a>]</span><spanclass="mw-headline">Key and Mouse Bindings</span></h3>
<dl>
<dt>Left-click, Enter</dt>
<dd>Advances through the game, activates menu choices, buttons, and sliders.</dd>
<dt>Space</dt>
<dd>Advances through the game, but does not activate choices.</dd>
<dt>Arrow Keys</dt>
<dd>Selects menu choices, buttons, and sliders.</dd>
<dt>Ctrl</dt>
<dd>Causes skipping to occur while the ctrl key is held down.</dd>
<dt>Tab</dt>
<dd>Toggles skipping, causing it to occur until tab is pressed again.</dd>
<dt>Mousewheel-Up, PageUp</dt>
<dd>Causes rollback to occur. Rollback reverses the game back in time, showing prior text and even allowing menu choices to be changed.</dd>
<dt>Mousewheel-Down, PageDown</dt>
<dd>Causes rollforward to occur, cancelling out a previous rollback.</dd>
<dt>Right-click, Escape</dt>
<dd>Enters the game menu. When in the game menu, returns to the game.</dd>
<dt>Middle-click, H</dt>
<dd>Hides the text window and other transient displays.</dd>
<dt>F</dt>
<dd>Toggles fullscreen mode</dd>
<dt>S</dt>
<dd>Takes a screenshot, saving it in a file named screenshotxxxx.png, where xxxx is a serial number.</dd>
<dt>Alt-M, Command-H</dt>
<dd>Hides (iconifies) the window.</dd>
<dt>Alt-F4, Command-Q</dt>
<dd>Quits the game.</dd>
<dt>Delete</dt>
<dd>When a save slot is selected, deletes that save slot.</dd>
<p>This game uses source code from a number of open source projects. For a list, and a location where the source code can be downloaded from, please view the LICENSE.txt file in the renpy directory, or visit <ahref="http://www.renpy.org/wiki/renpy/License"class="external free"title="http://www.renpy.org/wiki/renpy/License"rel="nofollow">http://www.renpy.org/wiki/renpy/License</a> .</p>
<h3>Controller Support and Bindings</h3>
<p>
This game should automatically detect and use game controllers supported by
SDL2. Other controllers can be configured using third-party configuration tools
like the <ahref="http://www.generalarcade.com/gamepadtool/">SDL2 Gampad Tool</a>
</p>
<p>
A small number of systems may have problems using detected game controllers. Should
that happen, hold down shift as the game starts, and disable the controller support.
</p>
<p>The following bindings are used:</p>
<dl>
<dt>Right Trigger, A (Bottom Button)</dt>
<dd>Advances through the game, activates menu choices, buttons, and sliders.</dd>
<dt>Guide, Start</dt>
<dd>Enters the game menu. When in the game menu, returns to the game.</dd>
<dt>Directional Pad, Analog Sticks</dt>
<dd>Navigates between menu choices, buttons, and sliders.</dd>
<dt>Left Trigger, Left Shoulder, Back</dt>
<dd>Causes rollback to occur. Rollback reverses the game back in time, showing prior text and even allowing
menu choices to be changed.</dd>
<dt>Right Shoulder</dt>
<dd>Causes rollforward to occur, canceling out a previous rollback.</dd>
<dt>Y (Top Button)</dt>
<dd>Hides the text window and other transient displays.</dd>
</dl>
<h2>Legal Notice</h2>
<p>
This program contains free software licensed under a number of licenses, including the GNU Lesser Public License. A
complete list of software is available at <ahref="http://www.renpy.org/doc/html/license.html">http://www.renpy.org/doc/html/license.html</a>.
# Copyright 2004-2014 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
@@ -36,19 +36,25 @@ init python:
PHONE_TEXT = _("Attempts to emulate an Android phone.\n\nTouch input is emulated through the mouse, but only when the button is held down. Escape is mapped to the menu button, and PageUp is mapped to the back button.")
TABLET_TEXT = _("Attempts to emulate an Android tablet.\n\nTouch input is emulated through the mouse, but only when the button is held down. Escape is mapped to the menu button, and PageUp is mapped to the back button.")
OUYA_TEXT = _("Attempts to emulate an OUYA console.\n\nController input is mapped to the arrow keys, Enter is mapped to the select button, Escape is mapped to the menu button, and PageUp is mapped to the back button.")
OUYA_TEXT = _("Attempts to emulate a televison-based Android console, like the OUYA or Fire TV.\n\nController input is mapped to the arrow keys, Enter is mapped to the select button, Escape is mapped to the menu button, and PageUp is mapped to the back button.")
INSTALL_SDK_TEXT = _("Downloads and installs the Android SDK and supporting packages. Optionally, generates the keys required to sign the package.")
CONFIGURE_TEXT = _("Configures the package name, version, and other information about this project.")
PLAY_KEYS_TEXT = _("Opens the file containing the Google Play keys in the editor.\n\nThis is only needed if the application is using an expansion APK. Read the documentation for more details.")
BUILD_TEXT = _("Builds the Android package.")
BUILD_AND_INSTALL_TEXT = _("Builds the Android package, and installs it on an Android device connected to your computer.")
BUILD_INSTALL_AND_LAUNCH_TEXT = _("Builds the Android package, installs it on an Android device connected to your computer, then launches the app on your device.")
CONNECT_TEXT = _("Connects to an Android device running ADB in TCP/IP mode.")
DISCONNECT_TEXT = _("Disconnects from an Android device running ADB in TCP/IP mode.")
LOGCAT_TEXT = _("Retrieves the log from the Android device and writes it to a file.")
_("Please enter the IP address and port number to connect to, in the form \"192.168.1.143:5555\". Consult your device's documentation to determine if it supports remote ADB, and if so, the address and port to use."),
default=address,
cancel=Jump("android"),
)
address = address.strip()
try:
host, port = address.split(":")
except:
interface.error(_("Invalid remote ADB address"), _("The address must contain one exactly one ':'."), label=None)
continue
if " " in host:
interface.error(_("Invalid remote ADB address"), _("The host may not contain whitespace."), label=None)
continue
try:
int(port)
except:
interface.error(_("Invalid remote ADB address"), _("The port must be a number."), label=None)
interface.error(_("Ren'Py was unable to run python with tkinter to choose the directory. Please install the python-tk or tkinter package."), label=None)
if code:
interface.error(_("Ren'Py was unable to run python with tkinter to choose the directory. Please install the python-tk or tkinter package."), label=None)
elif choice:
path = choice.decode("utf-8")
is_default = False
if path is None:
path = default_path
is_default = True
path = renpy.fsdecode(path)
if (not os.path.isdir(path)) or (not directory_is_writable(path)):
interface.error(_("The selected projects directory is not writable."))
path = default_path
is_default = True
if is_default and (not directory_is_writable(path)):
interface.processing(_("Adding from clauses to call statements that do not have them."))
project.current.launch([ "add_from" ], wait=True)
return
label add_from:
call add_from_common
jump build_distributions
label start_distribute:
if project.current.data["add_from"]:
call add_from_common
jump distribute
label build_update_dump:
python:
@@ -252,7 +287,12 @@ label build_missing:
interface.yesno(_("Your project does not contain build information. Would you like to add build information to the end of options.rpy?"), yes=Return(True), no=Jump("front_page"))
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
SIL OPEN FONT LICENSE
Version 1.1 - 26 February 2007
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects,
to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework
in which fonts may be shared and improved in partnership with others.
The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold
by themselves.
The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided
that any reserved names are not used by derivative works.
The fonts and derivatives, however, cannot be released under any other type of license.
The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such.
This may include source files, build scripts and documentation.
"Reserved Font Name" refers to any names specified as such after the copyright statement(s).
"Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s).
"Modified Version" refers to any derivative made by adding to, deleting, or substituting ? in part or in whole ?
any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment.
"Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge,
embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions:
1) Neither the Font Software nor any of its individual components,in Original or Modified Versions,
may be sold by itself.
2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software,
provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files,
human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields
can be easily viewed by the user.
3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written
permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented
to the users.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise
any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit
written permission.
5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed
under any other license. The requirement for fonts to remain under this license does not apply to any document created using
the Font Software.
TERMINATION
This license becomes null and void if any of the above conditions are not met.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT.
IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE
interface.error(_("[project_name!q] already exists. Please choose a different project name."), project_name=project_name)
if os.path.exists(project_dir):
interface.error(_("[project_dir!q] already exists. Please choose a different project name."), project_dir=project_dir)
gui_replace_images = True
gui_replace_code = True
gui_update_code = True
label gui_project_size:
python:
gui_size = interface.choice(
_("What resolution should the project use? Although Ren'Py can scale the window up and down, this is the initial size of the window, the size at which assets should be drawn, and the size at which the assets will be at their sharpest.\n\nThe default of 1280x720 is a reasonable compromise."),
[
((1066, 600), "1066x600"),
((1280, 720), "1280x720"),
((1920, 1080), "1920x1080"),
],
(1280, 720),
cancel=Jump("front_page"),
)
label gui_project_common:
$ gui_color = (DARK_COLORS[0], "#000000", False)
call screen choose_gui_color
python hide:
width, height = gui_size
accent, boring, light = gui_color
prefix = os.path.join(project_dir, "game")
if not os.path.isdir(prefix) and not gui_new:
interface.error("{} does not appear to be a Ren'Py game.".format(prefix))
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
# (the "Software"), to deal in the Software without restriction,
# including without limitation the rights to use, copy, modify, merge,
# publish, distribute, sublicense, and/or sell copies of the Software,
# and to permit persons to whom the Software is furnished to do so,
# subject to the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
init python:
IOS_NO_RENIOS = 0
IOS_NO_DIRECTORY = 1
IOS_NO_PROJECT = 2
IOS_OK = 3
IOS_NO_RENIOS_TEXT = _("To build iOS packages, please download renios, unzip it, and place it into the Ren'Py directory. Then restart the Ren'Py launcher.")
IOS_NO_DIRECTORY_TEXT = _("The directory in where Xcode projects will be placed has not been selected. Choose 'Select Directory' to select it.")
IOS_NO_PROJECT_TEXT = _("There is no Xcode project corresponding to the current Ren'Py project. Choose 'Create Xcode Project' to create one.")
IOS_OK_TEXT = _("An Xcode project exists. Choose 'Update Xcode Project' to update it with the latest game files, or use Xcode to build and install it.")
IPHONE_TEXT = _("Attempts to emulate an iPhone.\n\nTouch input is emulated through the mouse, but only when the button is held down.")
IPAD_TEXT = _("Attempts to emulate an iPad.\n\nTouch input is emulated through the mouse, but only when the button is held down.")
IOS_SELECT_DIRECTORY_TEXT = _("Selects the directory where Xcode projects will be placed.")
IOS_CREATE_PROJECT_TEXT = _("Creates an Xcode project corresponding to the current Ren'Py project.")
IOS_UPDATE_PROJECT_TEXT = _("Updates the Xcode project with the latest game files. This must be done each time the Ren'Py project changes.")
IOS_XCODE_TEXT = _("Opens the Xcode project in Xcode.")
IOS_OPEN_DIRECTORY_TEXT = _("Opens the directory containing Xcode projects.")
$ interface.yesno(_("Before packaging iOS apps, you'll need to download renios, Ren'Py's iOS support. Would you like to download renios now?"), no=Jump("front_page"))
$ add_dlc("renios", restart=True)
call screen ios
label select_xcode_projects_directory:
python hide:
interface.interaction(_("XCODE PROJECTS DIRECTORY"), _("Please choose the Xcode Projects Directory using the directory chooser.\n{b}The directory chooser may have opened behind this window.{/b}"))
if itch_project is None or ("/" not in itch_project):
interface.error(
_("The name of the itch project has not been set."),
_("Please {a=https://itch.io/game/new}create your project{/a}, then add a line like \n{vspace=5}define build.itch_project = \"user-name/game-name\"\n{vspace=5} to options.rpy."),
# Copyright 2004-2014 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
@@ -25,6 +25,56 @@ init python:
import time
import re
def check_language_support():
language = _preferences.language
new = False
legacy = False
# Check for a translation of the words "New GUI Interface".
if (language is None) or (__("New GUI Interface") != "New GUI Interface"):
new = True
try:
if (language is None) or os.path.exists(os.path.join(config.renpy_base, "templates", language)):
legacy = True
except:
pass
if new and legacy:
store.language_support = _("Both interfaces have been translated to your language.")
elif new:
store.language_support = _("Only the new GUI has been translated to your language.")
elif legacy:
store.language_support = _("Only the legacy theme interface has been translated to your language.")
else:
store.language_support = _("Neither interface has been translated to your language.")
label new_project:
if persistent.projects_directory is None:
call choose_projects_directory
if persistent.projects_directory is None:
$ interface.error(_("The projects directory could not be set. Giving up."))
python:
check_language_support()
gui_kind = interface.choice(
_("Which interface would you like to use? The new GUI has a modern look, supports wide screens and mobile devices, and is easier to customize. Legacy themes might be necessary to work with older example code.\n\n[language_support!t]\n\nIf in doubt, choose the new GUI, then click Continue on the bottom-right."),
text _("Please select a template to use for your new project. The template sets the default font and the user interface language. If your language is not supported, choose 'english'.")
interface.interaction(_("PROJECTS DIRECTORY"), _("Please choose the projects directory using the directory chooser.\n{b}The directory chooser may have opened behind this window.{/b}"), _("This launcher will scan for projects in this directory, will create new projects in this directory, and will place built projects into this directory."),)
interface.error(_("Ren'Py was unable to run python with tkinter to choose the projects directory. Please install the python-tk or tkinter package."), label=None)
if code:
interface.error(_("Ren'Py was unable to run python with tkinter to choose the projects directory. Please install the python-tk or tkinter package."), label=None)
elif choice:
path = renpy.fsdecode(choice)
if path is None:
path = default_path
if is_default:
interface.info(_("Ren'Py has set the projects directory to:"), "[path!q]", path=path)
path = renpy.fsdecode(path)
persistent.projects_directory = path
project.manager.scan()
return
init python:
def set_projects_directory_command():
ap = renpy.arguments.ArgumentParser()
ap.add_argument("projects", help="The path to the projects directory.")
new "هل انت متأكد من رغبتك في حذف خانة الحفظ هذه؟"
# 00gui.rpy:229
old "Are you sure you want to overwrite your save?"
new "هل انت متأكد من رغبتك في الحفظ على هذه الخانة؟"
# 00gui.rpy:230
old "Loading will lose unsaved progress.\nAre you sure you want to do this?"
new "الاسترجاع سيضيع كل ما فعلته منذ خانة الحفظ السابقة. \n هل انت متأكد من رغبتك في الاسترجاع إلى هذه النقطة؟"
# 00gui.rpy:231
old "Are you sure you want to quit?"
new "هل انت متأكد من رغبتك في الخروج؟"
# 00gui.rpy:232
old "Are you sure you want to return to the main menu?\nThis will lose unsaved progress."
new "هل انت متأكد من رغبتك في العودة للقائمة الرئيسية؟ \n كل ما لم تقم بحفظة سيضيع."
# 00gui.rpy:233
old "Are you sure you want to end the replay?"
new "Are you sure you want to end the replay?"
# 00gui.rpy:234
old "Are you sure you want to begin skipping?"
new "هل أنت متأكد من رغبتك في البدء بالتسريع؟"
# 00gui.rpy:235
old "Are you sure you want to skip to the next choice?"
new "هل انت متأكد من رغبتك في التسريع حتى الخيار التالي؟"
# 00gui.rpy:236
old "Are you sure you want to skip unseen dialogue to the next choice?"
new "Are you sure you want to skip unseen dialogue to the next choice?"
# 00keymap.rpy:250
old "Saved screenshot as %s."
new "تم حفظ الصورة كـ %s"
# 00library.rpy:142
old "Self-voicing disabled."
new "Self-voicing disabled."
# 00library.rpy:143
old "Clipboard voicing enabled. "
new "Clipboard voicing enabled. "
# 00library.rpy:144
old "Self-voicing enabled. "
new "Self-voicing enabled. "
# 00library.rpy:179
old "Skip Mode"
new "وضع التسريع"
# 00library.rpy:262
old "This program contains free software under a number of licenses, including the MIT License and GNU Lesser General Public License. A complete list of software, including links to full source code, can be found {a=https://www.renpy.org/l/license}here{/a}."
new "This program contains free software under a number of licenses, including the MIT License and GNU Lesser General Public License. A complete list of software, including links to full source code, can be found {a=https://www.renpy.org/l/license}here{/a}."
# 00preferences.rpy:422
old "Clipboard voicing enabled. Press 'shift+C' to disable."
new "تشغيل الأصوات من الحافظة مفعّل. إضغط لإيقافه زريّ: Shift+C"
# 00preferences.rpy:424
old "Self-voicing would say \"[renpy.display.tts.last]\". Press 'alt+shift+V' to disable."
new "Self-voicing would say \"[renpy.display.tts.last]\". Press 'alt+shift+V' to disable."
# 00preferences.rpy:426
old "Self-voicing enabled. Press 'v' to disable."
new "التكلّم التلقائي مفعَل. لإيقافه إضغط زر V"
# 00iap.rpy:217
old "Contacting App Store\nPlease Wait..."
new "Contacting App Store\nPlease Wait..."
# 00updater.rpy:367
old "The Ren'Py Updater is not supported on mobile devices."
new "تحديث برنامج رينباي غير مدعوم على الأجهزة المحمولة."
# 00updater.rpy:486
old "An error is being simulated."
new "يتم محاكاة خطأ الآن."
# 00updater.rpy:662
old "Either this project does not support updating, or the update status file was deleted."
new "هذا المشروع لا يدعم التحديث، أو أن ملف حالة نسخة البرنامج محذوفة."
# 00updater.rpy:676
old "This account does not have permission to perform an update."
new "هذا الحساب ليست لديه الصلاحية ليقوم بالتحديث."
# 00updater.rpy:679
old "This account does not have permission to write the update log."
new " هذا الحساب ليست لديه الصلاحية ليكتب ملف التحديث."
# 00updater.rpy:704
old "Could not verify update signature."
new "لم نتمكن من التحقق من توقيع التحديث update signature."
# 00updater.rpy:975
old "The update file was not downloaded."
new "لم يتم تحميل ملف التحديث."
# 00updater.rpy:993
old "The update file does not have the correct digest - it may have been corrupted."
new "ملف التحديث لا يحتوي على المختصرات الصحيحة - قد يكون معطوباً."
# 00updater.rpy:1049
old "While unpacking {}, unknown type {}."
new "عند فك الحزمة {}، نوع مجهول {}."
# 00updater.rpy:1393
old "Updater"
new "برنامج التحديث"
# 00updater.rpy:1404
old "This program is up to date."
new "هذه النسخة هي الأحدث"
# 00updater.rpy:1406
old "[u.version] is available. Do you want to install it?"
new "النسخة [u.version] متوفرة, هل ترغب في تنصيبها؟"
# 00updater.rpy:1408
old "Preparing to download the updates."
new "يتم التجهيز لتحميل البرنامج من الانترنت"
# 00updater.rpy:1410
old "Downloading the updates."
new "يتم تنزيل التحديثات"
# 00updater.rpy:1412
old "Unpacking the updates."
new "يتم فك الضغط عن التحديثات"
# 00updater.rpy:1416
old "The updates have been installed. The program will restart."
old "Changes will take effect the next time this program is run."
new "التغييرات سيتم تطبيقها في المرة القادمة تفتح البرنامج"
# 00gltest.rpy:141
old "Performance Warning"
new "تحذير تشغيلي"
# 00gltest.rpy:146
old "This computer is using software rendering."
new "هذا الحاسوب يستعمل محركات البرامج software rendering"
# 00gltest.rpy:148
old "This computer is not using shaders."
new "هذا الحاسوب لا يستعمل اي shaders"
# 00gltest.rpy:150
old "This computer is displaying graphics slowly."
new "هذا الحاسوب يستعرض الرسوميات بشكل بطيء"
# 00gltest.rpy:152
old "This computer has a problem displaying graphics: [problem]."
new "هذا الحاسوب يواجه مشكلة في عرض الرسوميات [problem]"
# 00gltest.rpy:157
old "Its graphics drivers may be out of date or not operating correctly. This can lead to slow or incorrect graphics display. Updating DirectX could fix this problem."
new "محركات الرسوميات قد تكون قديمة او لا تعمل بشكل صحيح. قد يسبب ذلك بطء او اخطاء في الاستعراض, القيام بتحديث directX قد يساعد في حل المشكلة."
# 00gltest.rpy:159
old "Its graphics drivers may be out of date or not operating correctly. This can lead to slow or incorrect graphics display."
new " محركات الرسوميات قد تكون قديمة او لا تعمل بشكل صحيح. قد يسبب ذلك بطء او اخطاء في الاستعراض."
# 00gltest.rpy:164
old "Update DirectX"
new "تحديث DirectX"
# 00gltest.rpy:170
old "Continue, Show this warning again"
new "استمرار, الرجاء عرض هذا التحذير في المرة الثادمة ايضاً"
# 00gltest.rpy:174
old "Continue, Don't show warning again"
new "استمرار, لا تعرض هذا التحذير مرة اخرى"
# 00gltest.rpy:192
old "Updating DirectX."
new "يتم تحديث DirectX"
# 00gltest.rpy:196
old "DirectX web setup has been started. It may start minimized in the taskbar. Please follow the prompts to install DirectX."
new "يتم الآن تنصيب DirectX, قد يبدأ ذلك بشكل مصغر في شريط المهام. الرجاء اتباع التعليمات لاكمال التنصيب."
# 00gltest.rpy:200
old "{b}Note:{/b} Microsoft's DirectX web setup program will, by default, install the Bing toolbar. If you do not want this toolbar, uncheck the appropriate box."
new "{b}ملاحظة:{/b} مايكروسوفت دايركت أكس يقوم تلقائياً بتنصيب شريط بينق Bing toolbar. إذا لم ترغب بذلك الرجاء القيام بإلغاء تحديد خانة الاختيار"
# 00gltest.rpy:204
old "When setup finishes, please click below to restart this program."
new "حيثن ينتهي التنصيب, الرجاء الضغط ادناه لإعادة تشغيل البرنامج"
# 00gltest.rpy:206
old "Restart"
new "إعادة تشغيل"
# 00gamepad.rpy:32
old "Select Gamepad to Calibrate"
new "Select Gamepad to Calibrate"
# 00gamepad.rpy:35
old "No Gamepads Available"
new "No Gamepads Available"
# 00gamepad.rpy:54
old "Calibrating [name] ([i]/[total])"
new "Calibrating [name] ([i]/[total])"
# 00gamepad.rpy:58
old "Press or move the [control!r] [kind]."
new "Press or move the [control!r] [kind]."
# 00gamepad.rpy:66
old "Skip (A)"
new "Skip (A)"
# 00gamepad.rpy:69
old "Back (B)"
new "Back (B)"
# _errorhandling.rpym:495
old "Open Traceback"
new "قراءة التقرير"
# _errorhandling.rpym:497
old "Opens the traceback.txt file in a text editor."
new "يفتح تقرير الخطأ في برنامج الملفات النصية."
# _errorhandling.rpym:499
old "Copy to Clipboard"
new "Copy to Clipboard"
# _errorhandling.rpym:501
old "Copies the traceback.txt file to the clipboard."
new "Copies the traceback.txt file to the clipboard."
# _errorhandling.rpym:519
old "An exception has occurred."
new "حصل استثناء"
# _errorhandling.rpym:538
old "Rollback"
new "تراجع"
# _errorhandling.rpym:540
old "Attempts a roll back to a prior time, allowing you to save or choose a different choice."
new "يقوم بالتراجع لنقطة سابقة لكي تستطيع اختيار شيء آخر"
# _errorhandling.rpym:543
old "Ignore"
new "تجاهل"
# _errorhandling.rpym:545
old "Ignores the exception, allowing you to continue. This often leads to additional errors."
new "يتجاهل الاستثناء مما يستمح لك بالاستمرار. قد يسبب هذا المزيد من الاخطاء."
# _errorhandling.rpym:548
old "Reload"
new "إعادة المحاولة"
# _errorhandling.rpym:550
old "Reloads the game from disk, saving and restoring game state if possible."
new "يعيد تشغيل اللعبة من القرص الصلب, مع محاولة استعمادة آخر نقطة وحفظها عند الإستطاعة."
# _errorhandling.rpym:560
old "Quits the game."
new "يخرج من اللعبة."
# _errorhandling.rpym:582
old "Parsing the script failed."
new "حصل خطأ أثناء تشغيل النص."
# _errorhandling.rpym:606
old "Open Parse Errors"
new "يفتح قائمة اخطاء التشغيل."
# _errorhandling.rpym:608
old "Opens the errors.txt file in a text editor."
new "يفتح ملف errors.txt في برنامج الملفات النصية"
# _errorhandling.rpym:612
old "Copies the errors.txt file to the clipboard."
new "Copies the errors.txt file to the clipboard."
old "## The init offset statement causes the init code in this file to run before init code in any other file."
new "## The init offset statement causes the init code in this file to run before init code in any other file."
# gui.rpy:9
old "## Calling gui.init resets the styles to sensible default values, and sets the width and height of the game."
new "## Calling gui.init resets the styles to sensible default values, and sets the width and height of the game."
# gui.rpy:21
old "## Colors"
new "## Colors"
# gui.rpy:23
old "## The colors of text in the interface."
new "## The colors of text in the interface."
# gui.rpy:25
old "## An accent color used throughout the interface to label and highlight text."
new "## An accent color used throughout the interface to label and highlight text."
# gui.rpy:29
old "## The color used for a text button when it is neither selected nor hovered."
new "## The color used for a text button when it is neither selected nor hovered."
# gui.rpy:32
old "## The small color is used for small text, which needs to be brighter/darker to achieve the same effect."
new "## The small color is used for small text, which needs to be brighter/darker to achieve the same effect."
# gui.rpy:36
old "## The color that is used for buttons and bars that are hovered."
new "## The color that is used for buttons and bars that are hovered."
# gui.rpy:39
old "## The color used for a text button when it is selected but not focused. A button is selected if it is the current screen or preference value."
new "## The color used for a text button when it is selected but not focused. A button is selected if it is the current screen or preference value."
# gui.rpy:43
old "## The color used for a text button when it cannot be selected."
new "## The color used for a text button when it cannot be selected."
# gui.rpy:46
old "## Colors used for the portions of bars that are not filled in. These are not used directly, but are used when re-generating bar image files."
new "## Colors used for the portions of bars that are not filled in. These are not used directly, but are used when re-generating bar image files."
# gui.rpy:51
old "## The colors used for dialogue and menu choice text."
new "## The colors used for dialogue and menu choice text."
# gui.rpy:56
old "## Fonts and Font Sizes"
new "## Fonts and Font Sizes"
# gui.rpy:58
old "## The font used for in-game text."
new "## The font used for in-game text."
# gui.rpy:61
old "## The font used for character names."
new "## The font used for character names."
# gui.rpy:64
old "## The font used for out-of-game text."
new "## The font used for out-of-game text."
# gui.rpy:67
old "## The size of normal dialogue text."
new "## The size of normal dialogue text."
# gui.rpy:70
old "## The size of character names."
new "## The size of character names."
# gui.rpy:73
old "## The size of text in the game's user interface."
new "## The size of text in the game's user interface."
# gui.rpy:76
old "## The size of labels in the game's user interface."
new "## The size of labels in the game's user interface."
# gui.rpy:79
old "## The size of text on the notify screen."
new "## The size of text on the notify screen."
# gui.rpy:82
old "## The size of the game's title."
new "## The size of the game's title."
# gui.rpy:86
old "## Main and Game Menus"
new "## Main and Game Menus"
# gui.rpy:88
old "## The images used for the main and game menus."
new "## The images used for the main and game menus."
# gui.rpy:92
old "## Should we show the name and version of the game?"
new "## Should we show the name and version of the game?"
# gui.rpy:96
old "## Dialogue"
new "## Dialogue"
# gui.rpy:98
old "## These variables control how dialogue is displayed on the screen one line at a time."
new "## These variables control how dialogue is displayed on the screen one line at a time."
# gui.rpy:101
old "## The height of the textbox containing dialogue."
new "## The height of the textbox containing dialogue."
# gui.rpy:104
old "## The placement of the textbox vertically on the screen. 0.0 is the top, 0.5 is center, and 1.0 is the bottom."
new "## The placement of the textbox vertically on the screen. 0.0 is the top, 0.5 is center, and 1.0 is the bottom."
# gui.rpy:109
old "## The placement of the speaking character's name, relative to the textbox. These can be a whole number of pixels from the left or top, or 0.5 to center."
new "## The placement of the speaking character's name, relative to the textbox. These can be a whole number of pixels from the left or top, or 0.5 to center."
# gui.rpy:114
old "## The horizontal alignment of the character's name. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
new "## The horizontal alignment of the character's name. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
# gui.rpy:118
old "## The width, height, and borders of the box containing the character's name, or None to automatically size it."
new "## The width, height, and borders of the box containing the character's name, or None to automatically size it."
# gui.rpy:123
old "## The borders of the box containing the character's name, in left, top, right, bottom order."
new "## The borders of the box containing the character's name, in left, top, right, bottom order."
# gui.rpy:127
old "## If True, the background of the namebox will be tiled, if False, the background if the namebox will be scaled."
new "## If True, the background of the namebox will be tiled, if False, the background if the namebox will be scaled."
# gui.rpy:132
old "## The placement of dialogue relative to the textbox. These can be a whole number of pixels relative to the left or top side of the textbox, or 0.5 to center."
new "## The placement of dialogue relative to the textbox. These can be a whole number of pixels relative to the left or top side of the textbox, or 0.5 to center."
# gui.rpy:138
old "## The maximum width of dialogue text, in pixels."
new "## The maximum width of dialogue text, in pixels."
# gui.rpy:141
old "## The horizontal alignment of the dialogue text. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
new "## The horizontal alignment of the dialogue text. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
# gui.rpy:146
old "## Buttons"
new "## Buttons"
# gui.rpy:148
old "## These variables, along with the image files in gui/button, control aspects of how buttons are displayed."
new "## These variables, along with the image files in gui/button, control aspects of how buttons are displayed."
# gui.rpy:151
old "## The width and height of a button, in pixels. If None, Ren'Py computes a size."
new "## The width and height of a button, in pixels. If None, Ren'Py computes a size."
# gui.rpy:155
old "## The borders on each side of the button, in left, top, right, bottom order."
new "## The borders on each side of the button, in left, top, right, bottom order."
# gui.rpy:158
old "## If True, the background image will be tiled. If False, the background image will be linearly scaled."
new "## If True, the background image will be tiled. If False, the background image will be linearly scaled."
# gui.rpy:162
old "## The font used by the button."
new "## The font used by the button."
# gui.rpy:165
old "## The size of the text used by the button."
new "## The size of the text used by the button."
# gui.rpy:179
old "## These variables override settings for different kinds of buttons. Please see the gui documentation for the kinds of buttons available, and what each is used for."
new "## These variables override settings for different kinds of buttons. Please see the gui documentation for the kinds of buttons available, and what each is used for."
# gui.rpy:183
old "## These customizations are used by the default interface:"
new "## These customizations are used by the default interface:"
# gui.rpy:198
old "## You can also add your own customizations, by adding properly-named variables. For example, you can uncomment the following line to set the width of a navigation button."
new "## You can also add your own customizations, by adding properly-named variables. For example, you can uncomment the following line to set the width of a navigation button."
# gui.rpy:205
old "## Choice Buttons"
new "## Choice Buttons"
# gui.rpy:207
old "## Choice buttons are used in the in-game menus."
new "## Choice buttons are used in the in-game menus."
# gui.rpy:220
old "## File Slot Buttons"
new "## File Slot Buttons"
# gui.rpy:222
old "## A file slot button is a special kind of button. It contains a thumbnail image, and text describing the contents of the save slot. A save slot uses image files in gui/button, like the other kinds of buttons."
new "## A file slot button is a special kind of button. It contains a thumbnail image, and text describing the contents of the save slot. A save slot uses image files in gui/button, like the other kinds of buttons."
# gui.rpy:226
old "## The save slot button."
new "## The save slot button."
# gui.rpy:234
old "## The width and height of thumbnails used by the save slots."
new "## The width and height of thumbnails used by the save slots."
# gui.rpy:238
old "## The number of columns and rows in the grid of save slots."
new "## The number of columns and rows in the grid of save slots."
# gui.rpy:243
old "## Positioning and Spacing"
new "## Positioning and Spacing"
# gui.rpy:245
old "## These variables control the positioning and spacing of various user interface elements."
new "## These variables control the positioning and spacing of various user interface elements."
# gui.rpy:248
old "## The position of the left side of the navigation buttons, relative to the left side of the screen."
new "## The position of the left side of the navigation buttons, relative to the left side of the screen."
# gui.rpy:252
old "## The vertical position of the skip indicator."
new "## The vertical position of the skip indicator."
# gui.rpy:255
old "## The vertical position of the notify screen."
new "## The vertical position of the notify screen."
# gui.rpy:258
old "## The spacing between menu choices."
new "## The spacing between menu choices."
# gui.rpy:261
old "## Buttons in the navigation section of the main and game menus."
new "## Buttons in the navigation section of the main and game menus."
# gui.rpy:264
old "## Controls the amount of spacing between preferences."
new "## Controls the amount of spacing between preferences."
# gui.rpy:267
old "## Controls the amount of spacing between preference buttons."
new "## Controls the amount of spacing between preference buttons."
# gui.rpy:270
old "## The spacing between file page buttons."
new "## The spacing between file page buttons."
# gui.rpy:273
old "## The spacing between file slots."
new "## The spacing between file slots."
# gui.rpy:277
old "## Frames"
new "## Frames"
# gui.rpy:279
old "## These variables control the look of frames that can contain user interface components when an overlay or window is not present."
new "## These variables control the look of frames that can contain user interface components when an overlay or window is not present."
# gui.rpy:282
old "## Generic frames that are introduced by player code."
new "## Generic frames that are introduced by player code."
# gui.rpy:285
old "## The frame that is used as part of the confirm screen."
new "## The frame that is used as part of the confirm screen."
# gui.rpy:288
old "## The frame that is used as part of the skip screen."
new "## The frame that is used as part of the skip screen."
# gui.rpy:291
old "## The frame that is used as part of the notify screen."
new "## The frame that is used as part of the notify screen."
# gui.rpy:294
old "## Should frame backgrounds be tiled?"
new "## Should frame backgrounds be tiled?"
# gui.rpy:298
old "## Bars, Scrollbars, and Sliders"
new "## Bars, Scrollbars, and Sliders"
# gui.rpy:300
old "## These control the look and size of bars, scrollbars, and sliders."
new "## These control the look and size of bars, scrollbars, and sliders."
# gui.rpy:302
old "## The default GUI only uses sliders and vertical scrollbars. All of the other bars are only used in creator-written code."
new "## The default GUI only uses sliders and vertical scrollbars. All of the other bars are only used in creator-written code."
# gui.rpy:305
old "## The height of horizontal bars, scrollbars, and sliders. The width of vertical bars, scrollbars, and sliders."
new "## The height of horizontal bars, scrollbars, and sliders. The width of vertical bars, scrollbars, and sliders."
# gui.rpy:311
old "## True if bar images should be tiled. False if they should be linearly scaled."
new "## True if bar images should be tiled. False if they should be linearly scaled."
# gui.rpy:316
old "## Horizontal borders."
new "## Horizontal borders."
# gui.rpy:321
old "## Vertical borders."
new "## Vertical borders."
# gui.rpy:326
old "## What to do with unscrollable scrollbars in the gui. \"hide\" hides them, while None shows them."
new "## What to do with unscrollable scrollbars in the gui. \"hide\" hides them, while None shows them."
# gui.rpy:331
old "## History"
new "## History"
# gui.rpy:333
old "## The history screen displays dialogue that the player has already dismissed."
new "## The history screen displays dialogue that the player has already dismissed."
# gui.rpy:335
old "## The number of blocks of dialogue history Ren'Py will keep."
new "## The number of blocks of dialogue history Ren'Py will keep."
# gui.rpy:338
old "## The height of a history screen entry, or None to make the height variable at the cost of performance."
new "## The height of a history screen entry, or None to make the height variable at the cost of performance."
# gui.rpy:342
old "## The position, width, and alignment of the label giving the name of the speaking character."
new "## The position, width, and alignment of the label giving the name of the speaking character."
# gui.rpy:349
old "## The position, width, and alignment of the dialogue text."
new "## The position, width, and alignment of the dialogue text."
# gui.rpy:356
old "## NVL-Mode"
new "## NVL-Mode"
# gui.rpy:358
old "## The NVL-mode screen displays the dialogue spoken by NVL-mode characters."
new "## The NVL-mode screen displays the dialogue spoken by NVL-mode characters."
# gui.rpy:360
old "## The borders of the background of the NVL-mode background window."
new "## The borders of the background of the NVL-mode background window."
# gui.rpy:363
old "## The height of an NVL-mode entry. Set this to None to have the entries dynamically adjust height."
new "## The height of an NVL-mode entry. Set this to None to have the entries dynamically adjust height."
# gui.rpy:367
old "## The spacing between NVL-mode entries when gui.nvl_height is None, and between NVL-mode entries and an NVL-mode menu."
new "## The spacing between NVL-mode entries when gui.nvl_height is None, and between NVL-mode entries and an NVL-mode menu."
# gui.rpy:384
old "## The position, width, and alignment of nvl_thought text (the text said by the nvl_narrator character.)"
new "## The position, width, and alignment of nvl_thought text (the text said by the nvl_narrator character.)"
# gui.rpy:391
old "## The position of nvl menu_buttons."
new "## The position of nvl menu_buttons."
# gui.rpy:403
old "## This increases the size of the quick buttons to make them easier to touch on tablets and phones."
new "## This increases the size of the quick buttons to make them easier to touch on tablets and phones."
# gui.rpy:409
old "## This changes the size and spacing of various GUI elements to ensure they are easily visible on phones."
new "## This changes the size and spacing of various GUI elements to ensure they are easily visible on phones."
# gui.rpy:413
old "## Font sizes."
new "## Font sizes."
# gui.rpy:421
old "## Adjust the location of the textbox."
new "## Adjust the location of the textbox."
# gui.rpy:427
old "## Change the size and spacing of items in the game menu."
new "## Change the size and spacing of items in the game menu."
old "## This file contains options that can be changed to customize your game."
new "## This file contains options that can be changed to customize your game."
# options.rpy:4
old "## Lines beginning with two '#' marks are comments, and you shouldn't uncomment them. Lines beginning with a single '#' mark are commented-out code, and you may want to uncomment them when appropriate."
new "## Lines beginning with two '#' marks are comments, and you shouldn't uncomment them. Lines beginning with a single '#' mark are commented-out code, and you may want to uncomment them when appropriate."
# options.rpy:10
old "## Basics"
new "## Basics"
# options.rpy:12
old "## A human-readable name of the game. This is used to set the default window title, and shows up in the interface and error reports."
new "## A human-readable name of the game. This is used to set the default window title, and shows up in the interface and error reports."
# options.rpy:15
old "## The _() surrounding the string marks it as eligible for translation."
new "## The _() surrounding the string marks it as eligible for translation."
# options.rpy:17
old "Ren'Py 7 Default GUI"
new "Ren'Py 7 Default GUI"
# options.rpy:20
old "## Determines if the title given above is shown on the main menu screen. Set this to False to hide the title."
new "## Determines if the title given above is shown on the main menu screen. Set this to False to hide the title."
# options.rpy:26
old "## The version of the game."
new "## The version of the game."
# options.rpy:31
old "## Text that is placed on the game's about screen. To insert a blank line between paragraphs, write \\n\\n."
new "## Text that is placed on the game's about screen. To insert a blank line between paragraphs, write \\n\\n."
# options.rpy:37
old "## A short name for the game used for executables and directories in the built distribution. This must be ASCII-only, and must not contain spaces, colons, or semicolons."
new "## A short name for the game used for executables and directories in the built distribution. This must be ASCII-only, and must not contain spaces, colons, or semicolons."
# options.rpy:44
old "## Sounds and music"
new "## Sounds and music"
# options.rpy:46
old "## These three variables control which mixers are shown to the player by default. Setting one of these to False will hide the appropriate mixer."
new "## These three variables control which mixers are shown to the player by default. Setting one of these to False will hide the appropriate mixer."
# options.rpy:55
old "## To allow the user to play a test sound on the sound or voice channel, uncomment a line below and use it to set a sample sound to play."
new "## To allow the user to play a test sound on the sound or voice channel, uncomment a line below and use it to set a sample sound to play."
# options.rpy:62
old "## Uncomment the following line to set an audio file that will be played while the player is at the main menu. This file will continue playing into the game, until it is stopped or another file is played."
new "## Uncomment the following line to set an audio file that will be played while the player is at the main menu. This file will continue playing into the game, until it is stopped or another file is played."
# options.rpy:69
old "## Transitions"
new "## Transitions"
# options.rpy:71
old "## These variables set transitions that are used when certain events occur. Each variable should be set to a transition, or None to indicate that no transition should be used."
new "## These variables set transitions that are used when certain events occur. Each variable should be set to a transition, or None to indicate that no transition should be used."
# options.rpy:75
old "## Entering or exiting the game menu."
new "## Entering or exiting the game menu."
# options.rpy:81
old "## A transition that is used after a game has been loaded."
new "## A transition that is used after a game has been loaded."
# options.rpy:86
old "## Used when entering the main menu after the game has ended."
new "## Used when entering the main menu after the game has ended."
# options.rpy:91
old "## A variable to set the transition used when the game starts does not exist. Instead, use a with statement after showing the initial scene."
new "## A variable to set the transition used when the game starts does not exist. Instead, use a with statement after showing the initial scene."
# options.rpy:96
old "## Window management"
new "## Window management"
# options.rpy:98
old "## This controls when the dialogue window is displayed. If \"show\", it is always displayed. If \"hide\", it is only displayed when dialogue is present. If \"auto\", the window is hidden before scene statements and shown again once dialogue is displayed."
new "## This controls when the dialogue window is displayed. If \"show\", it is always displayed. If \"hide\", it is only displayed when dialogue is present. If \"auto\", the window is hidden before scene statements and shown again once dialogue is displayed."
# options.rpy:103
old "## After the game has started, this can be changed with the \"window show\", \"window hide\", and \"window auto\" statements."
new "## After the game has started, this can be changed with the \"window show\", \"window hide\", and \"window auto\" statements."
# options.rpy:109
old "## Transitions used to show and hide the dialogue window"
new "## Transitions used to show and hide the dialogue window"
# options.rpy:115
old "## Preference defaults"
new "## Preference defaults"
# options.rpy:117
old "## Controls the default text speed. The default, 0, is infinite, while any other number is the number of characters per second to type out."
new "## Controls the default text speed. The default, 0, is infinite, while any other number is the number of characters per second to type out."
# options.rpy:123
old "## The default auto-forward delay. Larger numbers lead to longer waits, with 0 to 30 being the valid range."
new "## The default auto-forward delay. Larger numbers lead to longer waits, with 0 to 30 being the valid range."
# options.rpy:129
old "## Save directory"
new "## Save directory"
# options.rpy:131
old "## Controls the platform-specific place Ren'Py will place the save files for this game. The save files will be placed in:"
new "## Controls the platform-specific place Ren'Py will place the save files for this game. The save files will be placed in:"
# options.rpy:134
old "## Windows: %APPDATA\\RenPy\\<config.save_directory>"
new "## Windows: %APPDATA\\RenPy\\<config.save_directory>"
# options.rpy:136
old "## Macintosh: $HOME/Library/RenPy/<config.save_directory>"
new "## Macintosh: $HOME/Library/RenPy/<config.save_directory>"
# options.rpy:138
old "## Linux: $HOME/.renpy/<config.save_directory>"
new "## Linux: $HOME/.renpy/<config.save_directory>"
# options.rpy:140
old "## This generally should not be changed, and if it is, should always be a literal string, not an expression."
new "## This generally should not be changed, and if it is, should always be a literal string, not an expression."
# options.rpy:146
old "## Icon ########################################################################'"
new "## Icon ########################################################################'"
# options.rpy:148
old "## The icon displayed on the taskbar or dock."
new "## The icon displayed on the taskbar or dock."
# options.rpy:153
old "## Build configuration"
new "## Build configuration"
# options.rpy:155
old "## This section controls how Ren'Py turns your project into distribution files."
new "## This section controls how Ren'Py turns your project into distribution files."
# options.rpy:160
old "## The following functions take file patterns. File patterns are case- insensitive, and matched against the path relative to the base directory, with and without a leading /. If multiple patterns match, the first is used."
new "## The following functions take file patterns. File patterns are case- insensitive, and matched against the path relative to the base directory, with and without a leading /. If multiple patterns match, the first is used."
# options.rpy:165
old "## In a pattern:"
new "## In a pattern:"
# options.rpy:167
old "## / is the directory separator."
new "## / is the directory separator."
# options.rpy:169
old "## * matches all characters, except the directory separator."
new "## * matches all characters, except the directory separator."
# options.rpy:171
old "## ** matches all characters, including the directory separator."
new "## ** matches all characters, including the directory separator."
# options.rpy:173
old "## For example, \"*.txt\" matches txt files in the base directory, \"game/**.ogg\" matches ogg files in the game directory or any of its subdirectories, and \"**.psd\" matches psd files anywhere in the project."
new "## For example, \"*.txt\" matches txt files in the base directory, \"game/**.ogg\" matches ogg files in the game directory or any of its subdirectories, and \"**.psd\" matches psd files anywhere in the project."
# options.rpy:177
old "## Classify files as None to exclude them from the built distributions."
new "## Classify files as None to exclude them from the built distributions."
# options.rpy:185
old "## To archive files, classify them as 'archive'."
new "## To archive files, classify them as 'archive'."
# options.rpy:190
old "## Files matching documentation patterns are duplicated in a mac app build, so they appear in both the app and the zip file."
new "## Files matching documentation patterns are duplicated in a mac app build, so they appear in both the app and the zip file."
# options.rpy:196
old "## A Google Play license key is required to download expansion files and perform in-app purchases. It can be found on the \"Services & APIs\" page of the Google Play developer console."
new "## A Google Play license key is required to download expansion files and perform in-app purchases. It can be found on the \"Services & APIs\" page of the Google Play developer console."
# options.rpy:203
old "## The username and project name associated with an itch.io project, separated by a slash."
new "## The username and project name associated with an itch.io project, separated by a slash."
old "## The say screen is used to display dialogue to the player. It takes two parameters, who and what, which are the name of the speaking character and the text to be displayed, respectively. (The who parameter can be None if no name is given.)"
new "## The say screen is used to display dialogue to the player. It takes two parameters, who and what, which are the name of the speaking character and the text to be displayed, respectively. (The who parameter can be None if no name is given.)"
# screens.rpy:98
old "## This screen must create a text displayable with id \"what\", as Ren'Py uses this to manage text display. It can also create displayables with id \"who\" and id \"window\" to apply style properties."
new "## This screen must create a text displayable with id \"what\", as Ren'Py uses this to manage text display. It can also create displayables with id \"who\" and id \"window\" to apply style properties."
# screens.rpy:102
old "## https://www.renpy.org/doc/html/screen_special.html#say"
new "## https://www.renpy.org/doc/html/screen_special.html#say"
# screens.rpy:169
old "## Input screen"
new "## Input screen"
# screens.rpy:171
old "## This screen is used to display renpy.input. The prompt parameter is used to pass a text prompt in."
new "## This screen is used to display renpy.input. The prompt parameter is used to pass a text prompt in."
# screens.rpy:174
old "## This screen must create an input displayable with id \"input\" to accept the various input parameters."
new "## This screen must create an input displayable with id \"input\" to accept the various input parameters."
# screens.rpy:177
old "## http://www.renpy.org/doc/html/screen_special.html#input"
new "## http://www.renpy.org/doc/html/screen_special.html#input"
# screens.rpy:205
old "## Choice screen"
new "## Choice screen"
# screens.rpy:207
old "## This screen is used to display the in-game choices presented by the menu statement. The one parameter, items, is a list of objects, each with caption and action fields."
new "## This screen is used to display the in-game choices presented by the menu statement. The one parameter, items, is a list of objects, each with caption and action fields."
# screens.rpy:211
old "## http://www.renpy.org/doc/html/screen_special.html#choice"
new "## http://www.renpy.org/doc/html/screen_special.html#choice"
# screens.rpy:221
old "## When this is true, menu captions will be spoken by the narrator. When false, menu captions will be displayed as empty buttons."
new "## When this is true, menu captions will be spoken by the narrator. When false, menu captions will be displayed as empty buttons."
# screens.rpy:244
old "## Quick Menu screen"
new "## Quick Menu screen"
# screens.rpy:246
old "## The quick menu is displayed in-game to provide easy access to the out-of-game menus."
new "## The quick menu is displayed in-game to provide easy access to the out-of-game menus."
# screens.rpy:261
old "Back"
new "عودة"
# screens.rpy:262
old "History"
new "History"
# screens.rpy:263
old "Skip"
new "تخطي"
# screens.rpy:264
old "Auto"
new "تلقائي"
# screens.rpy:265
old "Save"
new "حفظ"
# screens.rpy:266
old "Q.Save"
new "حفظ سريع"
# screens.rpy:267
old "Q.Load"
new "استرجاع سريع"
# screens.rpy:268
old "Prefs"
new "خيارات"
# screens.rpy:271
old "## This code ensures that the quick_menu screen is displayed in-game, whenever the player has not explicitly hidden the interface."
new "## This code ensures that the quick_menu screen is displayed in-game, whenever the player has not explicitly hidden the interface."
# screens.rpy:291
old "## Navigation screen"
new "## Navigation screen"
# screens.rpy:293
old "## This screen is included in the main and game menus, and provides navigation to other menus, and to start the game."
new "## This screen is included in the main and game menus, and provides navigation to other menus, and to start the game."
# screens.rpy:308
old "Start"
new "Start"
# screens.rpy:316
old "Load"
new "Load"
# screens.rpy:318
old "Preferences"
new "خيارات"
# screens.rpy:322
old "End Replay"
new "End Replay"
# screens.rpy:326
old "Main Menu"
new "القائمة الرئيسية"
# screens.rpy:328
old "About"
new "معلومات"
# screens.rpy:332
old "## Help isn't necessary or relevant to mobile devices."
new "## Help isn't necessary or relevant to mobile devices."
# screens.rpy:333
old "Help"
new "مساعدة"
# screens.rpy:335
old "## The quit button is banned on iOS and unnecessary on Android."
new "## The quit button is banned on iOS and unnecessary on Android."
# screens.rpy:336
old "Quit"
new "خروج"
# screens.rpy:350
old "## Main Menu screen"
new "## Main Menu screen"
# screens.rpy:352
old "## Used to display the main menu when Ren'Py starts."
new "## Used to display the main menu when Ren'Py starts."
# screens.rpy:354
old "## http://www.renpy.org/doc/html/screen_special.html#main-menu"
new "## http://www.renpy.org/doc/html/screen_special.html#main-menu"
# screens.rpy:369
old "## The use statement includes another screen inside this one. The actual contents of the main menu are in the navigation screen."
new "## The use statement includes another screen inside this one. The actual contents of the main menu are in the navigation screen."
# screens.rpy:413
old "## Game Menu screen"
new "## Game Menu screen"
# screens.rpy:415
old "## This lays out the basic common structure of a game menu screen. It's called with the screen title, and displays the background, title, and navigation."
new "## This lays out the basic common structure of a game menu screen. It's called with the screen title, and displays the background, title, and navigation."
# screens.rpy:418
old "## The scroll parameter can be None, or one of \"viewport\" or \"vpgrid\". When this screen is intended to be used with one or more children, which are transcluded (placed) inside it."
new "## The scroll parameter can be None, or one of \"viewport\" or \"vpgrid\". When this screen is intended to be used with one or more children, which are transcluded (placed) inside it."
# screens.rpy:476
old "Return"
new "عودة"
# screens.rpy:539
old "## About screen"
new "## About screen"
# screens.rpy:541
old "## This screen gives credit and copyright information about the game and Ren'Py."
new "## This screen gives credit and copyright information about the game and Ren'Py."
# screens.rpy:544
old "## There's nothing special about this screen, and hence it also serves as an example of how to make a custom screen."
new "## There's nothing special about this screen, and hence it also serves as an example of how to make a custom screen."
# screens.rpy:551
old "## This use statement includes the game_menu screen inside this one. The vbox child is then included inside the viewport inside the game_menu screen."
new "## This use statement includes the game_menu screen inside this one. The vbox child is then included inside the viewport inside the game_menu screen."
# screens.rpy:561
old "Version [config.version!t]\n"
new "Version [config.version!t]\n"
# screens.rpy:563
old "## gui.about is usually set in options.rpy."
new "## gui.about is usually set in options.rpy."
# screens.rpy:567
old "Made with {a=https://www.renpy.org/}Ren'Py{/a} [renpy.version_only].\n\n[renpy.license!t]"
new "Made with {a=https://www.renpy.org/}Ren'Py{/a} [renpy.version_only].\n\n[renpy.license!t]"
# screens.rpy:570
old "## This is redefined in options.rpy to add text to the about screen."
new "## This is redefined in options.rpy to add text to the about screen."
# screens.rpy:582
old "## Load and Save screens"
new "## Load and Save screens"
# screens.rpy:584
old "## These screens are responsible for letting the player save the game and load it again. Since they share nearly everything in common, both are implemented in terms of a third screen, file_slots."
new "## These screens are responsible for letting the player save the game and load it again. Since they share nearly everything in common, both are implemented in terms of a third screen, file_slots."
# screens.rpy:588
old "## https://www.renpy.org/doc/html/screen_special.html#save https://www.renpy.org/doc/html/screen_special.html#load"
new "## https://www.renpy.org/doc/html/screen_special.html#save https://www.renpy.org/doc/html/screen_special.html#load"
# screens.rpy:607
old "Page {}"
new "Page {}"
# screens.rpy:607
old "Automatic saves"
new "Automatic saves"
# screens.rpy:607
old "Quick saves"
new "Quick saves"
# screens.rpy:613
old "## This ensures the input will get the enter event before any of the buttons do."
new "## This ensures the input will get the enter event before any of the buttons do."
# screens.rpy:629
old "## The grid of file slots."
new "## The grid of file slots."
# screens.rpy:649
old "{#file_time}%A, %B %d %Y, %H:%M"
new "{#file_time}%A, %B %d %Y, %H:%M"
# screens.rpy:649
old "empty slot"
new "empty slot"
# screens.rpy:657
old "## Buttons to access other pages."
new "## Buttons to access other pages."
# screens.rpy:666
old "<"
new "<"
# screens.rpy:668
old "{#auto_page}A"
new "{#auto_page}A"
# screens.rpy:670
old "{#quick_page}Q"
new "{#quick_page}Q"
# screens.rpy:676
old ">"
new ">"
# screens.rpy:711
old "## Preferences screen"
new "## Preferences screen"
# screens.rpy:713
old "## The preferences screen allows the player to configure the game to better suit themselves."
new "## The preferences screen allows the player to configure the game to better suit themselves."
# screens.rpy:716
old "## https://www.renpy.org/doc/html/screen_special.html#preferences"
new "## https://www.renpy.org/doc/html/screen_special.html#preferences"
# screens.rpy:738
old "Display"
new "عرض"
# screens.rpy:739
old "Window"
new "نافذة"
# screens.rpy:740
old "Fullscreen"
new "ملء الشاشة"
# screens.rpy:744
old "Rollback Side"
new "Rollback Side"
# screens.rpy:745
old "Disable"
new "Disable"
# screens.rpy:746
old "Left"
new "Left"
# screens.rpy:747
old "Right"
new "Right"
# screens.rpy:752
old "Unseen Text"
new "Unseen Text"
# screens.rpy:753
old "After Choices"
new "بعد الإختيار"
# screens.rpy:754
old "Transitions"
new "التأثيرات البصرية"
# screens.rpy:756
old "## Additional vboxes of type \"radio_pref\" or \"check_pref\" can be added here, to add additional creator-defined preferences."
new "## Additional vboxes of type \"radio_pref\" or \"check_pref\" can be added here, to add additional creator-defined preferences."
# screens.rpy:767
old "Text Speed"
new "سرعة النص"
# screens.rpy:771
old "Auto-Forward Time"
new "وقت التسريع التلقائي"
# screens.rpy:778
old "Music Volume"
new "مستوى الموسيقى"
# screens.rpy:785
old "Sound Volume"
new "مستوى الأصوات"
# screens.rpy:791
old "Test"
new "تجربة"
# screens.rpy:795
old "Voice Volume"
new "مستوى صوت الكلام"
# screens.rpy:806
old "Mute All"
new "Mute All"
# screens.rpy:882
old "## History screen"
new "## History screen"
# screens.rpy:884
old "## This is a screen that displays the dialogue history to the player. While there isn't anything special about this screen, it does have to access the dialogue history stored in _history_list."
new "## This is a screen that displays the dialogue history to the player. While there isn't anything special about this screen, it does have to access the dialogue history stored in _history_list."
# screens.rpy:888
old "## https://www.renpy.org/doc/html/history.html"
new "## https://www.renpy.org/doc/html/history.html"
# screens.rpy:894
old "## Avoid predicting this screen, as it can be very large."
new "## Avoid predicting this screen, as it can be very large."
# screens.rpy:905
old "## This lays things out properly if history_height is None."
new "## This lays things out properly if history_height is None."
# screens.rpy:914
old "## Take the color of the who text from the Character, if set."
new "## Take the color of the who text from the Character, if set."
# screens.rpy:921
old "The dialogue history is empty."
new "The dialogue history is empty."
# screens.rpy:965
old "## Help screen"
new "## Help screen"
# screens.rpy:967
old "## A screen that gives information about key and mouse bindings. It uses other screens (keyboard_help, mouse_help, and gamepad_help) to display the actual help."
new "## A screen that gives information about key and mouse bindings. It uses other screens (keyboard_help, mouse_help, and gamepad_help) to display the actual help."
# screens.rpy:986
old "Keyboard"
new "Keyboard"
# screens.rpy:987
old "Mouse"
new "Mouse"
# screens.rpy:990
old "Gamepad"
new "Gamepad"
# screens.rpy:1003
old "Enter"
new "Enter"
# screens.rpy:1004
old "Advances dialogue and activates the interface."
new "Advances dialogue and activates the interface."
# screens.rpy:1007
old "Space"
new "Space"
# screens.rpy:1008
old "Advances dialogue without selecting choices."
new "Advances dialogue without selecting choices."
# screens.rpy:1011
old "Arrow Keys"
new "Arrow Keys"
# screens.rpy:1012
old "Navigate the interface."
new "Navigate the interface."
# screens.rpy:1015
old "Escape"
new "Escape"
# screens.rpy:1016
old "Accesses the game menu."
new "Accesses the game menu."
# screens.rpy:1019
old "Ctrl"
new "Ctrl"
# screens.rpy:1020
old "Skips dialogue while held down."
new "Skips dialogue while held down."
# screens.rpy:1023
old "Tab"
new "Tab"
# screens.rpy:1024
old "Toggles dialogue skipping."
new "Toggles dialogue skipping."
# screens.rpy:1027
old "Page Up"
new "Page Up"
# screens.rpy:1028
old "Rolls back to earlier dialogue."
new "Rolls back to earlier dialogue."
# screens.rpy:1031
old "Page Down"
new "Page Down"
# screens.rpy:1032
old "Rolls forward to later dialogue."
new "Rolls forward to later dialogue."
# screens.rpy:1036
old "Hides the user interface."
new "Hides the user interface."
# screens.rpy:1040
old "Takes a screenshot."
new "Takes a screenshot."
# screens.rpy:1044
old "Toggles assistive {a=https://www.renpy.org/l/voicing}self-voicing{/a}."
new "Toggles assistive {a=https://www.renpy.org/l/voicing}self-voicing{/a}."
# screens.rpy:1050
old "Left Click"
new "Left Click"
# screens.rpy:1054
old "Middle Click"
new "Middle Click"
# screens.rpy:1058
old "Right Click"
new "Right Click"
# screens.rpy:1062
old "Mouse Wheel Up\nClick Rollback Side"
new "Mouse Wheel Up\nClick Rollback Side"
# screens.rpy:1066
old "Mouse Wheel Down"
new "Mouse Wheel Down"
# screens.rpy:1073
old "Right Trigger\nA/Bottom Button"
new "Right Trigger\nA/Bottom Button"
# screens.rpy:1074
old "Advance dialogue and activates the interface."
new "Advance dialogue and activates the interface."
# screens.rpy:1078
old "Roll back to earlier dialogue."
new "Roll back to earlier dialogue."
# screens.rpy:1081
old "Right Shoulder"
new "Right Shoulder"
# screens.rpy:1082
old "Roll forward to later dialogue."
new "Roll forward to later dialogue."
# screens.rpy:1085
old "D-Pad, Sticks"
new "D-Pad, Sticks"
# screens.rpy:1089
old "Start, Guide"
new "Start, Guide"
# screens.rpy:1090
old "Access the game menu."
new "Access the game menu."
# screens.rpy:1093
old "Y/Top Button"
new "Y/Top Button"
# screens.rpy:1096
old "Calibrate"
new "Calibrate"
# screens.rpy:1124
old "## Additional screens"
new "## Additional screens"
# screens.rpy:1128
old "## Confirm screen"
new "## Confirm screen"
# screens.rpy:1130
old "## The confirm screen is called when Ren'Py wants to ask the player a yes or no question."
new "## The confirm screen is called when Ren'Py wants to ask the player a yes or no question."
# screens.rpy:1133
old "## http://www.renpy.org/doc/html/screen_special.html#confirm"
new "## http://www.renpy.org/doc/html/screen_special.html#confirm"
# screens.rpy:1137
old "## Ensure other screens do not get input while this screen is displayed."
new "## Ensure other screens do not get input while this screen is displayed."
# screens.rpy:1161
old "Yes"
new "نعم"
# screens.rpy:1162
old "No"
new "لا"
# screens.rpy:1164
old "## Right-click and escape answer \"no\"."
new "## Right-click and escape answer \"no\"."
# screens.rpy:1191
old "## Skip indicator screen"
new "## Skip indicator screen"
# screens.rpy:1193
old "## The skip_indicator screen is displayed to indicate that skipping is in progress."
new "## The skip_indicator screen is displayed to indicate that skipping is in progress."
# screens.rpy:1196
old "## https://www.renpy.org/doc/html/screen_special.html#skip-indicator"
new "## https://www.renpy.org/doc/html/screen_special.html#skip-indicator"
# screens.rpy:1208
old "Skipping"
new "Skipping"
# screens.rpy:1215
old "## This transform is used to blink the arrows one after another."
new "## This transform is used to blink the arrows one after another."
# screens.rpy:1247
old "## Notify screen"
new "## Notify screen"
# screens.rpy:1249
old "## The notify screen is used to show the player a message. (For example, when the game is quicksaved or a screenshot has been taken.)"
new "## The notify screen is used to show the player a message. (For example, when the game is quicksaved or a screenshot has been taken.)"
# screens.rpy:1252
old "## https://www.renpy.org/doc/html/screen_special.html#notify-screen"
new "## https://www.renpy.org/doc/html/screen_special.html#notify-screen"
# screens.rpy:1286
old "## NVL screen"
new "## NVL screen"
# screens.rpy:1288
old "## This screen is used for NVL-mode dialogue and menus."
new "## This screen is used for NVL-mode dialogue and menus."
# screens.rpy:1290
old "## http://www.renpy.org/doc/html/screen_special.html#nvl"
new "## http://www.renpy.org/doc/html/screen_special.html#nvl"
# screens.rpy:1301
old "## Displays dialogue in either a vpgrid or the vbox."
new "## Displays dialogue in either a vpgrid or the vbox."
# screens.rpy:1314
old "## Displays the menu, if given. The menu may be displayed incorrectly if config.narrator_menu is set to True, as it is above."
new "## Displays the menu, if given. The menu may be displayed incorrectly if config.narrator_menu is set to True, as it is above."
# screens.rpy:1344
old "## This controls the maximum number of NVL-mode entries that can be displayed at once."
new "## This controls the maximum number of NVL-mode entries that can be displayed at once."
# screens.rpy:1406
old "## Mobile Variants"
new "## Mobile Variants"
# screens.rpy:1413
old "## Since a mouse may not be present, we replace the quick menu with a version that uses fewer and bigger buttons that are easier to touch."
new "## Since a mouse may not be present, we replace the quick menu with a version that uses fewer and bigger buttons that are easier to touch."
new "Oletko varma, että haluat poistaa tämän tallennuksen?"
# 00gui.rpy:229
old "Are you sure you want to overwrite your save?"
new "Oletko varma, että haluat korvata tallennuksen uudella?"
# 00gui.rpy:230
old "Loading will lose unsaved progress.\nAre you sure you want to do this?"
new "Lataamalla tallennuksen menetät tallentamattoman edistyksen.\nOletko varma, että haluat tehdä näin?"
# 00gui.rpy:231
old "Are you sure you want to quit?"
new "Haluatko varmasti lopettaa?"
# 00gui.rpy:232
old "Are you sure you want to return to the main menu?\nThis will lose unsaved progress."
new "Haluatko varmasti palata päävalikkoon?\nMenetät kaikki tallentamattomat tiedot."
# 00gui.rpy:233
old "Are you sure you want to end the replay?"
new "Oletko varma, että haluat lopettaa tämän uusinnan?"
# 00gui.rpy:234
old "Are you sure you want to begin skipping?"
new "Oletko varma, että haluat alkaa dialogin sivuuttamisen?"
# 00gui.rpy:235
old "Are you sure you want to skip to the next choice?"
new "Oletko varma, että haluat siirtyä suoraan seuraavaan valintaan?"
# 00gui.rpy:236
old "Are you sure you want to skip unseen dialogue to the next choice?"
new "Are you sure you want to skip unseen dialogue to the next choice?"
# 00keymap.rpy:250
old "Saved screenshot as %s."
new "Näytönkaappaus tallennettu nimellä %s."
# 00library.rpy:142
old "Self-voicing disabled."
new "Tietokoneen ääninäyttely lopetettu."
# 00library.rpy:143
old "Clipboard voicing enabled. "
new "Leikepöydän ääneen toisto käytössä. "
# 00library.rpy:144
old "Self-voicing enabled. "
new "Ääneen toisto poissa käytöstä."
# 00library.rpy:179
old "Skip Mode"
new "Ylihyppäystila"
# 00library.rpy:262
old "This program contains free software under a number of licenses, including the MIT License and GNU Lesser General Public License. A complete list of software, including links to full source code, can be found {a=https://www.renpy.org/l/license}here{/a}."
new "This program contains free software under a number of licenses, including the MIT License and GNU Lesser General Public License. A complete list of software, including links to full source code, can be found {a=https://www.renpy.org/l/license}here{/a}."
# 00preferences.rpy:422
old "Clipboard voicing enabled. Press 'shift+C' to disable."
new "Leikepöydän ääneen toisto käytössä. Paina 'shift+C' lopettaaksesi."
# 00preferences.rpy:424
old "Self-voicing would say \"[renpy.display.tts.last]\". Press 'alt+shift+V' to disable."
new "Tietokoneen ääninäyttely sanoisi \"[renpy.display.tts.last]\". Paina 'alt+shift+V' lopettaaksesi."
# 00preferences.rpy:426
old "Self-voicing enabled. Press 'v' to disable."
new "Tietokoneen ääninäyttely käytössä. Paina 'v' lopettaaksesi."
# 00iap.rpy:217
old "Contacting App Store\nPlease Wait..."
new "Contacting App Store\nPlease Wait..."
# 00updater.rpy:367
old "The Ren'Py Updater is not supported on mobile devices."
new "Mobiililaitteet eivät tue Ren'Py Updater -toimintoa."
# 00updater.rpy:486
old "An error is being simulated."
new "Simuloidaan havaittua ongelmaa."
# 00updater.rpy:662
old "Either this project does not support updating, or the update status file was deleted."
new "Tämä projekti ei tue päivittämistä tai päivityksen statustiedosto poistettiin."
# 00updater.rpy:676
old "This account does not have permission to perform an update."
new "Tällä käyttäjällä ei ole oikeutta päivityksen suorittamiseen."
# 00updater.rpy:679
old "This account does not have permission to write the update log."
new "Tällä käyttäjällä ei ole oikeutta kirjoittaa dataa päivityslokiin."
# 00updater.rpy:704
old "Could not verify update signature."
new "Päivityksen allekirjoitusta ei voitu vahvistaa."
# 00updater.rpy:975
old "The update file was not downloaded."
new "Päivitystiedostoa ei ladattu."
# 00updater.rpy:993
old "The update file does not have the correct digest - it may have been corrupted."
new "Päivitystiedosto ei sisällä oikeaa tiivistelmää - se on saattanut korruptoitua."
# 00updater.rpy:1049
old "While unpacking {}, unknown type {}."
new "Purettaessa {}, tuntematon tyyppi {}."
# 00updater.rpy:1393
old "Updater"
new "Päivittäjä"
# 00updater.rpy:1404
old "This program is up to date."
new "Käytät jo uuinta versiota."
# 00updater.rpy:1406
old "[u.version] is available. Do you want to install it?"
new "[u.version] on saatavilla. Haluatko asentaa sen?"
# 00updater.rpy:1408
old "Preparing to download the updates."
new "Valmistellaan päivitysten lataamista."
# 00updater.rpy:1410
old "Downloading the updates."
new "Ladataan päivityksiä."
# 00updater.rpy:1412
old "Unpacking the updates."
new "Puretaan päivityksiä."
# 00updater.rpy:1416
old "The updates have been installed. The program will restart."
new "Päivitykset on asennettu. Ohjelma käynnistyy nyt uudelleen."
old "Changes will take effect the next time this program is run."
new "Muutokset tulevat voimaan, kun käynnistät ohjelman uudelleen."
# 00gltest.rpy:141
old "Performance Warning"
new "Suorituskyvyn varoitus"
# 00gltest.rpy:146
old "This computer is using software rendering."
new "Tietokone käyttää software-renderöintiä."
# 00gltest.rpy:148
old "This computer is not using shaders."
new "Tietokone ei käytä varjostuksia."
# 00gltest.rpy:150
old "This computer is displaying graphics slowly."
new "Tietokone näyttää grafiikkaa hitaasti."
# 00gltest.rpy:152
old "This computer has a problem displaying graphics: [problem]."
new "Tietokoneella on ongelmia grafiikan näyttämisessä: [problem]."
# 00gltest.rpy:157
old "Its graphics drivers may be out of date or not operating correctly. This can lead to slow or incorrect graphics display. Updating DirectX could fix this problem."
new "Sen grafiikka-ajurit voivat olla vanhentuneita tai ne saattavat toimia väärin. Tämä voi johtaa hitaaseen tai väärään grafiikan esittämiseen. DirectX:n päivittäminen saattaa korjata ongelman."
# 00gltest.rpy:159
old "Its graphics drivers may be out of date or not operating correctly. This can lead to slow or incorrect graphics display."
new "Sen grafiikka-ajurit voivat olla vanhentuneita tai ne saattavat toimia väärin. Tämä voi johtaa hitaaseen tai väärään grafiikan esittämiseen."
# 00gltest.rpy:164
old "Update DirectX"
new "Päivitä DirectX"
# 00gltest.rpy:170
old "Continue, Show this warning again"
new "Jatka, näytä tämä varoitus uudelleen"
# 00gltest.rpy:174
old "Continue, Don't show warning again"
new "Jatka, älä näytä tätä varoitusta enää uudelleen"
# 00gltest.rpy:192
old "Updating DirectX."
new "Päivitetään DirectX:ää."
# 00gltest.rpy:196
old "DirectX web setup has been started. It may start minimized in the taskbar. Please follow the prompts to install DirectX."
new "DirectX:n verkkoasennus on alkanut. Se voi olla aluksi minimisoituna työkalupalkilla. Seuraa ohjeita asentaaksesi DirectX:n."
# 00gltest.rpy:200
old "{b}Note:{/b} Microsoft's DirectX web setup program will, by default, install the Bing toolbar. If you do not want this toolbar, uncheck the appropriate box."
new "{b}Huomaa:{/b} Microsoftin DirectX verkkoasennusohjelma asentaa, oletusarvoisesti, Bing-työkalupalkin. Jos et halua tätä työkalupalkkia, poista valinta oikeasta laatikosta."
# 00gltest.rpy:204
old "When setup finishes, please click below to restart this program."
new "Kun asennus on valmis, klikkaa alhaalta käynnistääksesi tämän ohjelman uudelleen."
# 00gltest.rpy:206
old "Restart"
new "Käynnistä uudelleen"
# 00gamepad.rpy:32
old "Select Gamepad to Calibrate"
new "Valitse kalibroitava peliohjain"
# 00gamepad.rpy:35
old "No Gamepads Available"
new "Peliohjaimia ei havaittu"
# 00gamepad.rpy:54
old "Calibrating [name] ([i]/[total])"
new "Kalibroidaan [name] ([i]/[total])"
# 00gamepad.rpy:58
old "Press or move the [control!r] [kind]."
new "Paina tai liikuta [control!r] [kind]."
# 00gamepad.rpy:66
old "Skip (A)"
new "Ohita (A)"
# 00gamepad.rpy:69
old "Back (B)"
new "Takaisin (B)"
# _errorhandling.rpym:495
old "Open Traceback"
new "Avaa virheenjäljitystoiminto"
# _errorhandling.rpym:497
old "Opens the traceback.txt file in a text editor."
new "Avaa traceback.txt-tiedoston tekstieditorissa."
# _errorhandling.rpym:499
old "Copy to Clipboard"
new "Kopioi leikepöydälle"
# _errorhandling.rpym:501
old "Copies the traceback.txt file to the clipboard."
new "Kopioi traceback.txt-tiedoston leikepöydälle."
# _errorhandling.rpym:519
old "An exception has occurred."
new "Odottamaton virhe on tapahtunut."
# _errorhandling.rpym:538
old "Rollback"
new "Palaa edelliseen tilaan"
# _errorhandling.rpym:540
old "Attempts a roll back to a prior time, allowing you to save or choose a different choice."
new "Yrittää palata aikaisempaan tilaan, antaen sinun tallentaa tai tehdä eri valinnan."
# _errorhandling.rpym:543
old "Ignore"
new "Sivuuta"
# _errorhandling.rpym:545
old "Ignores the exception, allowing you to continue. This often leads to additional errors."
new "Sivuuttaa poikkeuksen, antaen sinun jatkaa. Tämä johtaa usein uusiin virheisiin."
# _errorhandling.rpym:548
old "Reload"
new "Lataa uudelleen"
# _errorhandling.rpym:550
old "Reloads the game from disk, saving and restoring game state if possible."
new "Lataa pelin uudelleen muistista, tallentaen ja palauttaen pelitilan jos mahdollista."
# _errorhandling.rpym:560
old "Quits the game."
new "Lopettaa pelin."
# _errorhandling.rpym:582
old "Parsing the script failed."
new "Skriptin jäsennys epäonnistui."
# _errorhandling.rpym:606
old "Open Parse Errors"
new "Avaa jäsennysvirheet"
# _errorhandling.rpym:608
old "Opens the errors.txt file in a text editor."
new "Avaa errors.txt-tiedoston tekstieditorissa."
# _errorhandling.rpym:612
old "Copies the errors.txt file to the clipboard."
old "## The init offset statement causes the init code in this file to run before init code in any other file."
new "## The init offset statement causes the init code in this file to run before init code in any other file."
# gui.rpy:9
old "## Calling gui.init resets the styles to sensible default values, and sets the width and height of the game."
new "## Calling gui.init resets the styles to sensible default values, and sets the width and height of the game."
# gui.rpy:21
old "## Colors"
new "## Colors"
# gui.rpy:23
old "## The colors of text in the interface."
new "## The colors of text in the interface."
# gui.rpy:25
old "## An accent color used throughout the interface to label and highlight text."
new "## An accent color used throughout the interface to label and highlight text."
# gui.rpy:29
old "## The color used for a text button when it is neither selected nor hovered."
new "## The color used for a text button when it is neither selected nor hovered."
# gui.rpy:32
old "## The small color is used for small text, which needs to be brighter/darker to achieve the same effect."
new "## The small color is used for small text, which needs to be brighter/darker to achieve the same effect."
# gui.rpy:36
old "## The color that is used for buttons and bars that are hovered."
new "## The color that is used for buttons and bars that are hovered."
# gui.rpy:39
old "## The color used for a text button when it is selected but not focused. A button is selected if it is the current screen or preference value."
new "## The color used for a text button when it is selected but not focused. A button is selected if it is the current screen or preference value."
# gui.rpy:43
old "## The color used for a text button when it cannot be selected."
new "## The color used for a text button when it cannot be selected."
# gui.rpy:46
old "## Colors used for the portions of bars that are not filled in. These are not used directly, but are used when re-generating bar image files."
new "## Colors used for the portions of bars that are not filled in. These are not used directly, but are used when re-generating bar image files."
# gui.rpy:51
old "## The colors used for dialogue and menu choice text."
new "## The colors used for dialogue and menu choice text."
# gui.rpy:56
old "## Fonts and Font Sizes"
new "## Fonts and Font Sizes"
# gui.rpy:58
old "## The font used for in-game text."
new "## The font used for in-game text."
# gui.rpy:61
old "## The font used for character names."
new "## The font used for character names."
# gui.rpy:64
old "## The font used for out-of-game text."
new "## The font used for out-of-game text."
# gui.rpy:67
old "## The size of normal dialogue text."
new "## The size of normal dialogue text."
# gui.rpy:70
old "## The size of character names."
new "## The size of character names."
# gui.rpy:73
old "## The size of text in the game's user interface."
new "## The size of text in the game's user interface."
# gui.rpy:76
old "## The size of labels in the game's user interface."
new "## The size of labels in the game's user interface."
# gui.rpy:79
old "## The size of text on the notify screen."
new "## The size of text on the notify screen."
# gui.rpy:82
old "## The size of the game's title."
new "## The size of the game's title."
# gui.rpy:86
old "## Main and Game Menus"
new "## Main and Game Menus"
# gui.rpy:88
old "## The images used for the main and game menus."
new "## The images used for the main and game menus."
# gui.rpy:92
old "## Should we show the name and version of the game?"
new "## Should we show the name and version of the game?"
# gui.rpy:96
old "## Dialogue"
new "## Dialogue"
# gui.rpy:98
old "## These variables control how dialogue is displayed on the screen one line at a time."
new "## These variables control how dialogue is displayed on the screen one line at a time."
# gui.rpy:101
old "## The height of the textbox containing dialogue."
new "## The height of the textbox containing dialogue."
# gui.rpy:104
old "## The placement of the textbox vertically on the screen. 0.0 is the top, 0.5 is center, and 1.0 is the bottom."
new "## The placement of the textbox vertically on the screen. 0.0 is the top, 0.5 is center, and 1.0 is the bottom."
# gui.rpy:109
old "## The placement of the speaking character's name, relative to the textbox. These can be a whole number of pixels from the left or top, or 0.5 to center."
new "## The placement of the speaking character's name, relative to the textbox. These can be a whole number of pixels from the left or top, or 0.5 to center."
# gui.rpy:114
old "## The horizontal alignment of the character's name. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
new "## The horizontal alignment of the character's name. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
# gui.rpy:118
old "## The width, height, and borders of the box containing the character's name, or None to automatically size it."
new "## The width, height, and borders of the box containing the character's name, or None to automatically size it."
# gui.rpy:123
old "## The borders of the box containing the character's name, in left, top, right, bottom order."
new "## The borders of the box containing the character's name, in left, top, right, bottom order."
# gui.rpy:127
old "## If True, the background of the namebox will be tiled, if False, the background if the namebox will be scaled."
new "## If True, the background of the namebox will be tiled, if False, the background if the namebox will be scaled."
# gui.rpy:132
old "## The placement of dialogue relative to the textbox. These can be a whole number of pixels relative to the left or top side of the textbox, or 0.5 to center."
new "## The placement of dialogue relative to the textbox. These can be a whole number of pixels relative to the left or top side of the textbox, or 0.5 to center."
# gui.rpy:138
old "## The maximum width of dialogue text, in pixels."
new "## The maximum width of dialogue text, in pixels."
# gui.rpy:141
old "## The horizontal alignment of the dialogue text. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
new "## The horizontal alignment of the dialogue text. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
# gui.rpy:146
old "## Buttons"
new "## Buttons"
# gui.rpy:148
old "## These variables, along with the image files in gui/button, control aspects of how buttons are displayed."
new "## These variables, along with the image files in gui/button, control aspects of how buttons are displayed."
# gui.rpy:151
old "## The width and height of a button, in pixels. If None, Ren'Py computes a size."
new "## The width and height of a button, in pixels. If None, Ren'Py computes a size."
# gui.rpy:155
old "## The borders on each side of the button, in left, top, right, bottom order."
new "## The borders on each side of the button, in left, top, right, bottom order."
# gui.rpy:158
old "## If True, the background image will be tiled. If False, the background image will be linearly scaled."
new "## If True, the background image will be tiled. If False, the background image will be linearly scaled."
# gui.rpy:162
old "## The font used by the button."
new "## The font used by the button."
# gui.rpy:165
old "## The size of the text used by the button."
new "## The size of the text used by the button."
# gui.rpy:179
old "## These variables override settings for different kinds of buttons. Please see the gui documentation for the kinds of buttons available, and what each is used for."
new "## These variables override settings for different kinds of buttons. Please see the gui documentation for the kinds of buttons available, and what each is used for."
# gui.rpy:183
old "## These customizations are used by the default interface:"
new "## These customizations are used by the default interface:"
# gui.rpy:198
old "## You can also add your own customizations, by adding properly-named variables. For example, you can uncomment the following line to set the width of a navigation button."
new "## You can also add your own customizations, by adding properly-named variables. For example, you can uncomment the following line to set the width of a navigation button."
# gui.rpy:205
old "## Choice Buttons"
new "## Choice Buttons"
# gui.rpy:207
old "## Choice buttons are used in the in-game menus."
new "## Choice buttons are used in the in-game menus."
# gui.rpy:220
old "## File Slot Buttons"
new "## File Slot Buttons"
# gui.rpy:222
old "## A file slot button is a special kind of button. It contains a thumbnail image, and text describing the contents of the save slot. A save slot uses image files in gui/button, like the other kinds of buttons."
new "## A file slot button is a special kind of button. It contains a thumbnail image, and text describing the contents of the save slot. A save slot uses image files in gui/button, like the other kinds of buttons."
# gui.rpy:226
old "## The save slot button."
new "## The save slot button."
# gui.rpy:234
old "## The width and height of thumbnails used by the save slots."
new "## The width and height of thumbnails used by the save slots."
# gui.rpy:238
old "## The number of columns and rows in the grid of save slots."
new "## The number of columns and rows in the grid of save slots."
# gui.rpy:243
old "## Positioning and Spacing"
new "## Positioning and Spacing"
# gui.rpy:245
old "## These variables control the positioning and spacing of various user interface elements."
new "## These variables control the positioning and spacing of various user interface elements."
# gui.rpy:248
old "## The position of the left side of the navigation buttons, relative to the left side of the screen."
new "## The position of the left side of the navigation buttons, relative to the left side of the screen."
# gui.rpy:252
old "## The vertical position of the skip indicator."
new "## The vertical position of the skip indicator."
# gui.rpy:255
old "## The vertical position of the notify screen."
new "## The vertical position of the notify screen."
# gui.rpy:258
old "## The spacing between menu choices."
new "## The spacing between menu choices."
# gui.rpy:261
old "## Buttons in the navigation section of the main and game menus."
new "## Buttons in the navigation section of the main and game menus."
# gui.rpy:264
old "## Controls the amount of spacing between preferences."
new "## Controls the amount of spacing between preferences."
# gui.rpy:267
old "## Controls the amount of spacing between preference buttons."
new "## Controls the amount of spacing between preference buttons."
# gui.rpy:270
old "## The spacing between file page buttons."
new "## The spacing between file page buttons."
# gui.rpy:273
old "## The spacing between file slots."
new "## The spacing between file slots."
# gui.rpy:277
old "## Frames"
new "## Frames"
# gui.rpy:279
old "## These variables control the look of frames that can contain user interface components when an overlay or window is not present."
new "## These variables control the look of frames that can contain user interface components when an overlay or window is not present."
# gui.rpy:282
old "## Generic frames that are introduced by player code."
new "## Generic frames that are introduced by player code."
# gui.rpy:285
old "## The frame that is used as part of the confirm screen."
new "## The frame that is used as part of the confirm screen."
# gui.rpy:288
old "## The frame that is used as part of the skip screen."
new "## The frame that is used as part of the skip screen."
# gui.rpy:291
old "## The frame that is used as part of the notify screen."
new "## The frame that is used as part of the notify screen."
# gui.rpy:294
old "## Should frame backgrounds be tiled?"
new "## Should frame backgrounds be tiled?"
# gui.rpy:298
old "## Bars, Scrollbars, and Sliders"
new "## Bars, Scrollbars, and Sliders"
# gui.rpy:300
old "## These control the look and size of bars, scrollbars, and sliders."
new "## These control the look and size of bars, scrollbars, and sliders."
# gui.rpy:302
old "## The default GUI only uses sliders and vertical scrollbars. All of the other bars are only used in creator-written code."
new "## The default GUI only uses sliders and vertical scrollbars. All of the other bars are only used in creator-written code."
# gui.rpy:305
old "## The height of horizontal bars, scrollbars, and sliders. The width of vertical bars, scrollbars, and sliders."
new "## The height of horizontal bars, scrollbars, and sliders. The width of vertical bars, scrollbars, and sliders."
# gui.rpy:311
old "## True if bar images should be tiled. False if they should be linearly scaled."
new "## True if bar images should be tiled. False if they should be linearly scaled."
# gui.rpy:316
old "## Horizontal borders."
new "## Horizontal borders."
# gui.rpy:321
old "## Vertical borders."
new "## Vertical borders."
# gui.rpy:326
old "## What to do with unscrollable scrollbars in the gui. \"hide\" hides them, while None shows them."
new "## What to do with unscrollable scrollbars in the gui. \"hide\" hides them, while None shows them."
# gui.rpy:331
old "## History"
new "## History"
# gui.rpy:333
old "## The history screen displays dialogue that the player has already dismissed."
new "## The history screen displays dialogue that the player has already dismissed."
# gui.rpy:335
old "## The number of blocks of dialogue history Ren'Py will keep."
new "## The number of blocks of dialogue history Ren'Py will keep."
# gui.rpy:338
old "## The height of a history screen entry, or None to make the height variable at the cost of performance."
new "## The height of a history screen entry, or None to make the height variable at the cost of performance."
# gui.rpy:342
old "## The position, width, and alignment of the label giving the name of the speaking character."
new "## The position, width, and alignment of the label giving the name of the speaking character."
# gui.rpy:349
old "## The position, width, and alignment of the dialogue text."
new "## The position, width, and alignment of the dialogue text."
# gui.rpy:356
old "## NVL-Mode"
new "## NVL-Mode"
# gui.rpy:358
old "## The NVL-mode screen displays the dialogue spoken by NVL-mode characters."
new "## The NVL-mode screen displays the dialogue spoken by NVL-mode characters."
# gui.rpy:360
old "## The borders of the background of the NVL-mode background window."
new "## The borders of the background of the NVL-mode background window."
# gui.rpy:363
old "## The height of an NVL-mode entry. Set this to None to have the entries dynamically adjust height."
new "## The height of an NVL-mode entry. Set this to None to have the entries dynamically adjust height."
# gui.rpy:367
old "## The spacing between NVL-mode entries when gui.nvl_height is None, and between NVL-mode entries and an NVL-mode menu."
new "## The spacing between NVL-mode entries when gui.nvl_height is None, and between NVL-mode entries and an NVL-mode menu."
# gui.rpy:384
old "## The position, width, and alignment of nvl_thought text (the text said by the nvl_narrator character.)"
new "## The position, width, and alignment of nvl_thought text (the text said by the nvl_narrator character.)"
# gui.rpy:391
old "## The position of nvl menu_buttons."
new "## The position of nvl menu_buttons."
# gui.rpy:403
old "## This increases the size of the quick buttons to make them easier to touch on tablets and phones."
new "## This increases the size of the quick buttons to make them easier to touch on tablets and phones."
# gui.rpy:409
old "## This changes the size and spacing of various GUI elements to ensure they are easily visible on phones."
new "## This changes the size and spacing of various GUI elements to ensure they are easily visible on phones."
# gui.rpy:413
old "## Font sizes."
new "## Font sizes."
# gui.rpy:421
old "## Adjust the location of the textbox."
new "## Adjust the location of the textbox."
# gui.rpy:427
old "## Change the size and spacing of items in the game menu."
new "## Change the size and spacing of items in the game menu."
old "## This file contains options that can be changed to customize your game."
new "## This file contains options that can be changed to customize your game."
# options.rpy:4
old "## Lines beginning with two '#' marks are comments, and you shouldn't uncomment them. Lines beginning with a single '#' mark are commented-out code, and you may want to uncomment them when appropriate."
new "## Lines beginning with two '#' marks are comments, and you shouldn't uncomment them. Lines beginning with a single '#' mark are commented-out code, and you may want to uncomment them when appropriate."
# options.rpy:10
old "## Basics"
new "## Basics"
# options.rpy:12
old "## A human-readable name of the game. This is used to set the default window title, and shows up in the interface and error reports."
new "## A human-readable name of the game. This is used to set the default window title, and shows up in the interface and error reports."
# options.rpy:15
old "## The _() surrounding the string marks it as eligible for translation."
new "## The _() surrounding the string marks it as eligible for translation."
# options.rpy:17
old "Ren'Py 7 Default GUI"
new "Ren'Py 7 Default GUI"
# options.rpy:20
old "## Determines if the title given above is shown on the main menu screen. Set this to False to hide the title."
new "## Determines if the title given above is shown on the main menu screen. Set this to False to hide the title."
# options.rpy:26
old "## The version of the game."
new "## The version of the game."
# options.rpy:31
old "## Text that is placed on the game's about screen. To insert a blank line between paragraphs, write \\n\\n."
new "## Text that is placed on the game's about screen. To insert a blank line between paragraphs, write \\n\\n."
# options.rpy:37
old "## A short name for the game used for executables and directories in the built distribution. This must be ASCII-only, and must not contain spaces, colons, or semicolons."
new "## A short name for the game used for executables and directories in the built distribution. This must be ASCII-only, and must not contain spaces, colons, or semicolons."
# options.rpy:44
old "## Sounds and music"
new "## Sounds and music"
# options.rpy:46
old "## These three variables control which mixers are shown to the player by default. Setting one of these to False will hide the appropriate mixer."
new "## These three variables control which mixers are shown to the player by default. Setting one of these to False will hide the appropriate mixer."
# options.rpy:55
old "## To allow the user to play a test sound on the sound or voice channel, uncomment a line below and use it to set a sample sound to play."
new "## To allow the user to play a test sound on the sound or voice channel, uncomment a line below and use it to set a sample sound to play."
# options.rpy:62
old "## Uncomment the following line to set an audio file that will be played while the player is at the main menu. This file will continue playing into the game, until it is stopped or another file is played."
new "## Uncomment the following line to set an audio file that will be played while the player is at the main menu. This file will continue playing into the game, until it is stopped or another file is played."
# options.rpy:69
old "## Transitions"
new "## Transitions"
# options.rpy:71
old "## These variables set transitions that are used when certain events occur. Each variable should be set to a transition, or None to indicate that no transition should be used."
new "## These variables set transitions that are used when certain events occur. Each variable should be set to a transition, or None to indicate that no transition should be used."
# options.rpy:75
old "## Entering or exiting the game menu."
new "## Entering or exiting the game menu."
# options.rpy:81
old "## A transition that is used after a game has been loaded."
new "## A transition that is used after a game has been loaded."
# options.rpy:86
old "## Used when entering the main menu after the game has ended."
new "## Used when entering the main menu after the game has ended."
# options.rpy:91
old "## A variable to set the transition used when the game starts does not exist. Instead, use a with statement after showing the initial scene."
new "## A variable to set the transition used when the game starts does not exist. Instead, use a with statement after showing the initial scene."
# options.rpy:96
old "## Window management"
new "## Window management"
# options.rpy:98
old "## This controls when the dialogue window is displayed. If \"show\", it is always displayed. If \"hide\", it is only displayed when dialogue is present. If \"auto\", the window is hidden before scene statements and shown again once dialogue is displayed."
new "## This controls when the dialogue window is displayed. If \"show\", it is always displayed. If \"hide\", it is only displayed when dialogue is present. If \"auto\", the window is hidden before scene statements and shown again once dialogue is displayed."
# options.rpy:103
old "## After the game has started, this can be changed with the \"window show\", \"window hide\", and \"window auto\" statements."
new "## After the game has started, this can be changed with the \"window show\", \"window hide\", and \"window auto\" statements."
# options.rpy:109
old "## Transitions used to show and hide the dialogue window"
new "## Transitions used to show and hide the dialogue window"
# options.rpy:115
old "## Preference defaults"
new "## Preference defaults"
# options.rpy:117
old "## Controls the default text speed. The default, 0, is infinite, while any other number is the number of characters per second to type out."
new "## Controls the default text speed. The default, 0, is infinite, while any other number is the number of characters per second to type out."
# options.rpy:123
old "## The default auto-forward delay. Larger numbers lead to longer waits, with 0 to 30 being the valid range."
new "## The default auto-forward delay. Larger numbers lead to longer waits, with 0 to 30 being the valid range."
# options.rpy:129
old "## Save directory"
new "## Save directory"
# options.rpy:131
old "## Controls the platform-specific place Ren'Py will place the save files for this game. The save files will be placed in:"
new "## Controls the platform-specific place Ren'Py will place the save files for this game. The save files will be placed in:"
# options.rpy:134
old "## Windows: %APPDATA\\RenPy\\<config.save_directory>"
new "## Windows: %APPDATA\\RenPy\\<config.save_directory>"
# options.rpy:136
old "## Macintosh: $HOME/Library/RenPy/<config.save_directory>"
new "## Macintosh: $HOME/Library/RenPy/<config.save_directory>"
# options.rpy:138
old "## Linux: $HOME/.renpy/<config.save_directory>"
new "## Linux: $HOME/.renpy/<config.save_directory>"
# options.rpy:140
old "## This generally should not be changed, and if it is, should always be a literal string, not an expression."
new "## This generally should not be changed, and if it is, should always be a literal string, not an expression."
# options.rpy:146
old "## Icon ########################################################################'"
new "## Icon ########################################################################'"
# options.rpy:148
old "## The icon displayed on the taskbar or dock."
new "## The icon displayed on the taskbar or dock."
# options.rpy:153
old "## Build configuration"
new "## Build configuration"
# options.rpy:155
old "## This section controls how Ren'Py turns your project into distribution files."
new "## This section controls how Ren'Py turns your project into distribution files."
# options.rpy:160
old "## The following functions take file patterns. File patterns are case- insensitive, and matched against the path relative to the base directory, with and without a leading /. If multiple patterns match, the first is used."
new "## The following functions take file patterns. File patterns are case- insensitive, and matched against the path relative to the base directory, with and without a leading /. If multiple patterns match, the first is used."
# options.rpy:165
old "## In a pattern:"
new "## In a pattern:"
# options.rpy:167
old "## / is the directory separator."
new "## / is the directory separator."
# options.rpy:169
old "## * matches all characters, except the directory separator."
new "## * matches all characters, except the directory separator."
# options.rpy:171
old "## ** matches all characters, including the directory separator."
new "## ** matches all characters, including the directory separator."
# options.rpy:173
old "## For example, \"*.txt\" matches txt files in the base directory, \"game/**.ogg\" matches ogg files in the game directory or any of its subdirectories, and \"**.psd\" matches psd files anywhere in the project."
new "## For example, \"*.txt\" matches txt files in the base directory, \"game/**.ogg\" matches ogg files in the game directory or any of its subdirectories, and \"**.psd\" matches psd files anywhere in the project."
# options.rpy:177
old "## Classify files as None to exclude them from the built distributions."
new "## Classify files as None to exclude them from the built distributions."
# options.rpy:185
old "## To archive files, classify them as 'archive'."
new "## To archive files, classify them as 'archive'."
# options.rpy:190
old "## Files matching documentation patterns are duplicated in a mac app build, so they appear in both the app and the zip file."
new "## Files matching documentation patterns are duplicated in a mac app build, so they appear in both the app and the zip file."
# options.rpy:196
old "## A Google Play license key is required to download expansion files and perform in-app purchases. It can be found on the \"Services & APIs\" page of the Google Play developer console."
new "## A Google Play license key is required to download expansion files and perform in-app purchases. It can be found on the \"Services & APIs\" page of the Google Play developer console."
# options.rpy:203
old "## The username and project name associated with an itch.io project, separated by a slash."
new "## The username and project name associated with an itch.io project, separated by a slash."
old "## The say screen is used to display dialogue to the player. It takes two parameters, who and what, which are the name of the speaking character and the text to be displayed, respectively. (The who parameter can be None if no name is given.)"
new "## The say screen is used to display dialogue to the player. It takes two parameters, who and what, which are the name of the speaking character and the text to be displayed, respectively. (The who parameter can be None if no name is given.)"
# screens.rpy:98
old "## This screen must create a text displayable with id \"what\", as Ren'Py uses this to manage text display. It can also create displayables with id \"who\" and id \"window\" to apply style properties."
new "## This screen must create a text displayable with id \"what\", as Ren'Py uses this to manage text display. It can also create displayables with id \"who\" and id \"window\" to apply style properties."
# screens.rpy:102
old "## https://www.renpy.org/doc/html/screen_special.html#say"
new "## https://www.renpy.org/doc/html/screen_special.html#say"
# screens.rpy:169
old "## Input screen"
new "## Input screen"
# screens.rpy:171
old "## This screen is used to display renpy.input. The prompt parameter is used to pass a text prompt in."
new "## This screen is used to display renpy.input. The prompt parameter is used to pass a text prompt in."
# screens.rpy:174
old "## This screen must create an input displayable with id \"input\" to accept the various input parameters."
new "## This screen must create an input displayable with id \"input\" to accept the various input parameters."
# screens.rpy:177
old "## http://www.renpy.org/doc/html/screen_special.html#input"
new "## http://www.renpy.org/doc/html/screen_special.html#input"
# screens.rpy:205
old "## Choice screen"
new "## Choice screen"
# screens.rpy:207
old "## This screen is used to display the in-game choices presented by the menu statement. The one parameter, items, is a list of objects, each with caption and action fields."
new "## This screen is used to display the in-game choices presented by the menu statement. The one parameter, items, is a list of objects, each with caption and action fields."
# screens.rpy:211
old "## http://www.renpy.org/doc/html/screen_special.html#choice"
new "## http://www.renpy.org/doc/html/screen_special.html#choice"
# screens.rpy:221
old "## When this is true, menu captions will be spoken by the narrator. When false, menu captions will be displayed as empty buttons."
new "## When this is true, menu captions will be spoken by the narrator. When false, menu captions will be displayed as empty buttons."
# screens.rpy:244
old "## Quick Menu screen"
new "## Quick Menu screen"
# screens.rpy:246
old "## The quick menu is displayed in-game to provide easy access to the out-of-game menus."
new "## The quick menu is displayed in-game to provide easy access to the out-of-game menus."
# screens.rpy:261
old "Back"
new "Takaisin"
# screens.rpy:262
old "History"
new "History"
# screens.rpy:263
old "Skip"
new "Skip"
# screens.rpy:264
old "Auto"
new "Auto"
# screens.rpy:265
old "Save"
new "Save"
# screens.rpy:266
old "Q.Save"
new "Q.Save"
# screens.rpy:267
old "Q.Load"
new "Q.Load"
# screens.rpy:268
old "Prefs"
new "Prefs"
# screens.rpy:271
old "## This code ensures that the quick_menu screen is displayed in-game, whenever the player has not explicitly hidden the interface."
new "## This code ensures that the quick_menu screen is displayed in-game, whenever the player has not explicitly hidden the interface."
# screens.rpy:291
old "## Navigation screen"
new "## Navigation screen"
# screens.rpy:293
old "## This screen is included in the main and game menus, and provides navigation to other menus, and to start the game."
new "## This screen is included in the main and game menus, and provides navigation to other menus, and to start the game."
# screens.rpy:308
old "Start"
new "Start"
# screens.rpy:316
old "Load"
new "Load"
# screens.rpy:318
old "Preferences"
new "Preferences"
# screens.rpy:322
old "End Replay"
new "End Replay"
# screens.rpy:326
old "Main Menu"
new "Main Menu"
# screens.rpy:328
old "About"
new "Tietoja"
# screens.rpy:332
old "## Help isn't necessary or relevant to mobile devices."
new "## Help isn't necessary or relevant to mobile devices."
# screens.rpy:333
old "Help"
new "Help"
# screens.rpy:335
old "## The quit button is banned on iOS and unnecessary on Android."
new "## The quit button is banned on iOS and unnecessary on Android."
# screens.rpy:336
old "Quit"
new "Poistu"
# screens.rpy:350
old "## Main Menu screen"
new "## Main Menu screen"
# screens.rpy:352
old "## Used to display the main menu when Ren'Py starts."
new "## Used to display the main menu when Ren'Py starts."
# screens.rpy:354
old "## http://www.renpy.org/doc/html/screen_special.html#main-menu"
new "## http://www.renpy.org/doc/html/screen_special.html#main-menu"
# screens.rpy:369
old "## The use statement includes another screen inside this one. The actual contents of the main menu are in the navigation screen."
new "## The use statement includes another screen inside this one. The actual contents of the main menu are in the navigation screen."
# screens.rpy:413
old "## Game Menu screen"
new "## Game Menu screen"
# screens.rpy:415
old "## This lays out the basic common structure of a game menu screen. It's called with the screen title, and displays the background, title, and navigation."
new "## This lays out the basic common structure of a game menu screen. It's called with the screen title, and displays the background, title, and navigation."
# screens.rpy:418
old "## The scroll parameter can be None, or one of \"viewport\" or \"vpgrid\". When this screen is intended to be used with one or more children, which are transcluded (placed) inside it."
new "## The scroll parameter can be None, or one of \"viewport\" or \"vpgrid\". When this screen is intended to be used with one or more children, which are transcluded (placed) inside it."
# screens.rpy:476
old "Return"
new "Palaa"
# screens.rpy:539
old "## About screen"
new "## About screen"
# screens.rpy:541
old "## This screen gives credit and copyright information about the game and Ren'Py."
new "## This screen gives credit and copyright information about the game and Ren'Py."
# screens.rpy:544
old "## There's nothing special about this screen, and hence it also serves as an example of how to make a custom screen."
new "## There's nothing special about this screen, and hence it also serves as an example of how to make a custom screen."
# screens.rpy:551
old "## This use statement includes the game_menu screen inside this one. The vbox child is then included inside the viewport inside the game_menu screen."
new "## This use statement includes the game_menu screen inside this one. The vbox child is then included inside the viewport inside the game_menu screen."
# screens.rpy:561
old "Version [config.version!t]\n"
new "Version [config.version!t]\n"
# screens.rpy:563
old "## gui.about is usually set in options.rpy."
new "## gui.about is usually set in options.rpy."
# screens.rpy:567
old "Made with {a=https://www.renpy.org/}Ren'Py{/a} [renpy.version_only].\n\n[renpy.license!t]"
new "Made with {a=https://www.renpy.org/}Ren'Py{/a} [renpy.version_only].\n\n[renpy.license!t]"
# screens.rpy:570
old "## This is redefined in options.rpy to add text to the about screen."
new "## This is redefined in options.rpy to add text to the about screen."
# screens.rpy:582
old "## Load and Save screens"
new "## Load and Save screens"
# screens.rpy:584
old "## These screens are responsible for letting the player save the game and load it again. Since they share nearly everything in common, both are implemented in terms of a third screen, file_slots."
new "## These screens are responsible for letting the player save the game and load it again. Since they share nearly everything in common, both are implemented in terms of a third screen, file_slots."
# screens.rpy:588
old "## https://www.renpy.org/doc/html/screen_special.html#save https://www.renpy.org/doc/html/screen_special.html#load"
new "## https://www.renpy.org/doc/html/screen_special.html#save https://www.renpy.org/doc/html/screen_special.html#load"
# screens.rpy:607
old "Page {}"
new "Sivu {}"
# screens.rpy:607
old "Automatic saves"
new "Automaattiset tallennukset"
# screens.rpy:607
old "Quick saves"
new "Pikatallennukset"
# screens.rpy:613
old "## This ensures the input will get the enter event before any of the buttons do."
new "## This ensures the input will get the enter event before any of the buttons do."
# screens.rpy:629
old "## The grid of file slots."
new "## The grid of file slots."
# screens.rpy:649
old "{#file_time}%A, %B %d %Y, %H:%M"
new "{#file_time}%A, %B %d %Y, %H:%M"
# screens.rpy:649
old "empty slot"
new "empty slot"
# screens.rpy:657
old "## Buttons to access other pages."
new "## Buttons to access other pages."
# screens.rpy:666
old "<"
new "<"
# screens.rpy:668
old "{#auto_page}A"
new "{#auto_page}A"
# screens.rpy:670
old "{#quick_page}Q"
new "{#quick_page}Q"
# screens.rpy:676
old ">"
new ">"
# screens.rpy:711
old "## Preferences screen"
new "## Preferences screen"
# screens.rpy:713
old "## The preferences screen allows the player to configure the game to better suit themselves."
new "## The preferences screen allows the player to configure the game to better suit themselves."
# screens.rpy:716
old "## https://www.renpy.org/doc/html/screen_special.html#preferences"
new "## https://www.renpy.org/doc/html/screen_special.html#preferences"
# screens.rpy:738
old "Display"
new "Näyttö"
# screens.rpy:739
old "Window"
new "Ikkuna"
# screens.rpy:740
old "Fullscreen"
new "Koko näyttö"
# screens.rpy:744
old "Rollback Side"
new "Rollback Side"
# screens.rpy:745
old "Disable"
new "Poista käytöstä"
# screens.rpy:746
old "Left"
new "Left"
# screens.rpy:747
old "Right"
new "Right"
# screens.rpy:752
old "Unseen Text"
new "Unseen Text"
# screens.rpy:753
old "After Choices"
new "After Choices"
# screens.rpy:754
old "Transitions"
new "Transitions"
# screens.rpy:756
old "## Additional vboxes of type \"radio_pref\" or \"check_pref\" can be added here, to add additional creator-defined preferences."
new "## Additional vboxes of type \"radio_pref\" or \"check_pref\" can be added here, to add additional creator-defined preferences."
# screens.rpy:767
old "Text Speed"
new "Text Speed"
# screens.rpy:771
old "Auto-Forward Time"
new "Auto-Forward Time"
# screens.rpy:778
old "Music Volume"
new "Music Volume"
# screens.rpy:785
old "Sound Volume"
new "Äänenvoimakkuus"
# screens.rpy:791
old "Test"
new "Test"
# screens.rpy:795
old "Voice Volume"
new "Voice Volume"
# screens.rpy:806
old "Mute All"
new "Mute All"
# screens.rpy:882
old "## History screen"
new "## History screen"
# screens.rpy:884
old "## This is a screen that displays the dialogue history to the player. While there isn't anything special about this screen, it does have to access the dialogue history stored in _history_list."
new "## This is a screen that displays the dialogue history to the player. While there isn't anything special about this screen, it does have to access the dialogue history stored in _history_list."
# screens.rpy:888
old "## https://www.renpy.org/doc/html/history.html"
new "## https://www.renpy.org/doc/html/history.html"
# screens.rpy:894
old "## Avoid predicting this screen, as it can be very large."
new "## Avoid predicting this screen, as it can be very large."
# screens.rpy:905
old "## This lays things out properly if history_height is None."
new "## This lays things out properly if history_height is None."
# screens.rpy:914
old "## Take the color of the who text from the Character, if set."
new "## Take the color of the who text from the Character, if set."
# screens.rpy:921
old "The dialogue history is empty."
new "The dialogue history is empty."
# screens.rpy:965
old "## Help screen"
new "## Help screen"
# screens.rpy:967
old "## A screen that gives information about key and mouse bindings. It uses other screens (keyboard_help, mouse_help, and gamepad_help) to display the actual help."
new "## A screen that gives information about key and mouse bindings. It uses other screens (keyboard_help, mouse_help, and gamepad_help) to display the actual help."
# screens.rpy:986
old "Keyboard"
new "Keyboard"
# screens.rpy:987
old "Mouse"
new "Mouse"
# screens.rpy:990
old "Gamepad"
new "Peliohjain"
# screens.rpy:1003
old "Enter"
new "Enter"
# screens.rpy:1004
old "Advances dialogue and activates the interface."
new "Advances dialogue and activates the interface."
# screens.rpy:1007
old "Space"
new "Space"
# screens.rpy:1008
old "Advances dialogue without selecting choices."
new "Advances dialogue without selecting choices."
# screens.rpy:1011
old "Arrow Keys"
new "Arrow Keys"
# screens.rpy:1012
old "Navigate the interface."
new "Navigate the interface."
# screens.rpy:1015
old "Escape"
new "Escape"
# screens.rpy:1016
old "Accesses the game menu."
new "Accesses the game menu."
# screens.rpy:1019
old "Ctrl"
new "Ctrl"
# screens.rpy:1020
old "Skips dialogue while held down."
new "Skips dialogue while held down."
# screens.rpy:1023
old "Tab"
new "Tab"
# screens.rpy:1024
old "Toggles dialogue skipping."
new "Toggles dialogue skipping."
# screens.rpy:1027
old "Page Up"
new "Page Up"
# screens.rpy:1028
old "Rolls back to earlier dialogue."
new "Rolls back to earlier dialogue."
# screens.rpy:1031
old "Page Down"
new "Page Down"
# screens.rpy:1032
old "Rolls forward to later dialogue."
new "Rolls forward to later dialogue."
# screens.rpy:1036
old "Hides the user interface."
new "Hides the user interface."
# screens.rpy:1040
old "Takes a screenshot."
new "Takes a screenshot."
# screens.rpy:1044
old "Toggles assistive {a=https://www.renpy.org/l/voicing}self-voicing{/a}."
new "Toggles assistive {a=https://www.renpy.org/l/voicing}self-voicing{/a}."
# screens.rpy:1050
old "Left Click"
new "Left Click"
# screens.rpy:1054
old "Middle Click"
new "Middle Click"
# screens.rpy:1058
old "Right Click"
new "Right Click"
# screens.rpy:1062
old "Mouse Wheel Up\nClick Rollback Side"
new "Mouse Wheel Up\nClick Rollback Side"
# screens.rpy:1066
old "Mouse Wheel Down"
new "Mouse Wheel Down"
# screens.rpy:1073
old "Right Trigger\nA/Bottom Button"
new "Right Trigger\nA/Bottom Button"
# screens.rpy:1074
old "Advance dialogue and activates the interface."
new "Advance dialogue and activates the interface."
# screens.rpy:1078
old "Roll back to earlier dialogue."
new "Roll back to earlier dialogue."
# screens.rpy:1081
old "Right Shoulder"
new "Right Shoulder"
# screens.rpy:1082
old "Roll forward to later dialogue."
new "Roll forward to later dialogue."
# screens.rpy:1085
old "D-Pad, Sticks"
new "D-Pad, Sticks"
# screens.rpy:1089
old "Start, Guide"
new "Start, Guide"
# screens.rpy:1090
old "Access the game menu."
new "Access the game menu."
# screens.rpy:1093
old "Y/Top Button"
new "Y/Top Button"
# screens.rpy:1096
old "Calibrate"
new "Kalibroi"
# screens.rpy:1124
old "## Additional screens"
new "## Additional screens"
# screens.rpy:1128
old "## Confirm screen"
new "## Confirm screen"
# screens.rpy:1130
old "## The confirm screen is called when Ren'Py wants to ask the player a yes or no question."
new "## The confirm screen is called when Ren'Py wants to ask the player a yes or no question."
# screens.rpy:1133
old "## http://www.renpy.org/doc/html/screen_special.html#confirm"
new "## http://www.renpy.org/doc/html/screen_special.html#confirm"
# screens.rpy:1137
old "## Ensure other screens do not get input while this screen is displayed."
new "## Ensure other screens do not get input while this screen is displayed."
# screens.rpy:1161
old "Yes"
new "Kyllä"
# screens.rpy:1162
old "No"
new "Ei"
# screens.rpy:1164
old "## Right-click and escape answer \"no\"."
new "## Right-click and escape answer \"no\"."
# screens.rpy:1191
old "## Skip indicator screen"
new "## Skip indicator screen"
# screens.rpy:1193
old "## The skip_indicator screen is displayed to indicate that skipping is in progress."
new "## The skip_indicator screen is displayed to indicate that skipping is in progress."
# screens.rpy:1196
old "## https://www.renpy.org/doc/html/screen_special.html#skip-indicator"
new "## https://www.renpy.org/doc/html/screen_special.html#skip-indicator"
# screens.rpy:1208
old "Skipping"
new "Skipping"
# screens.rpy:1215
old "## This transform is used to blink the arrows one after another."
new "## This transform is used to blink the arrows one after another."
# screens.rpy:1247
old "## Notify screen"
new "## Notify screen"
# screens.rpy:1249
old "## The notify screen is used to show the player a message. (For example, when the game is quicksaved or a screenshot has been taken.)"
new "## The notify screen is used to show the player a message. (For example, when the game is quicksaved or a screenshot has been taken.)"
# screens.rpy:1252
old "## https://www.renpy.org/doc/html/screen_special.html#notify-screen"
new "## https://www.renpy.org/doc/html/screen_special.html#notify-screen"
# screens.rpy:1286
old "## NVL screen"
new "## NVL screen"
# screens.rpy:1288
old "## This screen is used for NVL-mode dialogue and menus."
new "## This screen is used for NVL-mode dialogue and menus."
# screens.rpy:1290
old "## http://www.renpy.org/doc/html/screen_special.html#nvl"
new "## http://www.renpy.org/doc/html/screen_special.html#nvl"
# screens.rpy:1301
old "## Displays dialogue in either a vpgrid or the vbox."
new "## Displays dialogue in either a vpgrid or the vbox."
# screens.rpy:1314
old "## Displays the menu, if given. The menu may be displayed incorrectly if config.narrator_menu is set to True, as it is above."
new "## Displays the menu, if given. The menu may be displayed incorrectly if config.narrator_menu is set to True, as it is above."
# screens.rpy:1344
old "## This controls the maximum number of NVL-mode entries that can be displayed at once."
new "## This controls the maximum number of NVL-mode entries that can be displayed at once."
# screens.rpy:1406
old "## Mobile Variants"
new "## Mobile Variants"
# screens.rpy:1413
old "## Since a mouse may not be present, we replace the quick menu with a version that uses fewer and bigger buttons that are easier to touch."
new "## Since a mouse may not be present, we replace the quick menu with a version that uses fewer and bigger buttons that are easier to touch."
old "Enter the name of the script file to create."
new "Entrez le nom du fichier de script à créer."
# game/add_file.rpy:10
old "The filename must have the .rpy extension."
new "Le fichier doit avoir l'extension .rpy."
# game/add_file.rpy:18
old "The file already exists."
new "Le fichier éxiste déjà."
# game/add_file.rpy:21
old "# Ren'Py automatically loads all script files ending with .rpy. To use this\n# file, define a label and jump to it from another file.\n"
new "Ren'Py charge automatiquement tous les fichiers de script finissant par .rpy. Pour utiliser ce ficher\n#, définissez un label et faites un «jump» vers lui depuis un autre fichier.\n"
old "To build Android packages, please download RAPT (from {a=http://www.renpy.org/dl/android}here{/a}), unzip it, and place it into the Ren'Py directory. Then restart the Ren'Py launcher."
new "Pour construire les paquets Android, téléchargez RAPT (depuis {a=http://www.renpy.org/dl/android}here{/a}), dézippé le, et placez le dans le répertoire de Ren'Py. Puis, redémarrez Ren'Py."
# game/android.rpy:13
old "RAPT has been installed, but you'll need to install the Android SDK before you can build Android packages. Choose Install SDK to do this."
new "RAPT a été installé, mais vous devez installer le kit de développement Android pour pouvoir construire les paquets Android. Choisissez \"installer le kit de développement et créer les clés\" pour cela"
# game/android.rpy:14
old "RAPT has been installed, but a key hasn't been configured. Please create a new key, or restore android.keystore."
new "RAPT a été installé, mais aucune clé n'a été configurée. Créez une nouvelle clé, ou restaurez android.keystore."
# game/android.rpy:15
old "The current project has not been configured. Use \"Configure\" to configure it before building."
new "Le projet courant n'a pas été configuré. Choisissez \"Configurer\' pour effectuer la configuration."
# game/android.rpy:16
old "Choose \"Build\" to build the current project, or attach an Android device and choose \"Build & Install\" to build and install it on the device."
new "Choisissez \"Construire\" pour construire le projet courant, ou connecté un appareil Android et choisissez \"Construire et Installer\" pour l'installer sur l'appareil."
# game/android.rpy:18
old "Attempts to emulate an Android phone.\n\nTouch input is emulated through the mouse, but only when the button is held down. Escape is mapped to the menu button, and PageUp is mapped to the back button."
new "Tentative d'émulation d'un téléphone Android.\n\nLe touché est émulé via la souris, mails uniquement lorsque le bouton est pressé. La barre d'espace correspond au bouton menu, et la touche PageUp correspond au bouton retour."
# game/android.rpy:19
old "Attempts to emulate an Android tablet.\n\nTouch input is emulated through the mouse, but only when the button is held down. Escape is mapped to the menu button, and PageUp is mapped to the back button."
new "Tentative d'émulation d'une tablette Android.\n\nLe touché est émulé via la souris, mails uniquement lorsque le bouton est pressé. La barre d'espace correspond au bouton menu, et la touche PageUp correspond au bouton retour."
# game/android.rpy:20
old "Attempts to emulate an OUYA console.\n\nController input is mapped to the arrow keys, Enter is mapped to the select button, Escape is mapped to the menu button, and PageUp is mapped to the back button."
new "Tentative d'émulation d'une console OUYA.\n\nLe pad est émulé via les flèches du clavier. La touche Entrée correspond au bouton select, la barre d'espace au bouton menu, et la touche PageUp correspond au bouton retour."
# game/android.rpy:22
old "Downloads and installs the Android SDK and supporting packages. Optionally, generates the keys required to sign the package."
new "Télécharge et installe le kit de développement Android et les paquets supportés. Optionnellement, génère les clés requises pour signer le paquet."
# game/android.rpy:23
old "Configures the package name, version, and other information about this project."
new "Configure le nom du packet, sa version et d'autres informations à propos de ce projet."
# game/android.rpy:24
old "Opens the file containing the Google Play keys in the editor.\n\nThis is only needed if the application is using an expansion APK. Read the documentation for more details."
new "Ouvre le fichier contenant les clés Google Play dans l'éditeur.\n\nCela est nécessaire uniquement si l'application utilise une expansion APK. Référez-vous à la documentation pour plus d'informations."
# game/android.rpy:25
old "Builds the Android package."
new "Construire le paquet Android."
# game/android.rpy:26
old "Builds the Android package, and installs it on an Android device connected to your computer."
new "Construire le paquet Android, et l'installer sur l'appareil Android connecté à votre ordinateur."
# game/android.rpy:142
old "{a=%s}%s{/a}"
new "{a=%s}%s{/a}"
# game/android.rpy:361
old "Android: [project.current.name!q]"
new "Android: [project.current.name!q]"
# game/android.rpy:381
old "Emulation:"
new "Émulateur:"
# game/android.rpy:389
old "Phone"
new "Téléphone"
# game/android.rpy:393
old "Tablet"
new "Tablette"
# game/android.rpy:397
old "Television / OUYA"
new "Télévision / OUYA"
# game/android.rpy:409
old "Build:"
new "Construire:"
# game/android.rpy:417
old "Install SDK & Create Keys"
new "Installer le kit de développement et créer les clés"
# game/android.rpy:421
old "Configure"
new "Configurer"
# game/android.rpy:425
old "Build Package"
new "Construire le paquet"
# game/android.rpy:429
old "Build & Install"
new "Construire et installer"
# game/android.rpy:13
old "A 32-bit Java Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=http://www.oracle.com/technetwork/java/javase/downloads/index.html}download and install the JDK{/a}, then restart the Ren'Py launcher."
new "Un Kit de Développement Java (JDK) 32 bits est nécessaire pour construire les paquets pour Android depuis Windows. Le JDK n'est pas la même chose que le JRE, il est possible que Java soit installé sur votre machine sans le JDK.\n\n{a=http://www.oracle.com/technetwork/java/javase/downloads/index.html}Téléchargez et installez le JDK{/a}, puis relancer le lanceur Ren'Py."
new "Êtes-vous sûr de vouloir supprimer cette sauvegarde ?"
# 00action_file.rpy:47
old "{#month}January"
new "{#month}January"
# renpy/common/00layout.rpy:423
old "Are you sure you want to overwrite your save?"
new "Êtes-vous sûr de vouloir écraser cette sauvegarde ?"
# 00action_file.rpy:47
old "{#month}February"
new "{#month}February"
# renpy/common/00layout.rpy:424
old "Loading will lose unsaved progress.\nAre you sure you want to do this?"
new "En effectuant ce chargement, vous perderez votre avancement non sauvegardé.\nÊtes-vous sûr de vouloire faire ça ?"
# 00action_file.rpy:47
old "{#month}March"
new "{#month}March"
# renpy/common/00layout.rpy:425
old "Are you sure you want to quit?"
new "Êtes-vous sûr de vouloir quitter ?"
# 00action_file.rpy:47
old "{#month}April"
new "{#month}April"
# renpy/common/00layout.rpy:426
old "Are you sure you want to return to the main menu?\nThis will lose unsaved progress."
new "Êtes-vous sûr de vouloir retourner au menu principal ?\nVous perdrez votre avancement non sauvegardé."
# 00action_file.rpy:47
old "{#month}May"
new "{#month}May"
# renpy/common/00keymap.rpy:167
old "Saved screenshot as %s."
new "La capture d'écran a été enregistrée en tant que %s"
# 00action_file.rpy:47
old "{#month}June"
new "{#month}June"
# renpy/common/00gltest.rpy:50
old "Graphics Acceleration"
new "Accélération graphique"
# 00action_file.rpy:47
old "{#month}July"
new "{#month}July"
# renpy/common/00gltest.rpy:54
old "Automatically Choose"
new "Choix automatique"
# 00action_file.rpy:47
old "{#month}August"
new "{#month}August"
# renpy/common/00gltest.rpy:59
old "Force Angle/DirectX Renderer"
new "Forcer le rendu Angle/DirectX"
# 00action_file.rpy:47
old "{#month}September"
new "{#month}September"
# renpy/common/00gltest.rpy:63
old "Force OpenGL Renderer"
new "Forcer le rendu OpenGL"
# 00action_file.rpy:47
old "{#month}October"
new "{#month}October"
# renpy/common/00gltest.rpy:67
old "Force Software Renderer"
new "Forcer le rendu logiciel"
# 00action_file.rpy:47
old "{#month}November"
new "{#month}November"
# renpy/common/00gltest.rpy:73
old "Changes will take effect the next time this program is run."
new "Les changement seront pris en compte au prochin démarrage du programme."
# 00action_file.rpy:47
old "{#month}December"
new "{#month}December"
# renpy/common/00gltest.rpy:77
old "Quit"
new "Quitter"
# 00action_file.rpy:63
old "{#month_short}Jan"
new "{#month_short}Jan"
# renpy/common/00gltest.rpy:82
old "Return"
new "Retour"
# 00action_file.rpy:63
old "{#month_short}Feb"
new "{#month_short}Feb"
# renpy/common/00gltest.rpy:112
old "Performance Warning"
new "Avertissement sur les performances"
# 00action_file.rpy:63
old "{#month_short}Mar"
new "{#month_short}Mar"
# renpy/common/00gltest.rpy:117
old "This computer is using software rendering."
new "Cet ordinateur utilise le rendu logiciel."
# 00action_file.rpy:63
old "{#month_short}Apr"
new "{#month_short}Apr"
# renpy/common/00gltest.rpy:119
old "This computer is not using shaders."
new "Cet ordinateur n'utilise pas les shaders."
# 00action_file.rpy:63
old "{#month_short}May"
new "{#month_short}May"
# renpy/common/00gltest.rpy:121
old "This computer is displaying graphics slowly."
new "Cet ordinateur affiche lentement les graphismes."
# 00action_file.rpy:63
old "{#month_short}Jun"
new "{#month_short}Jun"
# renpy/common/00gltest.rpy:123
old "This computer has a problem displaying graphics: [problem]."
new "Cet ordinateur rencontre des difficultés à afficher les graphismes: [problem]."
# 00action_file.rpy:63
old "{#month_short}Jul"
new "{#month_short}Jul"
# renpy/common/00gltest.rpy:128
old "Its graphics drivers may be out of date or not operating correctly. This can lead to slow or incorrect graphics display. Updating DirectX could fix this problem."
new "Les pilotes graphiques ne semblent pas à jour ou dysfonctionnent. Cela peut entraîner des ralentissements ou de mauvais affichages. Mettre à jour DirectX pourraît régler ce problème."
# 00action_file.rpy:63
old "{#month_short}Aug"
new "{#month_short}Aug"
# renpy/common/00gltest.rpy:130
old "Its graphics drivers may be out of date or not operating correctly. This can lead to slow or incorrect graphics display."
new "Les pilotes graphiques ne semblent pas à jour ou dysfonctionnent. Cela peut entraîner des ralentissements ou de mauvais affichages."
# 00action_file.rpy:63
old "{#month_short}Sep"
new "{#month_short}Sep"
# renpy/common/00gltest.rpy:135
old "Update DirectX"
new "Mettre à jour DirectX"
# 00action_file.rpy:63
old "{#month_short}Oct"
new "{#month_short}Oct"
# renpy/common/00gltest.rpy:141
old "Continue, Show this warning again"
new "Continer, Afficher cet avertissement la prochaine fois."
# 00action_file.rpy:63
old "{#month_short}Nov"
new "{#month_short}Nov"
# renpy/common/00gltest.rpy:145
old "Continue, Don't show warning again"
new "Continer, Ne plus afficher cet avertissement."
# 00action_file.rpy:63
old "{#month_short}Dec"
new "{#month_short}Dec"
# renpy/common/00gltest.rpy:171
old "Updating DirectX."
new "Mettre à jour de DirectX en cours"
# renpy/common/00gltest.rpy:175
old "DirectX web setup has been started. It may start minimized in the taskbar. Please follow the prompts to install DirectX."
new "La mise à jour de DirectX a débutée. Elle est sans doute minimisée dans la bare de tâche. Merci de suivre les instructions pour installer DirectX."
# renpy/common/00gltest.rpy:179
old "{b}Note:{/b} Microsoft's DirectX web setup program will, by default, install the Bing toolbar. If you do not want this toolbar, uncheck the appropriate box."
new "{b}Note:{/b} le programme d'installation de Microsoft's DirectX va, par defaut, installer la barre d'outils Bing. Si vous ne voulez pas de cette barre, décochez la case appropriée."
# renpy/common/00gltest.rpy:183
old "When setup finishes, please click below to restart this program."
new "Lorsque l'instllation sera terminée, cliquez ci-dessous pour redémarrer ce programme."
# renpy/common/00gltest.rpy:185
old "Restart"
new "Redémarrer"
# renpy/common/_errorhandling.rpym:408
old "An exception has occurred."
new "Une exception a été levée."
# renpy/common/_errorhandling.rpym:434
old "Rollback"
new "Revenir en arrière"
# renpy/common/_errorhandling.rpym:436
old "Attempts a roll back to a prior time, allowing you to save or choose a different choice."
new "Tenter de revenir en arrière, vous permet de sauvegarder ou de faire un autre choix."
# renpy/common/_errorhandling.rpym:439
old "Ignore"
new "Ignorer"
# renpy/common/_errorhandling.rpym:441
old "Ignores the exception, allowing you to continue. This often leads to additional errors."
new "Ignorer l'exception vous permet de continuer. Cela entraîne généralement des erreurs additionelles."
# renpy/common/_errorhandling.rpym:444
old "Reload"
new "Recharger"
# renpy/common/_errorhandling.rpym:446
old "Reloads the game from disk, saving and restoring game state if possible."
new "Recharger le jeu depuis le disque dur and tenter de restaurer le jeu dans l'état actuel."
# renpy/common/_errorhandling.rpym:448
old "Open Traceback"
new "Ouvrir la pile d'appel"
# renpy/common/_errorhandling.rpym:450
old "Opens the traceback.txt file in a text editor."
new "Ouvrir traceback.txt dans un éditeur de texte."
# renpy/common/_errorhandling.rpym:456
old "Quits the game."
new "Quitter le jeu."
# renpy/common/_errorhandling.rpym:483
old "Parsing the script failed."
new "L'analyse du script a échouée."
# renpy/common/_errorhandling.rpym:510
old "Open Parse Errors"
new "Ouvrir les erreurs d'analyse."
# renpy/common/_errorhandling.rpym:512
old "Opens the errors.txt file in a text editor."
new "Ouvrir errors.txt dans un éditeur de texte."
# renpy/common/00action_file.rpy:118
# 00action_file.rpy:235
old "%b %d, %H:%M"
new "%b %d, %H:%M"
# renpy/common/_compat/gamemenu.rpym:337
old "Previous"
new "Précédent"
# 00action_file.rpy:820
old "Quick save complete."
new "Sauvegarde rapide effectuée."
# renpy/common/_compat/gamemenu.rpym:344
old "Next"
new "Suivant"
# 00gui.rpy:227
old "Are you sure?"
new "Êtes-vous sûr ?"
# renpy/common/00library.rpy:77
# 00gui.rpy:228
old "Are you sure you want to delete this save?"
new "Êtes-vous sûr de vouloir supprimer cette sauvegarde ?"
# 00gui.rpy:229
old "Are you sure you want to overwrite your save?"
new "Êtes-vous sûr de vouloir écraser cette sauvegarde ?"
# 00gui.rpy:230
old "Loading will lose unsaved progress.\nAre you sure you want to do this?"
new "Le chargement entraînera la perte des données non sauvegardées.\nÊtes-vous sûr de vouloir faire cela ?"
# 00gui.rpy:231
old "Are you sure you want to quit?"
new "Êtes-vous sûr de vouloir quitter ?"
# 00gui.rpy:232
old "Are you sure you want to return to the main menu?\nThis will lose unsaved progress."
new "Êtes-vous sûr de vouloir retourner au menu principal ?\nVous perdrez les données non sauvegardées."
# 00gui.rpy:233
old "Are you sure you want to end the replay?"
new "Are you sure you want to end the replay?"
# 00gui.rpy:234
old "Are you sure you want to begin skipping?"
new "Êtes-vous sûr de vouloir commencer à sauter ?"
# 00gui.rpy:235
old "Are you sure you want to skip to the next choice?"
new "Êtes-vous sûr de vouloir sauter jusqu'au prochain choix ?"
# 00gui.rpy:236
old "Are you sure you want to skip unseen dialogue to the next choice?"
new "Are you sure you want to skip unseen dialogue to the next choice?"
# 00keymap.rpy:250
old "Saved screenshot as %s."
new "Sauvez cette capture d'écran sous le nom %s."
# 00library.rpy:142
old "Self-voicing disabled."
new "Self-voicing disabled."
# 00library.rpy:143
old "Clipboard voicing enabled. "
new "Clipboard voicing enabled. "
# 00library.rpy:144
old "Self-voicing enabled. "
new "Self-voicing enabled. "
# 00library.rpy:179
old "Skip Mode"
new "Mode rapide"
new "Mode saut"
# renpy/common/00library.rpy:80
old "Fast Skip Mode"
new "Mode très rapide"
# 00library.rpy:262
old "This program contains free software under a number of licenses, including the MIT License and GNU Lesser General Public License. A complete list of software, including links to full source code, can be found {a=https://www.renpy.org/l/license}here{/a}."
new "This program contains free software under a number of licenses, including the MIT License and GNU Lesser General Public License. A complete list of software, including links to full source code, can be found {a=https://www.renpy.org/l/license}here{/a}."
# renpy/common/00gallery.rpy:521
# 00preferences.rpy:422
old "Clipboard voicing enabled. Press 'shift+C' to disable."
new "Clipboard voicing enabled. Press 'shift+C' to disable."
# 00preferences.rpy:424
old "Self-voicing would say \"[renpy.display.tts.last]\". Press 'alt+shift+V' to disable."
new "Self-voicing would say \"[renpy.display.tts.last]\". Press 'alt+shift+V' to disable."
# 00preferences.rpy:426
old "Self-voicing enabled. Press 'v' to disable."
new "Self-voicing enabled. Press 'v' to disable."
# 00iap.rpy:217
old "Contacting App Store\nPlease Wait..."
new "Contacting App Store\nPlease Wait..."
# 00updater.rpy:367
old "The Ren'Py Updater is not supported on mobile devices."
new "The Ren'Py Updater is not supported on mobile devices."
# 00updater.rpy:486
old "An error is being simulated."
new "An error is being simulated."
# 00updater.rpy:662
old "Either this project does not support updating, or the update status file was deleted."
new "Either this project does not support updating, or the update status file was deleted."
# 00updater.rpy:676
old "This account does not have permission to perform an update."
new "This account does not have permission to perform an update."
# 00updater.rpy:679
old "This account does not have permission to write the update log."
new "This account does not have permission to write the update log."
# 00updater.rpy:704
old "Could not verify update signature."
new "Could not verify update signature."
# 00updater.rpy:975
old "The update file was not downloaded."
new "The update file was not downloaded."
# 00updater.rpy:993
old "The update file does not have the correct digest - it may have been corrupted."
new "The update file does not have the correct digest - it may have been corrupted."
# 00updater.rpy:1049
old "While unpacking {}, unknown type {}."
new "While unpacking {}, unknown type {}."
# 00updater.rpy:1393
old "Updater"
new "Mise à jour"
# 00updater.rpy:1404
old "This program is up to date."
new "Ce programme est à jour."
# 00updater.rpy:1406
old "[u.version] is available. Do you want to install it?"
new "[u.version] est disponible. Voulez-vous l'installer ?"
# 00updater.rpy:1408
old "Preparing to download the updates."
new "Préparation au téléchargement de la mise à jour."
# 00updater.rpy:1410
old "Downloading the updates."
new "Téléchargement de la mise à jour."
# 00updater.rpy:1412
old "Unpacking the updates."
new "Dépaquetage de la mise à jour."
# 00updater.rpy:1416
old "The updates have been installed. The program will restart."
new "La mise à jour a été installée. Le programme va redémarrer."
# 00updater.rpy:1418
old "The updates have been installed."
new "La mise à jour a été installée."
# 00updater.rpy:1420
old "The updates were cancelled."
new "La mise à jour a été annulée."
# 00gallery.rpy:563
old "Image [index] of [count] locked."
new "Image [index] sur [count] verrouillée."
new "Image [index] sur [count] bloquée."
# renpy/common/00gallery.rpy:539
# 00gallery.rpy:583
old "prev"
new "précédent"
new "prec."
# renpy/common/00gallery.rpy:540
# 00gallery.rpy:584
old "next"
new "suivant"
new "suiv."
# renpy/common/00gallery.rpy:541
# 00gallery.rpy:585
old "slideshow"
new "diaporama"
# renpy/common/00gallery.rpy:542
# 00gallery.rpy:586
old "return"
new "retour"
# renpy/common/00layout.rpy:427
old "Are you sure you want to begin skipping?"
new "Êtes-vous sûr de vouloir commencer à sauter certaines étapes ?"
# renpy/common/00layout.rpy:428
old "Are you sure you want to skip to the next choice?"
new "Êtes-vous sûr de vouloir sauter le prochain choix ?"
# renpy/common/00layout.rpy:429
old "Are you sure you want to skip to unseen dialogue or the next choice?"
new "Êtes-vous sûr de vouloir sauter des dialogues non lus or le prochain choix ?"
new "Création du fichier de mise à jour zsync [variant]."
# game/distribute.rpy:854
old "Processed {b}[complete]{/b} of {b}[total]{/b} files."
new "Traitement du fichier {b}[complete]{/b} sur {b}[total]{/b}."
# game/distribute.rpy:915
old "All packages have been built.\n\nDue to the presence of permission information, unpacking and repacking the Linux and Macintosh distributions on Windows is not supported."
new "Tous les paquets ont été contruits.\n\nDu fait de la présence des systèmes de permissions, il n'est pas possible de reconstruire les paquets construits sur GNU-Linux ou Mac OS sur Windows."
# game/distribute.rpy:358
old "No packages are selected, so there's nothing to do."
new "Aucun paquet sélectionné, il n'y a donc rien à faire."
old "{b}Recommended.{/b} A beta editor with an easy to use interface and features that aid in development, such as spell-checking. Editra currently lacks the IME support required for Chinese, Japanese, and Korean text input."
new "{b}Recommendé.{/b} Un éditeur en version bêta avec une interface simple et des fonctionnalités d'assistance au développement. Editra manque pour le moment du support pour les textes en chinois, japonais et coréen."
# game/editor.rpy:121
old "{b}Recommended.{/b} A beta editor with an easy to use interface and features that aid in development, such as spell-checking. Editra currently lacks the IME support required for Chinese, Japanese, and Korean text input. On Linux, Editra requires wxPython."
new "{b}Recommendé.{/b} Un éditeur en version bêta avec une interface simple et des fonctionnalités d'assistance au développement. Editra manque pour le moment du support pour les textes en chinois, japonais et coréen. Sur GNU-Linux, Editra nécessite wxPython."
# game/editor.rpy:137
old "The may have occured because wxPython is not installed on this system."
new "Cela est sans doute arrivé car wxPython n'est pas installé sur ce système."
# game/editor.rpy:144
old "Up to 22 MB download required."
new "Jusqu'à 22 MB de téléchargement requis."
# game/editor.rpy:157
old "1.8 MB download required."
new "1.8 MB de réléchargement requis."
# game/editor.rpy:158
old "This may have occured because Java is not installed on this system."
new "Cela est sans doute arrivé car Java n'est pas installé sur ce système."
# game/editor.rpy:327
old "An exception occured while launching the text editor:\n[exception!q]"
new "Une exception a été levée lors du lancement de l'édieteur de texte :\n[exception!q]"
# game/editor.rpy:378
old "Select Editor"
new "Sélectionnez un éditeur"
# game/editor.rpy:393
old "A text editor is the program you'll use to edit Ren'Py script files. Here, you can select the editor Ren'Py will use. If not already present, the editor will be automatically downloaded and installed."
new "Un éditeur de texte est un logiciel que vous utilisez pour éditer les fichiers de script Ren'Py. Vous pouvez choisir l'édteur que Ren'Py utilise. Si ce n'est pas déjà le cas, l'éditeur sera automatiquement téléchargé et installé."
# game/editor.rpy:415
old "Cancel"
new "Annuler"
# game/editor.rpy:137
old "This may have occured because wxPython is not installed on this system."
new "Cela est sans doute dû au fait que wxPython n'est pas installé sur votre système."
# game/editor.rpy:155
old "A mature editor that requires Java."
new "Un éditeur éprouvé nécessitant Java."
# game/editor.rpy:164
old "Invokes the editor your operating system has associated with .rpy files."
new "Lance l'éditeur associé par votre systèmes aux fichiers .rpy."
# game/editor.rpy:180
old "Prevents Ren'Py from opening a text editor."
new "Empêche Ren'Py d'ouvrir un éditeur de texte."
old "Changes will take effect the next time this program is run."
new "Les changements prendront effet au prochain démarrage du programme."
# 00gltest.rpy:141
old "Performance Warning"
new "Avertissement concernant les performances."
# 00gltest.rpy:146
old "This computer is using software rendering."
new "Cet ordinateur utilise le rendu logiciel."
# 00gltest.rpy:148
old "This computer is not using shaders."
new "Cet ordinateur n'utilise pas les 'shaders'."
# 00gltest.rpy:150
old "This computer is displaying graphics slowly."
new "Cet ordinateur affiche lentement les graphismes."
# 00gltest.rpy:152
old "This computer has a problem displaying graphics: [problem]."
new "Cet ordinateur a un problème pour afficher les graphismes: [problem]."
# 00gltest.rpy:157
old "Its graphics drivers may be out of date or not operating correctly. This can lead to slow or incorrect graphics display. Updating DirectX could fix this problem."
new "Les pilotes graphiques sont peut être pas à jour ou n'oppèrent pas correctement. Cela peut entraîner des lenteurs ou des erreurs d'affichage. Mettre à jour DirectX pourrait résoudre ce problème."
# 00gltest.rpy:159
old "Its graphics drivers may be out of date or not operating correctly. This can lead to slow or incorrect graphics display."
new "Les pilotes graphiques sont peut être pas à jour ou n'opèrent pas correctement. Cela peut entraîner des lenteurs ou des erreurs d'affichage."
# 00gltest.rpy:164
old "Update DirectX"
new "Mettre à jour DirectX"
# 00gltest.rpy:170
old "Continue, Show this warning again"
new "Continuer. Montrer cet avertissement à chaque fois."
# 00gltest.rpy:174
old "Continue, Don't show warning again"
new "Continuer. Ne plus montrer cet avertissement."
# 00gltest.rpy:192
old "Updating DirectX."
new "Mise à jour de DirectX."
# 00gltest.rpy:196
old "DirectX web setup has been started. It may start minimized in the taskbar. Please follow the prompts to install DirectX."
new "La page Web d'installation de DirectX a été lancé. Il se peut que la page soit minimisée. Suivez les instructions pour installer DirectX."
# 00gltest.rpy:200
old "{b}Note:{/b} Microsoft's DirectX web setup program will, by default, install the Bing toolbar. If you do not want this toolbar, uncheck the appropriate box."
new "{b}Note:{/b} la page web d'installation de Microsoft DirectX va, par défaut, installer le barre d'outils Bing. Décochez la case appropriée si vous ne voulez pas de cette barre d'outils."
# 00gltest.rpy:204
old "When setup finishes, please click below to restart this program."
new "Quand l'installation est terminée, cliquez ci-dessous pour redémarrer ce programme."
# 00gltest.rpy:206
old "Restart"
new "Redémarrer"
# 00gamepad.rpy:32
old "Select Gamepad to Calibrate"
new "Select Gamepad to Calibrate"
# 00gamepad.rpy:35
old "No Gamepads Available"
new "No Gamepads Available"
# 00gamepad.rpy:54
old "Calibrating [name] ([i]/[total])"
new "Calibrating [name] ([i]/[total])"
# 00gamepad.rpy:58
old "Press or move the [control!r] [kind]."
new "Press or move the [control!r] [kind]."
# 00gamepad.rpy:66
old "Skip (A)"
new "Skip (A)"
# 00gamepad.rpy:69
old "Back (B)"
new "Back (B)"
# _errorhandling.rpym:495
old "Open Traceback"
new "Ouvrir le fichier de déboguage."
# _errorhandling.rpym:497
old "Opens the traceback.txt file in a text editor."
new "Ouvrir le fichier 'traceback.txt' dans un éditeur de texte."
# _errorhandling.rpym:499
old "Copy to Clipboard"
new "Copy to Clipboard"
# _errorhandling.rpym:501
old "Copies the traceback.txt file to the clipboard."
new "Copies the traceback.txt file to the clipboard."
# _errorhandling.rpym:519
old "An exception has occurred."
new "Une exception est apparue."
# _errorhandling.rpym:538
old "Rollback"
new "Retour arrière"
# _errorhandling.rpym:540
old "Attempts a roll back to a prior time, allowing you to save or choose a different choice."
new "Essai de retour arrière, permettant de sauvegarder ou de faire un choix différent."
# _errorhandling.rpym:543
old "Ignore"
new "Ignorer"
# _errorhandling.rpym:545
old "Ignores the exception, allowing you to continue. This often leads to additional errors."
new "Ignorer l'exception, et continuer. Cela amène souvent à de nouvelles erreurs."
# _errorhandling.rpym:548
old "Reload"
new "Recharger"
# _errorhandling.rpym:550
old "Reloads the game from disk, saving and restoring game state if possible."
new "Recharger le jeu depuis le disque, sauvegarder et restaurer le jeu dans son état actuel si possible."
# _errorhandling.rpym:560
old "Quits the game."
new "Quitter le jeu."
# _errorhandling.rpym:582
old "Parsing the script failed."
new "Échec dans l'interprétation du jeu."
# _errorhandling.rpym:606
old "Open Parse Errors"
new "Ouvrir les erreurs d'interprétation"
# _errorhandling.rpym:608
old "Opens the errors.txt file in a text editor."
new "Ouvrir le fihchier 'errors.txt' dans un éditeur de texte."
# _errorhandling.rpym:612
old "Copies the errors.txt file to the clipboard."
new "Copies the errors.txt file to the clipboard."
old "## The init offset statement causes the init code in this file to run before init code in any other file."
new "## The init offset statement causes the init code in this file to run before init code in any other file."
# gui.rpy:9
old "## Calling gui.init resets the styles to sensible default values, and sets the width and height of the game."
new "## Calling gui.init resets the styles to sensible default values, and sets the width and height of the game."
# gui.rpy:21
old "## Colors"
new "## Colors"
# gui.rpy:23
old "## The colors of text in the interface."
new "## The colors of text in the interface."
# gui.rpy:25
old "## An accent color used throughout the interface to label and highlight text."
new "## An accent color used throughout the interface to label and highlight text."
# gui.rpy:29
old "## The color used for a text button when it is neither selected nor hovered."
new "## The color used for a text button when it is neither selected nor hovered."
# gui.rpy:32
old "## The small color is used for small text, which needs to be brighter/darker to achieve the same effect."
new "## The small color is used for small text, which needs to be brighter/darker to achieve the same effect."
# gui.rpy:36
old "## The color that is used for buttons and bars that are hovered."
new "## The color that is used for buttons and bars that are hovered."
# gui.rpy:39
old "## The color used for a text button when it is selected but not focused. A button is selected if it is the current screen or preference value."
new "## The color used for a text button when it is selected but not focused. A button is selected if it is the current screen or preference value."
# gui.rpy:43
old "## The color used for a text button when it cannot be selected."
new "## The color used for a text button when it cannot be selected."
# gui.rpy:46
old "## Colors used for the portions of bars that are not filled in. These are not used directly, but are used when re-generating bar image files."
new "## Colors used for the portions of bars that are not filled in. These are not used directly, but are used when re-generating bar image files."
# gui.rpy:51
old "## The colors used for dialogue and menu choice text."
new "## The colors used for dialogue and menu choice text."
# gui.rpy:56
old "## Fonts and Font Sizes"
new "## Fonts and Font Sizes"
# gui.rpy:58
old "## The font used for in-game text."
new "## The font used for in-game text."
# gui.rpy:61
old "## The font used for character names."
new "## The font used for character names."
# gui.rpy:64
old "## The font used for out-of-game text."
new "## The font used for out-of-game text."
# gui.rpy:67
old "## The size of normal dialogue text."
new "## The size of normal dialogue text."
# gui.rpy:70
old "## The size of character names."
new "## The size of character names."
# gui.rpy:73
old "## The size of text in the game's user interface."
new "## The size of text in the game's user interface."
# gui.rpy:76
old "## The size of labels in the game's user interface."
new "## The size of labels in the game's user interface."
# gui.rpy:79
old "## The size of text on the notify screen."
new "## The size of text on the notify screen."
# gui.rpy:82
old "## The size of the game's title."
new "## The size of the game's title."
# gui.rpy:86
old "## Main and Game Menus"
new "## Main and Game Menus"
# gui.rpy:88
old "## The images used for the main and game menus."
new "## The images used for the main and game menus."
# gui.rpy:92
old "## Should we show the name and version of the game?"
new "## Should we show the name and version of the game?"
# gui.rpy:96
old "## Dialogue"
new "## Dialogue"
# gui.rpy:98
old "## These variables control how dialogue is displayed on the screen one line at a time."
new "## These variables control how dialogue is displayed on the screen one line at a time."
# gui.rpy:101
old "## The height of the textbox containing dialogue."
new "## The height of the textbox containing dialogue."
# gui.rpy:104
old "## The placement of the textbox vertically on the screen. 0.0 is the top, 0.5 is center, and 1.0 is the bottom."
new "## The placement of the textbox vertically on the screen. 0.0 is the top, 0.5 is center, and 1.0 is the bottom."
# gui.rpy:109
old "## The placement of the speaking character's name, relative to the textbox. These can be a whole number of pixels from the left or top, or 0.5 to center."
new "## The placement of the speaking character's name, relative to the textbox. These can be a whole number of pixels from the left or top, or 0.5 to center."
# gui.rpy:114
old "## The horizontal alignment of the character's name. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
new "## The horizontal alignment of the character's name. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
# gui.rpy:118
old "## The width, height, and borders of the box containing the character's name, or None to automatically size it."
new "## The width, height, and borders of the box containing the character's name, or None to automatically size it."
# gui.rpy:123
old "## The borders of the box containing the character's name, in left, top, right, bottom order."
new "## The borders of the box containing the character's name, in left, top, right, bottom order."
# gui.rpy:127
old "## If True, the background of the namebox will be tiled, if False, the background if the namebox will be scaled."
new "## If True, the background of the namebox will be tiled, if False, the background if the namebox will be scaled."
# gui.rpy:132
old "## The placement of dialogue relative to the textbox. These can be a whole number of pixels relative to the left or top side of the textbox, or 0.5 to center."
new "## The placement of dialogue relative to the textbox. These can be a whole number of pixels relative to the left or top side of the textbox, or 0.5 to center."
# gui.rpy:138
old "## The maximum width of dialogue text, in pixels."
new "## The maximum width of dialogue text, in pixels."
# gui.rpy:141
old "## The horizontal alignment of the dialogue text. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
new "## The horizontal alignment of the dialogue text. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
# gui.rpy:146
old "## Buttons"
new "## Buttons"
# gui.rpy:148
old "## These variables, along with the image files in gui/button, control aspects of how buttons are displayed."
new "## These variables, along with the image files in gui/button, control aspects of how buttons are displayed."
# gui.rpy:151
old "## The width and height of a button, in pixels. If None, Ren'Py computes a size."
new "## The width and height of a button, in pixels. If None, Ren'Py computes a size."
# gui.rpy:155
old "## The borders on each side of the button, in left, top, right, bottom order."
new "## The borders on each side of the button, in left, top, right, bottom order."
# gui.rpy:158
old "## If True, the background image will be tiled. If False, the background image will be linearly scaled."
new "## If True, the background image will be tiled. If False, the background image will be linearly scaled."
# gui.rpy:162
old "## The font used by the button."
new "## The font used by the button."
# gui.rpy:165
old "## The size of the text used by the button."
new "## The size of the text used by the button."
# gui.rpy:179
old "## These variables override settings for different kinds of buttons. Please see the gui documentation for the kinds of buttons available, and what each is used for."
new "## These variables override settings for different kinds of buttons. Please see the gui documentation for the kinds of buttons available, and what each is used for."
# gui.rpy:183
old "## These customizations are used by the default interface:"
new "## These customizations are used by the default interface:"
# gui.rpy:198
old "## You can also add your own customizations, by adding properly-named variables. For example, you can uncomment the following line to set the width of a navigation button."
new "## You can also add your own customizations, by adding properly-named variables. For example, you can uncomment the following line to set the width of a navigation button."
# gui.rpy:205
old "## Choice Buttons"
new "## Choice Buttons"
# gui.rpy:207
old "## Choice buttons are used in the in-game menus."
new "## Choice buttons are used in the in-game menus."
# gui.rpy:220
old "## File Slot Buttons"
new "## File Slot Buttons"
# gui.rpy:222
old "## A file slot button is a special kind of button. It contains a thumbnail image, and text describing the contents of the save slot. A save slot uses image files in gui/button, like the other kinds of buttons."
new "## A file slot button is a special kind of button. It contains a thumbnail image, and text describing the contents of the save slot. A save slot uses image files in gui/button, like the other kinds of buttons."
# gui.rpy:226
old "## The save slot button."
new "## The save slot button."
# gui.rpy:234
old "## The width and height of thumbnails used by the save slots."
new "## The width and height of thumbnails used by the save slots."
# gui.rpy:238
old "## The number of columns and rows in the grid of save slots."
new "## The number of columns and rows in the grid of save slots."
# gui.rpy:243
old "## Positioning and Spacing"
new "## Positioning and Spacing"
# gui.rpy:245
old "## These variables control the positioning and spacing of various user interface elements."
new "## These variables control the positioning and spacing of various user interface elements."
# gui.rpy:248
old "## The position of the left side of the navigation buttons, relative to the left side of the screen."
new "## The position of the left side of the navigation buttons, relative to the left side of the screen."
# gui.rpy:252
old "## The vertical position of the skip indicator."
new "## The vertical position of the skip indicator."
# gui.rpy:255
old "## The vertical position of the notify screen."
new "## The vertical position of the notify screen."
# gui.rpy:258
old "## The spacing between menu choices."
new "## The spacing between menu choices."
# gui.rpy:261
old "## Buttons in the navigation section of the main and game menus."
new "## Buttons in the navigation section of the main and game menus."
# gui.rpy:264
old "## Controls the amount of spacing between preferences."
new "## Controls the amount of spacing between preferences."
# gui.rpy:267
old "## Controls the amount of spacing between preference buttons."
new "## Controls the amount of spacing between preference buttons."
# gui.rpy:270
old "## The spacing between file page buttons."
new "## The spacing between file page buttons."
# gui.rpy:273
old "## The spacing between file slots."
new "## The spacing between file slots."
# gui.rpy:277
old "## Frames"
new "## Frames"
# gui.rpy:279
old "## These variables control the look of frames that can contain user interface components when an overlay or window is not present."
new "## These variables control the look of frames that can contain user interface components when an overlay or window is not present."
# gui.rpy:282
old "## Generic frames that are introduced by player code."
new "## Generic frames that are introduced by player code."
# gui.rpy:285
old "## The frame that is used as part of the confirm screen."
new "## The frame that is used as part of the confirm screen."
# gui.rpy:288
old "## The frame that is used as part of the skip screen."
new "## The frame that is used as part of the skip screen."
# gui.rpy:291
old "## The frame that is used as part of the notify screen."
new "## The frame that is used as part of the notify screen."
# gui.rpy:294
old "## Should frame backgrounds be tiled?"
new "## Should frame backgrounds be tiled?"
# gui.rpy:298
old "## Bars, Scrollbars, and Sliders"
new "## Bars, Scrollbars, and Sliders"
# gui.rpy:300
old "## These control the look and size of bars, scrollbars, and sliders."
new "## These control the look and size of bars, scrollbars, and sliders."
# gui.rpy:302
old "## The default GUI only uses sliders and vertical scrollbars. All of the other bars are only used in creator-written code."
new "## The default GUI only uses sliders and vertical scrollbars. All of the other bars are only used in creator-written code."
# gui.rpy:305
old "## The height of horizontal bars, scrollbars, and sliders. The width of vertical bars, scrollbars, and sliders."
new "## The height of horizontal bars, scrollbars, and sliders. The width of vertical bars, scrollbars, and sliders."
# gui.rpy:311
old "## True if bar images should be tiled. False if they should be linearly scaled."
new "## True if bar images should be tiled. False if they should be linearly scaled."
# gui.rpy:316
old "## Horizontal borders."
new "## Horizontal borders."
# gui.rpy:321
old "## Vertical borders."
new "## Vertical borders."
# gui.rpy:326
old "## What to do with unscrollable scrollbars in the gui. \"hide\" hides them, while None shows them."
new "## What to do with unscrollable scrollbars in the gui. \"hide\" hides them, while None shows them."
# gui.rpy:331
old "## History"
new "## History"
# gui.rpy:333
old "## The history screen displays dialogue that the player has already dismissed."
new "## The history screen displays dialogue that the player has already dismissed."
# gui.rpy:335
old "## The number of blocks of dialogue history Ren'Py will keep."
new "## The number of blocks of dialogue history Ren'Py will keep."
# gui.rpy:338
old "## The height of a history screen entry, or None to make the height variable at the cost of performance."
new "## The height of a history screen entry, or None to make the height variable at the cost of performance."
# gui.rpy:342
old "## The position, width, and alignment of the label giving the name of the speaking character."
new "## The position, width, and alignment of the label giving the name of the speaking character."
# gui.rpy:349
old "## The position, width, and alignment of the dialogue text."
new "## The position, width, and alignment of the dialogue text."
# gui.rpy:356
old "## NVL-Mode"
new "## NVL-Mode"
# gui.rpy:358
old "## The NVL-mode screen displays the dialogue spoken by NVL-mode characters."
new "## The NVL-mode screen displays the dialogue spoken by NVL-mode characters."
# gui.rpy:360
old "## The borders of the background of the NVL-mode background window."
new "## The borders of the background of the NVL-mode background window."
# gui.rpy:363
old "## The height of an NVL-mode entry. Set this to None to have the entries dynamically adjust height."
new "## The height of an NVL-mode entry. Set this to None to have the entries dynamically adjust height."
# gui.rpy:367
old "## The spacing between NVL-mode entries when gui.nvl_height is None, and between NVL-mode entries and an NVL-mode menu."
new "## The spacing between NVL-mode entries when gui.nvl_height is None, and between NVL-mode entries and an NVL-mode menu."
# gui.rpy:384
old "## The position, width, and alignment of nvl_thought text (the text said by the nvl_narrator character.)"
new "## The position, width, and alignment of nvl_thought text (the text said by the nvl_narrator character.)"
# gui.rpy:391
old "## The position of nvl menu_buttons."
new "## The position of nvl menu_buttons."
# gui.rpy:403
old "## This increases the size of the quick buttons to make them easier to touch on tablets and phones."
new "## This increases the size of the quick buttons to make them easier to touch on tablets and phones."
# gui.rpy:409
old "## This changes the size and spacing of various GUI elements to ensure they are easily visible on phones."
new "## This changes the size and spacing of various GUI elements to ensure they are easily visible on phones."
# gui.rpy:413
old "## Font sizes."
new "## Font sizes."
# gui.rpy:421
old "## Adjust the location of the textbox."
new "## Adjust the location of the textbox."
# gui.rpy:427
old "## Change the size and spacing of items in the game menu."
new "## Change the size and spacing of items in the game menu."
old "Please select a template to use for your new project. Ren'Py ships with a default template that creates an English-language game with standard screens."
new "Merci de sélectioner un patron à utiliser pour votre nouveau projet. Ren'Py est livré avec un patron par défaut qui créé un jeu en anglais avec des écrans standards."
# game/new_project.rpy:55
old "PROJECT NAME"
new "NOM DU PROJET"
# game/new_project.rpy:56
old "Please enter the name of your project:"
new "Entrez le nom de votre projet:"
# game/new_project.rpy:62
old "The project name may not be empty."
new "Le nom du projet ne doit pas être vide."
# game/new_project.rpy:67
old "[project_name!q] already exists. Please choose a different project name."
new "Le projet [project_name!q] éxiste déjà. Choisissez un nom de projet différend."
# game/new_project.rpy:70
old "[project_dir!q] already exists. Please choose a different project name."
new "Le projet [project_name!q] éxiste déjà. Choisissez un nom de projet différend."
# game/new_project.rpy:40
old "Please select a template to use for your new project. The template sets the default font and the user interface language. If your language is not supported, choose 'english'."
new "Sélectionnez un gabarit pour votre nouveau projet. Le gabarit définit la police par défaut, ainsi que la langue de l'interface. Si votre langue n'est pas supportée, sélectionnez 'english'."
old "## This file contains options that can be changed to customize your game."
new "## This file contains options that can be changed to customize your game."
# options.rpy:4
old "## Lines beginning with two '#' marks are comments, and you shouldn't uncomment them. Lines beginning with a single '#' mark are commented-out code, and you may want to uncomment them when appropriate."
new "## Lines beginning with two '#' marks are comments, and you shouldn't uncomment them. Lines beginning with a single '#' mark are commented-out code, and you may want to uncomment them when appropriate."
# options.rpy:10
old "## Basics"
new "## Basics"
# options.rpy:12
old "## A human-readable name of the game. This is used to set the default window title, and shows up in the interface and error reports."
new "## A human-readable name of the game. This is used to set the default window title, and shows up in the interface and error reports."
# options.rpy:15
old "## The _() surrounding the string marks it as eligible for translation."
new "## The _() surrounding the string marks it as eligible for translation."
# options.rpy:17
old "Ren'Py 7 Default GUI"
new "Ren'Py 7 Default GUI"
# options.rpy:20
old "## Determines if the title given above is shown on the main menu screen. Set this to False to hide the title."
new "## Determines if the title given above is shown on the main menu screen. Set this to False to hide the title."
# options.rpy:26
old "## The version of the game."
new "## The version of the game."
# options.rpy:31
old "## Text that is placed on the game's about screen. To insert a blank line between paragraphs, write \\n\\n."
new "## Text that is placed on the game's about screen. To insert a blank line between paragraphs, write \\n\\n."
# options.rpy:37
old "## A short name for the game used for executables and directories in the built distribution. This must be ASCII-only, and must not contain spaces, colons, or semicolons."
new "## A short name for the game used for executables and directories in the built distribution. This must be ASCII-only, and must not contain spaces, colons, or semicolons."
# options.rpy:44
old "## Sounds and music"
new "## Sounds and music"
# options.rpy:46
old "## These three variables control which mixers are shown to the player by default. Setting one of these to False will hide the appropriate mixer."
new "## These three variables control which mixers are shown to the player by default. Setting one of these to False will hide the appropriate mixer."
# options.rpy:55
old "## To allow the user to play a test sound on the sound or voice channel, uncomment a line below and use it to set a sample sound to play."
new "## To allow the user to play a test sound on the sound or voice channel, uncomment a line below and use it to set a sample sound to play."
# options.rpy:62
old "## Uncomment the following line to set an audio file that will be played while the player is at the main menu. This file will continue playing into the game, until it is stopped or another file is played."
new "## Uncomment the following line to set an audio file that will be played while the player is at the main menu. This file will continue playing into the game, until it is stopped or another file is played."
# options.rpy:69
old "## Transitions"
new "## Transitions"
# options.rpy:71
old "## These variables set transitions that are used when certain events occur. Each variable should be set to a transition, or None to indicate that no transition should be used."
new "## These variables set transitions that are used when certain events occur. Each variable should be set to a transition, or None to indicate that no transition should be used."
# options.rpy:75
old "## Entering or exiting the game menu."
new "## Entering or exiting the game menu."
# options.rpy:81
old "## A transition that is used after a game has been loaded."
new "## A transition that is used after a game has been loaded."
# options.rpy:86
old "## Used when entering the main menu after the game has ended."
new "## Used when entering the main menu after the game has ended."
# options.rpy:91
old "## A variable to set the transition used when the game starts does not exist. Instead, use a with statement after showing the initial scene."
new "## A variable to set the transition used when the game starts does not exist. Instead, use a with statement after showing the initial scene."
# options.rpy:96
old "## Window management"
new "## Window management"
# options.rpy:98
old "## This controls when the dialogue window is displayed. If \"show\", it is always displayed. If \"hide\", it is only displayed when dialogue is present. If \"auto\", the window is hidden before scene statements and shown again once dialogue is displayed."
new "## This controls when the dialogue window is displayed. If \"show\", it is always displayed. If \"hide\", it is only displayed when dialogue is present. If \"auto\", the window is hidden before scene statements and shown again once dialogue is displayed."
# options.rpy:103
old "## After the game has started, this can be changed with the \"window show\", \"window hide\", and \"window auto\" statements."
new "## After the game has started, this can be changed with the \"window show\", \"window hide\", and \"window auto\" statements."
# options.rpy:109
old "## Transitions used to show and hide the dialogue window"
new "## Transitions used to show and hide the dialogue window"
# options.rpy:115
old "## Preference defaults"
new "## Preference defaults"
# options.rpy:117
old "## Controls the default text speed. The default, 0, is infinite, while any other number is the number of characters per second to type out."
new "## Controls the default text speed. The default, 0, is infinite, while any other number is the number of characters per second to type out."
# options.rpy:123
old "## The default auto-forward delay. Larger numbers lead to longer waits, with 0 to 30 being the valid range."
new "## The default auto-forward delay. Larger numbers lead to longer waits, with 0 to 30 being the valid range."
# options.rpy:129
old "## Save directory"
new "## Save directory"
# options.rpy:131
old "## Controls the platform-specific place Ren'Py will place the save files for this game. The save files will be placed in:"
new "## Controls the platform-specific place Ren'Py will place the save files for this game. The save files will be placed in:"
# options.rpy:134
old "## Windows: %APPDATA\\RenPy\\<config.save_directory>"
new "## Windows: %APPDATA\\RenPy\\<config.save_directory>"
# options.rpy:136
old "## Macintosh: $HOME/Library/RenPy/<config.save_directory>"
new "## Macintosh: $HOME/Library/RenPy/<config.save_directory>"
# options.rpy:138
old "## Linux: $HOME/.renpy/<config.save_directory>"
new "## Linux: $HOME/.renpy/<config.save_directory>"
# options.rpy:140
old "## This generally should not be changed, and if it is, should always be a literal string, not an expression."
new "## This generally should not be changed, and if it is, should always be a literal string, not an expression."
# options.rpy:146
old "## Icon ########################################################################'"
new "## Icon ########################################################################'"
# options.rpy:148
old "## The icon displayed on the taskbar or dock."
new "## The icon displayed on the taskbar or dock."
# options.rpy:153
old "## Build configuration"
new "## Build configuration"
# options.rpy:155
old "## This section controls how Ren'Py turns your project into distribution files."
new "## This section controls how Ren'Py turns your project into distribution files."
# options.rpy:160
old "## The following functions take file patterns. File patterns are case- insensitive, and matched against the path relative to the base directory, with and without a leading /. If multiple patterns match, the first is used."
new "## The following functions take file patterns. File patterns are case- insensitive, and matched against the path relative to the base directory, with and without a leading /. If multiple patterns match, the first is used."
# options.rpy:165
old "## In a pattern:"
new "## In a pattern:"
# options.rpy:167
old "## / is the directory separator."
new "## / is the directory separator."
# options.rpy:169
old "## * matches all characters, except the directory separator."
new "## * matches all characters, except the directory separator."
# options.rpy:171
old "## ** matches all characters, including the directory separator."
new "## ** matches all characters, including the directory separator."
# options.rpy:173
old "## For example, \"*.txt\" matches txt files in the base directory, \"game/**.ogg\" matches ogg files in the game directory or any of its subdirectories, and \"**.psd\" matches psd files anywhere in the project."
new "## For example, \"*.txt\" matches txt files in the base directory, \"game/**.ogg\" matches ogg files in the game directory or any of its subdirectories, and \"**.psd\" matches psd files anywhere in the project."
# options.rpy:177
old "## Classify files as None to exclude them from the built distributions."
new "## Classify files as None to exclude them from the built distributions."
# options.rpy:185
old "## To archive files, classify them as 'archive'."
new "## To archive files, classify them as 'archive'."
# options.rpy:190
old "## Files matching documentation patterns are duplicated in a mac app build, so they appear in both the app and the zip file."
new "## Files matching documentation patterns are duplicated in a mac app build, so they appear in both the app and the zip file."
# options.rpy:196
old "## A Google Play license key is required to download expansion files and perform in-app purchases. It can be found on the \"Services & APIs\" page of the Google Play developer console."
new "## A Google Play license key is required to download expansion files and perform in-app purchases. It can be found on the \"Services & APIs\" page of the Google Play developer console."
# options.rpy:203
old "## The username and project name associated with an itch.io project, separated by a slash."
new "## The username and project name associated with an itch.io project, separated by a slash."
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.