Compare commits

...

239 Commits

Author SHA1 Message Date
Tom Rothamel 34616cdbd3 Fix sphinx build. 2014-01-30 22:22:09 -05:00
Tom Rothamel dfccf93175 Check for invalid characters when building distributions. 2014-01-30 22:03:26 -05:00
Tom Rothamel 34a62d74b5 Demo show layer. 2014-01-30 21:53:39 -05:00
Tom Rothamel 41c48a5941 Copy screens.rpy. 2014-01-29 22:06:44 -05:00
Tom Rothamel c4f2d2894b Allow testcases to be automated with a command line argument.
(This is to support test_all.py.)
2014-01-29 21:42:00 -05:00
Tom Rothamel fc77c0e0ec Use the nightly url for DLC, when on the nightly channel.
If we don't do this, the DLC won't be able to download, or might
be out of date.
2014-01-28 22:22:50 -05:00
Tom Rothamel 99fa4e9c15 Remove unused import. 2014-01-28 20:26:58 -05:00
Tom Rothamel 913a1078df Update copyright to 2014.
Also:

* Include the copyright in .rpy files.
* Fix missing copyrights.
* Add the BOM to .rpy/.rpym files that were missing it.
2014-01-27 22:58:15 -05:00
Tom Rothamel ed5e38727c Check BOM presence/absence. 2014-01-27 22:58:03 -05:00
Tom Rothamel 28a5d5fcf2 Check for the presence of the license as well as the copyright. 2014-01-27 22:35:07 -05:00
Tom Rothamel a96e9614c4 Update copyright scripts for new organization, 2014. 2014-01-27 22:17:46 -05:00
Tom Rothamel 598d4faea0 Add console and image load log to developer menu.
To get the console to work, changed the developer menu into a modal
screen that runs in the current context. Changed everything else to
work with this.
2014-01-27 00:19:12 -05:00
Tom Rothamel 3776ec0ef7 Bring the changelog up to date. 2014-01-26 23:09:31 -05:00
Tom Rothamel 8a2546a83c Fix problem introduced by rebase.
Since I don't know how to git.
2014-01-26 16:38:45 -05:00
Daniel Luque 566cb0f1cf Move: launcher/game/scrollbar_center.png 2014-01-26 16:36:31 -05:00
Daniel Luque 6fee9e81e9 Remove images 2014-01-26 16:36:31 -05:00
Daniel Luque 5ef6952c95 Change skins documentation. 2014-01-26 16:36:31 -05:00
Daniel Luque 366306b8cc The images has been moved to the "images".
launcher/game/background.png -->  launcher/game/images/background.png
launcher/game/checkbox_empty.png -->  launcher/game/images/checkbox_empty.png
launcher/game/checkbox_full.png -->  launcher/game/images/checkbox_full.png
launcher/game/logo.png --> launcher/game/images/logo.png
launcher/game/logo32.png -->  launcher/game/images/logo32.png
launcher/game/pattern --> launcher/game/images/pattern.png
launcher/game/vscrollbar_center.png -->  launcher/game/images/vscrollbar_center.png
launcher/game/winddow.png -->  launcher/game/images/window.png
2014-01-26 16:36:31 -05:00
Tom Rothamel 7d74ff010c Convert screens.rpy to using the style statement. 2014-01-26 12:47:19 -05:00
Tom Rothamel bb2a80f5e8 Allow the init statement to combine with any other statement.
This allows "init 1 define", "init 1 image", "init 1 style" and
other constructs to be one-liners.
2014-01-26 12:11:25 -05:00
Tom Rothamel 0c31f22fb4 Deal with set_parent. 2014-01-26 11:42:40 -05:00
Tom Rothamel fb74356541 Styles changelog. 2014-01-26 00:09:43 -05:00
Tom Rothamel ee18baed5e style.fixed and style.image should inherit from default.
Not _default.
2014-01-25 23:32:30 -05:00
Tom Rothamel 9f8b327aa8 Document new styles.
Apart from a lot of writing, this consisted of breaking the style
docs up into two files, one for the statements and python, and
a second one for the properties.
2014-01-25 23:24:38 -05:00
Tom Rothamel ba34df1a2e Add layers to appropriate MoveTransition results.
This fixes a problem that occured when a modal screen (that raised
IgnoreLayers) was placed inside a MoveTransition.
2014-01-25 00:17:17 -05:00
Tom Rothamel 35584ebcba If tkaskdir fails, explain why. 2014-01-24 23:31:36 -05:00
Tom Rothamel dedc3af9d4 Re-create .pyo files with documentation before building docs. 2014-01-23 22:46:35 -05:00
Tom Rothamel 57652ce002 Implement the "auto-forward after click" preference.
If true, a click will take Ren'Py out of auto-forward mode. The
default is false, and clicks will take Ren'Py out of auto-forward
mode.
2014-01-23 22:32:05 -05:00
Tom Rothamel 1f4f5e5030 Remove "Style Hierarchy" screen.
This doesn't work with the new style implementation, and it is
redundant to the new style inspector.
2014-01-22 22:15:47 -05:00
Tom Rothamel 0a6a43e139 Back out translation of the Style Test screen. 2014-01-22 22:06:18 -05:00
Tom Rothamel f930a2addb Merge pull request #278 from LuqueDaniel/update-es
Update Spanish translation and more
2014-01-22 18:41:27 -08:00
Tom Rothamel 77f3ba0198 Add the "show layer" statement.
This wraps the renpy.layer_at_list function, which allows one to apply
transforms to entire layers. The show layer statement currently takes
at lists and ATL.
2014-01-22 00:58:13 -05:00
Tom Rothamel 7dd98cd421 Backwards compatibility for Frame. 2014-01-21 12:28:09 -05:00
Tom Rothamel 3ebf9d4b28 Ignore layers that do not exist when clearing layers. 2014-01-21 11:56:00 -05:00
Tom Rothamel eefc1412fa Merge pull request #276 from antoinentx/patch-2
create french translation
2014-01-20 20:59:31 -08:00
Tom Rothamel a0f38b9442 Ignore traceback.txt and errors.txt files when distributing Ren'Py. 2014-01-20 23:50:28 -05:00
Tom Rothamel 123e96b872 Detect the names of templates to compile.
Since we have so many of them. World domination - achieved.
2014-01-20 23:43:27 -05:00
Daniel Luque 14672d6f9b Update translation common.rpy 2014-01-20 13:54:49 +01:00
Daniel Luque ccc950a703 Fixed some errors caused by commit aee59b6 2014-01-20 13:10:04 +01:00
Daniel Luque aee59b6a05 More, Make translatable developer.rpym 2014-01-20 13:03:55 +01:00
Daniel Luque 1a5345f089 Make translatable "Developer Menu" title
Make translatable renpy/common/_developer/developer.rpym line 44
2014-01-20 12:48:24 +01:00
Daniel Luque 6ee705dd21 Update translation template spanish 2014-01-20 12:35:32 +01:00
Daniel Luque fe197216b9 Update translation common.rpy 2014-01-20 12:34:56 +01:00
Daniel Luque 462730fcae Update translation updater.rpy 2014-01-20 11:53:25 +01:00
Daniel Luque 972da30f8c Update translation project.rpy 2014-01-20 11:37:53 +01:00
Daniel Luque 5f07ce8c32 Update translation android.rpy 2014-01-20 09:49:58 +01:00
Tom Rothamel 1940c98e67 Syntax-hilight style as a keyword. 2014-01-19 23:41:34 -05:00
Tom Rothamel c1f8a23f17 Add the android_build subcommand to the launcher.
This provides a way of invoking the new Android build process from
the launcher.
2014-01-19 23:29:32 -05:00
Tom Rothamel 7da459ae63 Make the nightly channel available through the updater. 2014-01-19 22:29:32 -05:00
Tom Rothamel 9125823bc9 Properly handle non-acceptance of Android terms and conditions. 2014-01-19 21:24:24 -05:00
Tom Rothamel 188a0bac0a Fix re-launching of Ren'Py. 2014-01-19 21:24:02 -05:00
Tom Rothamel 7d33f1663c Use the DLC system to download RAPT. 2014-01-19 21:13:47 -05:00
Tom Rothamel d3c075e11f Update .gitignore. 2014-01-19 00:51:16 -05:00
Tom Rothamel 2c984ed8f5 Include the common directory in the android distribution.
This prevents us from having to include common/ twice,
once in Ren'Py and once in RAPT.
2014-01-19 00:26:58 -05:00
Tom Rothamel 7f3563bcb0 Do not use "experimental" as a distribution name.
We use it for a symlink, and using it twice led to problems.
2014-01-19 00:25:37 -05:00
Tom Rothamel a6ab0e84e6 Fix SDK writing. 2014-01-18 18:32:00 -05:00
Tom Rothamel d40dc4acc6 Build RAPT before distribute. Supply path to Ren'Py to RAPT build.
The former is in preparation to distributing RAPT as part of Ren'Py.

The latter is so that we can build RAPT as part of a nightly build.
2014-01-18 18:15:24 -05:00
Tom Rothamel d9d8eb4175 Report errors when launching a waited-on project fails. 2014-01-17 23:20:33 -05:00
Tom Rothamel 18df24da42 Fix vertical scrollbar in error messages. 2014-01-17 23:03:46 -05:00
Tom Rothamel 99f4b021d3 Simple expressions can now include operators. 2014-01-17 00:02:50 -05:00
Tom Rothamel 19bc668e0a Convert to using the style statement. 2014-01-16 23:10:57 -05:00
Tom Rothamel fe0a6a8e47 Correctly parse multi-line property assignments. 2014-01-16 23:10:39 -05:00
Tom Rothamel d8c51b32b2 Error out if a style is too complex.
A style is too complex if inheritance goes more than 100 layers
deep. The most common reason for this is likely that there's a
loop in the style inheritance graph.
2014-01-15 23:51:14 -05:00
Tom Rothamel 92b1a67e4a Convert 00style.rpy to using style statements.
As part of this, move the list styles into the developer.rpym file.
2014-01-15 23:47:08 -05:00
Tom Rothamel 5a41588969 Initialize the root of the style hierarchy. 2014-01-15 23:46:16 -05:00
Tom Rothamel 749236868a Allow style names to be keywords.
We have some style names, like transform, that correspond to
keywords.
2014-01-15 23:45:20 -05:00
Tom Rothamel c741f0cded Use the style statement to define styles. 2014-01-15 22:06:21 -05:00
Tom Rothamel 638ecbbd2a Add support for style.create. 2014-01-15 22:06:11 -05:00
Tom Rothamel 697664de8f Use the style statement to define styles in _errorhandling.rpym. 2014-01-14 18:32:24 -05:00
antoinentx b66379b203 Create screens.rpy 2014-01-14 19:22:29 +01:00
antoinentx 92492d1198 Create common.rpy 2014-01-14 19:22:08 +01:00
antoinentx a325ea8bff Create script.rpy 2014-01-14 19:21:35 +01:00
antoinentx 4b3627a1e3 Create screens.rpy 2014-01-14 19:20:52 +01:00
antoinentx 44ea36b475 Create options.rpy 2014-01-14 19:19:38 +01:00
antoinentx 1348a53fa8 Create README.html 2014-01-14 19:18:50 +01:00
antoinentx c34c8ebd3c Create project.json 2014-01-14 19:18:20 +01:00
Tom Rothamel e2650d11dd Deal with .take() and .clear() 2014-01-14 01:04:49 -05:00
Tom Rothamel a73abc82e3 Script to turn python styles into style statements. 2014-01-14 00:54:30 -05:00
Tom Rothamel d08933ce88 Fixes to newer code to work when building RAPT. 2014-01-12 23:20:10 -05:00
Tom Rothamel 09ca171e81 Log more progress information to android.txt. 2014-01-12 23:18:02 -05:00
Tom Rothamel 7affd8cfbb Deal with unicode TODOS. 2014-01-12 20:30:02 -05:00
Tom Rothamel 73763275fb Fix termination. 2014-01-12 19:39:28 -05:00
Tom Rothamel 9d93ef10b5 Store say_attributes as part of the context.
A problem was reported that Ren'Py would crash on a shift+R
reload. It turned out that while displaying the reload message,
Ren'Py would use the attributes from the previous say statement.

This fixes that.
2014-01-12 14:57:26 -05:00
antoinentx 6fd7fd89e5 Create updater.rpy 2014-01-12 14:35:29 +01:00
antoinentx 3fa1dbe10e Create translations.rpy 2014-01-12 14:34:46 +01:00
antoinentx f52735ef53 Create style.rpy 2014-01-12 14:34:22 +01:00
antoinentx 50988a167b Create project.rpy 2014-01-12 14:33:55 +01:00
antoinentx 60232028c2 Create preferences.rpy 2014-01-12 14:33:33 +01:00
antoinentx f1384edaf5 Create new_project.rpy 2014-01-12 14:33:06 +01:00
antoinentx bed8233afe Create navigation.rpy 2014-01-12 14:32:40 +01:00
antoinentx a1fd8c6d1c Create interface.rpy 2014-01-12 14:32:00 +01:00
antoinentx 8868d6c99a Create front_page.rpy 2014-01-12 14:31:38 +01:00
antoinentx 293b191739 Create editor.rpy 2014-01-12 14:30:49 +01:00
antoinentx ce4ebffd69 Create distribute_gui.rpy 2014-01-12 14:30:13 +01:00
antoinentx b08a0daa10 Create distribute.rpy 2014-01-12 14:29:36 +01:00
antoinentx 3bd0557948 Create common.rpy 2014-01-12 14:29:11 +01:00
antoinentx 5ceb663fb3 Create choose_theme.rpy 2014-01-12 14:28:26 +01:00
antoinentx 8c684678c9 Create android.rpy 2014-01-12 14:27:54 +01:00
antoinentx 8749f3d178 Create add_file.rpy 2014-01-12 14:27:21 +01:00
antoinentx a001313516 create french translation 2014-01-12 14:20:45 +01:00
Tom Rothamel 4fc8554384 Tweak sunflower-slow-drag.ogg.
* Trim silence at the start and end.
* Compress the volume, to make the quiet parts a little louder, and vice versa.
2014-01-11 15:27:34 -05:00
Tom Rothamel 91f0b8452a Report missing _renpy, and offer a suggestion on what to do about it. 2014-01-11 11:59:42 -05:00
Tom Rothamel d1d71b8065 Remove old style code. 2014-01-11 11:49:04 -05:00
Tom Rothamel 96929bce42 Return an error code to the os when an exception occurs. 2014-01-11 11:39:18 -05:00
Tom Rothamel 3c38654a8b Remove obsolete module version checking code. 2014-01-11 11:28:51 -05:00
Tom Rothamel baeb458879 Merge pull request #275 from tlm-2501/master
Fix some comments in options.rpy, and a typo in the docs.
2014-01-10 21:00:09 -08:00
Tom Rothamel 7ecb7a36a0 Deal with a rollback after retain_after_load.
It's not enough to simply discard the rollback information on
retain_after_load, we need to retain it and roll it back when
the next rollback occurs.
2014-01-10 23:51:29 -05:00
Tom Rothamel a688687736 Check in images used in testcases. 2014-01-09 23:49:53 -05:00
Tom Rothamel 32c904935b Check in generated docs. 2014-01-09 23:49:33 -05:00
Tom Rothamel 1484505bd4 Document renpy.retain_after_load(). 2014-01-09 23:48:57 -05:00
Tom Rothamel cba6a15dda Do not strip docstrings in run.sh. 2014-01-09 23:47:50 -05:00
Tom Rothamel c4cc830b7a Implement renpy.retain_after_load()
This does not rollback data that is changed between the current
statement and the next checkpoint. The main use case is to be able
to save while a screen is displayed using call screen.

For example, a user can be assigning points to a character in a
screen, save, load, and have the same points assigned.
2014-01-09 22:45:45 -05:00
tlm-2501 e83ec927de Fix another typo in android-packaging.rst
APs -> APKs.
2014-01-09 12:59:34 +03:00
tlm-2501 caa9ebc25c Fix typo in docs (android-packaging.rst)
Changed "android.keyring" to "android.keystore" to represent the valid filename.
2014-01-09 12:40:37 +03:00
tlm-2501 9175fad5c1 theme.roundrect is no logner the only theme. Fixed options.rpy accordingly. 2014-01-09 11:49:01 +04:00
tlm-2501 13d8861459 Fixed... another typo in options.rpy. Whoops. 2014-01-09 11:47:52 +04:00
tlm-2501 7e7525e3d3 Merge branch 'master' of https://github.com/tlm-2501/renpy 2014-01-09 11:47:28 +04:00
tlm-2501 6e789307ef Fixed typos in options.rpy of the English template. 2014-01-09 11:46:57 +04:00
tlm-2501 ec8308b82c Fixed typo in options.rpy of the English template. 2014-01-09 11:44:52 +04:00
Tom Rothamel f5efeec320 Merge pull request #272 from tlm-2501/master
Russian translation.
2014-01-08 19:46:39 -08:00
Tom Rothamel 649fda046c Rename place_images -> get_image_bounds, add testcase. 2014-01-08 22:45:42 -05:00
Tom Rothamel dcd829931c Remove the shift+Y binding to dump styles.
It wasn't used all that much, and it's made redundant by the new
style inspector.
2014-01-08 22:22:37 -05:00
Tom Rothamel d63f5ba134 Run functional testcases w/o human intervention. 2014-01-08 00:54:04 -05:00
Tom Rothamel 647c1a026b Fix indexed styles in lint. 2014-01-07 23:54:17 -05:00
Tom Rothamel 3ea8d6a368 Better error handling for style properties.
When a style property is invalid, we report the name of the
style and the name of the property.
2014-01-07 23:36:36 -05:00
Tom Rothamel 625a6afb1f Fix lint to work with the new style system. 2014-01-07 23:36:11 -05:00
Tom Rothamel 9d8ccec0ee Ignore spurious PyDev warnings. 2014-01-07 21:58:42 -05:00
Tom Rothamel 32554bf5e6 Merge pull request #262 from vbkaisetsu/fix-doc
fix line breaking
2014-01-06 18:52:35 -08:00
Tom Rothamel a03c4d6f39 Merge pull request #265 from CensoredUsername/master
added extra arguments for the screen to ShowMenu()
2014-01-06 18:52:27 -08:00
Tom Rothamel eeefba5a45 Save persistent data to disk before we suspend on android.
This is needed because we might be killed by suspend. If we're killed,
we'll reload the game, but persistent data (incl preferences) will be
lost - unless we save it.
2014-01-06 21:50:49 -05:00
tlm-2501 22d87d62d6 Added a Russian template for a new game. 2014-01-07 05:31:42 +04:00
tlm-2501 8a1d6cd934 Added Russian translation for the launcher. 2014-01-07 04:27:17 +04:00
Tom Rothamel 5769fbfb5a Fix get_text_style.
It didn't handle default correctly.
2014-01-05 23:16:24 -05:00
Tom Rothamel 6912acaa3d Quote newlines in Text.__unicode__. 2014-01-05 22:42:40 -05:00
Tom Rothamel 1df3f281fd Add the ability to inspect a style and display the properties
that contribute to the displayable.
2014-01-05 22:33:49 -05:00
Tom Rothamel f1c0df3156 Allow viewports shrink to fit their content.
This only occurs when the viewports have xfill or yfill set
to False.
2014-01-05 20:21:02 -05:00
Tom Rothamel 6c5c1ff1bd Hide the Fixed immediately inside a screen.
It's not that interesting, since it's always there and never has
properties.
2014-01-05 00:54:07 -05:00
Tom Rothamel e37c0ac09b Use slightly nicer names for screens. 2014-01-05 00:24:52 -05:00
Tom Rothamel c0572eb996 Redesign style inspector into displayable inspector. 2014-01-04 23:41:39 -05:00
Tom Rothamel 1b745a9c21 Split _developer.rpym into multiple modules. 2014-01-04 22:37:54 -05:00
Tom Rothamel cc855e3573 Merge pull request #269 from vbkaisetsu/default-env
Please set "cython" to RENPY_CYTHON
2014-01-04 16:35:20 -08:00
Tom Rothamel 7089bb2d95 Merge pull request #270 from LuqueDaniel/update-es
Update Spanish translation
2014-01-04 16:33:50 -08:00
Koichi Akabe 256d33e20f set "cython" as a default variable of RENPY_CYTHON 2014-01-04 18:56:11 +09:00
Daniel Luque d6b66629e0 Replace string
Replace: "Pantalla guardada como" --> "Captura de pantalla guardada como"
2014-01-04 07:01:11 +01:00
Daniel Luque d813a1b58f Adds new strings
Add new strings related to commit 7f6c8ef
2014-01-04 06:48:21 +01:00
Tom Rothamel 7f6c8efb57 Display blurb each time we launch a game.
For now, these blurbs teach users about keyboard features, like
shift+R and shift+O.
2014-01-03 23:41:22 -05:00
Tom Rothamel af5420c949 Add Style.inspect()
This is a method that, when called on a style, returns a list giving,
for each parent of the style:

* The name of the parent.
* A dictionary that, for each property that affects the inspected
  style. gives the property name and its value.
2014-01-03 01:09:31 -05:00
Tom Rothamel 5b28bc1bcd Generate information used by style inspection. 2014-01-03 01:09:00 -05:00
Tom Rothamel 42d5d62575 Add a variant clause to the style statement.
This lets us use different styles for different variants. For example,
we can use a style for touch devices that increases the size of
buttons, so the player can touch them.
2014-01-02 01:27:35 -05:00
Tom Rothamel 525657843c renpy.variants can check for a list of variants. 2014-01-02 01:27:16 -05:00
Tom Rothamel c4b15d9c84 Improvements to the style statment.
* The take clause takes properties from another style.
* The clear clause deletes all properties.
* The del clause deletes one property.
2014-01-02 00:42:27 -05:00
Tom Rothamel 099f3d5cc8 Make the style statement more renpythonic.
It can now be written on a single line, or on multiple lines
with a block of property/value pairs.
2014-01-01 13:50:51 -05:00
Tom Rothamel 07b4407f03 Export sets of style property names, so we can test against
them.
2014-01-01 11:23:36 -05:00
Tom Rothamel e8adb1b30b style statement: More checking. 2014-01-01 11:23:24 -05:00
Tom Rothamel 8995873089 Initial implementation of the style statement.
This is a statement that adds syntax (in the usual Ren'Py form of word
<expr>) for defining styles.

Happy new year.
2014-01-01 00:44:53 -05:00
Tom Rothamel cda0083a3e Add renpy.styleclass to builds. 2013-12-31 23:42:43 -05:00
Tom Rothamel e32eae2946 Ensure the output of generate_style is deterministic.
This prevents us from regenerating the files, and ensures that
ccache always gets the same file.
2013-12-31 23:41:46 -05:00
Tom Rothamel b6a1c28bfc Generate code in binary mode. 2013-12-31 22:24:14 -05:00
Tom Rothamel 457673a3bb Create the gen directory if it doesn't exist. 2013-12-31 22:00:46 -05:00
Tom Rothamel 10f2620590 Generate the styles files upon checkout. 2013-12-31 21:43:50 -05:00
Tom Rothamel 9d9c924d82 Update README.rst. 2013-12-31 00:26:28 -05:00
Tom Rothamel 23a7f8d00d Merge branch 'master' of github.com:paulmorio/renpy 2013-12-30 23:34:55 -05:00
Tom Rothamel 259c010d4e Fix get_text_style. 2013-12-30 23:25:58 -05:00
Tom Rothamel b728d85b00 Use RENPY_CC and RENPY_LD environment variables during build.
One use of this might be to enable ccache if it's known to
be available.
2013-12-30 21:50:27 -05:00
Tom Rothamel bf1e3af046 Fixes to styles.
* Only set the style name if it's not already set. This is for
  compatibility with the way the old style code did it.

* Do not auto-create styles beginning with _. This prevents us
  from accidentally creating a style that inherits from a
  non-underscore style.
2013-12-29 23:00:40 -05:00
Tom Rothamel bfb8bbfc29 Allow styles to be pickled. 2013-12-29 22:58:29 -05:00
Tom Rothamel 259dd579eb Ignore missing music after rollback.
Not style-related, but this was needed to load old saves so I could
test style loading.
2013-12-29 20:54:01 -05:00
Tom Rothamel 8554a64c8b More style improvmements:
* activate_sound and hover_sound are now their own style properties,
  and work again.
* Other than that, we ignore the various selected_activate and activate_
  style properties.
2013-12-29 14:48:16 -05:00
Tom Rothamel 36c8ed2648 Many minor fixes to the new style system.
Together, these are enough to get Ren'Py starting up.
2013-12-29 02:00:14 -05:00
Tom Rothamel a02ee4cef0 Replace the old style system with the new style system. 2013-12-29 00:07:41 -05:00
Tom Rothamel 5e337bb971 Add various style functions used by other modules.
These haven't been tested - I'm checking them in so I can rename things.
2013-12-28 22:22:45 -05:00
Tom Rothamel 4e2916c3f0 Implement style property retrieval with inheritance. 2013-12-27 23:19:35 -05:00
Tom Rothamel c4ebac7fcf Build all styles. 2013-12-27 23:04:46 -05:00
Tom Rothamel 01899980a5 Add some style unit tests. 2013-12-26 23:48:30 -05:00
Tom Rothamel 11c4f64f9d Implement style naming.
This includes the StyleManager class and style indexing.
2013-12-26 23:47:46 -05:00
M v H 0334c56441 added extra arguments for the screen to ShowMenu() 2013-12-27 03:22:31 +01:00
Tom Rothamel f63731d18d Implement Style.set_prefix. 2013-12-26 01:18:17 -05:00
Tom Rothamel 33c07fc986 Add various fields to the pxd. 2013-12-26 01:17:57 -05:00
Tom Rothamel 7a398bc847 Break styleaccel up into two files.
The new styleclass.pyx file contains the Style class. We compile it
separately since it's huge, and changes rarely.
2013-12-25 23:56:32 -05:00
Tom Rothamel e9dbadab56 Build styles and retrive attributes from a single style. 2013-12-25 00:16:11 -05:00
Tom Rothamel 622bfa44fb Start generating the Style class.
The style class has properties supporting set and delete for each
prefixed style property.
2013-12-24 16:35:25 -05:00
Tom Rothamel 73cfd1b29c Fix renpy.import_all()
Doing:

    import renpy; renpy.import_all()

now works, so we can use it in test code.
2013-12-24 16:16:41 -05:00
Tom Rothamel eae987f665 Generate style property functions.
These are functions that take the value being assigned to a style,
process it if necessary, and assign it to each style's cache.
2013-12-24 01:02:47 -05:00
Tom Rothamel bcd95d937c Add style properties and synthetic properties to generate_styles. 2013-12-23 22:24:39 -05:00
Tom Rothamel 87fea5b4c7 Start work on style generation code.
First off, we create a list of prefixes and the order in which
they are stored.
2013-12-23 22:02:03 -05:00
Koichi Akabe ee29f1c2c0 fix typo 2013-12-23 14:31:25 +09:00
Tom Rothamel 995d483072 Add renpy.place_image.
This returns the bounding box containing an image that's currently
being shown.

Fixes #255, or at least the underlying request.
2013-12-22 23:00:40 -05:00
Tom Rothamel 5a209b0384 Add Preferences("display", "any window").
This is selected when in any windowed mode, and changes back to the previous
window size.
2013-12-21 12:27:40 -05:00
Tom Rothamel db6911da6d Change the tutorial music to Sunflower Slow Drag.
This was the music used (as a midi file) for the very oldest versions
of the Ren'Py.

We use a 1994 recording by the US Marine Band, taken from
Wikipedia. It's public domain due to age (of the original) and due to
being the work of the US Government (for the recording).
2013-12-21 11:10:37 -05:00
Tom Rothamel 2e2d29b0f5 Do not include binary files in the source distro.
Fixes #256.
2013-12-20 23:59:23 -05:00
Koichi Akabe 77fc911f7e fix line breaking 2013-12-20 14:44:42 +09:00
Tom Rothamel a4f659387f QuickSave shouldn't take a screenshot while in a menu.
Fixes #251.
2013-12-19 23:12:57 -05:00
Tom Rothamel 33a452dab6 Merge pull request #261 from vbkaisetsu/fix-doc
fix typos
2013-12-19 20:01:19 -08:00
Koichi Akabe d9b4d916c8 fix typos 2013-12-20 12:55:21 +09:00
Tom Rothamel 599cc25f7c Fix documentation.
Thanks to Koichi Akabe for the proofreading.
2013-12-18 23:27:12 -05:00
Tom Rothamel 4054cd1c72 Add the pixel_width property to input.
This allows one to limit the width of an input field to a certain
number of pixels.

Fixes #254.
2013-12-18 23:14:22 -05:00
Tom Rothamel eb1f96ad20 Merge pull request #259 from kyouryuukunn/fix_doc
fix typo
2013-12-16 19:44:41 -08:00
kyouryuukunn c1d1a766c7 fix typo 2013-12-16 18:51:11 +09:00
Tom Rothamel 2cb7632e96 Fix sense of environment-encoding test. 2013-12-16 01:35:12 -05:00
Tom Rothamel e14464081e Report NO_RAPT before NO_JDK.
On Windows, RAPT is responsible for detecting the JDK. If RAPT is
missing, the JDK will also be reported missing - even if it's
installed.

Changing the reporting order makes this less confusing.
2013-12-15 22:02:20 -05:00
Tom Rothamel 49fa613b48 Fix typo that broke Android.
We copied script_version.rpy onto script_version.rpyc, which
made things fail to start on Android.
2013-12-15 20:22:17 -05:00
Tom Rothamel c7dca40479 Document alternate. 2013-12-14 14:51:33 -05:00
Tom Rothamel d9d7801a50 When ignoring a touch, move the "mouse" offscreen.
This will cause any focused button to lose focus until the user
touches the screen again.
2013-12-14 02:23:39 -05:00
Tom Rothamel 44edd1c723 Invoke the alternate action on longpress. 2013-12-14 00:48:44 -05:00
Tom Rothamel a46ddc9e55 Add an alternate action to Button.
On devices that support it, an alternate action is triggered by
right-click.
2013-12-13 00:27:58 -05:00
Tom Rothamel c12560fed3 Merge pull request #257 from LuqueDaniel/fix-rmtree
Fix delete the tmp directory
2013-12-12 06:08:10 -08:00
Daniel Luque f7dbfeec3f Fix delete the tmp directory 2013-12-12 12:33:00 +01:00
Tom Rothamel 2b44ffe0e2 Add FileCurrentScreenshot.
This is a displayable that accesses the screenshot stored by
FileTakeScreenshot or ShowMenu.

Fixes #253.
2013-12-11 23:09:38 -05:00
Tom Rothamel 643fe8928b More documentation and flagging as undocumented. 2013-12-10 19:04:25 -05:00
Tom Rothamel a6f9d787ef Document NoRollback as class, not function. 2013-12-09 23:17:54 -05:00
Tom Rothamel cf993a71da Document renpy.map_event. 2013-12-09 23:07:37 -05:00
Tom Rothamel 8f9ecee00a Ignore errors in OpenDirectory. 2013-12-09 22:23:40 -05:00
Tom Rothamel 8ffe6eaad4 Document NoRollback. 2013-12-09 22:16:16 -05:00
Tom Rothamel 3256bd10b7 Remove renpy.toggle_music.
Fixes #252.
2013-12-08 11:42:55 -05:00
Tom Rothamel 2b5bf3055e Fix bug where Reply would not properly evaluate locked=None. 2013-12-07 23:55:31 -05:00
Tom Rothamel 51743d03e6 Check in inc/disp_grid. 2013-12-07 23:54:41 -05:00
Tom Rothamel 50fdc88754 Document Grid. 2013-12-07 16:38:21 -05:00
Tom Rothamel f04f3e7961 Ensure that all generated documentation is included. 2013-12-06 23:23:56 -05:00
Tom Rothamel d38e96dfac Check documentation for unused includes. 2013-12-06 21:14:03 -05:00
Tom Rothamel d09f5764bd Documentation. 2013-12-06 20:40:48 -05:00
Tom Rothamel 608a55b942 Allow Ren'Py to compile with freetype 2.5.1.
Fixes #250.
2013-12-05 22:41:30 -05:00
Tom Rothamel 0141ef770e Change list_saved_games as well.
Thanks, zorexx.
2013-12-04 22:50:51 -05:00
Tom Rothamel d936a9a28b scan_saved_game should use _save_name, not _extra_info. 2013-12-04 11:24:28 -05:00
Tom Rothamel bc941d4e7a Link variables and classes in the reserved names list. 2013-12-03 20:31:06 -05:00
Tom Rothamel a777919dcf Adjust how default_afm_enable works.
Previously, it set afm_enable on every startup. Now when afm_enable
is not None, afm_enable is persisted.
2013-12-02 21:39:36 -05:00
Tom Rothamel 73c9479474 Default preferences.mouse_move to enabled.
If a creator decides to use MouseMove, it should work by default.
2013-12-01 19:22:15 -05:00
Tom Rothamel 179af6dffb Simplify the actions so there's just MouseMove. 2013-12-01 19:21:49 -05:00
Tom Rothamel 8cab84384b Do not block during mouse moves. 2013-12-01 19:18:19 -05:00
Tom Rothamel 92e0e32c83 Merge pull request #233 from kyouryuukunn/set_mouse_pos
Functions and actions to set the mouse position.
2013-12-01 13:44:43 -08:00
Tom Rothamel 0f73bda3a5 Fix distribution script in case where we're at a tag.
When we're exactly at a base revision, the description relative to the
tag is missing some components.
2013-11-30 12:28:30 -05:00
kyouryuukunn e57842386c fix doc 2013-11-14 14:37:33 +09:00
morio b03f96a756 Fix for smaller issues, will work on second major issue soon 2013-11-13 23:29:13 +00:00
kyouryuukunn 4d553c9db6 add MouseMove and MouseJump action 2013-11-13 18:58:00 +09:00
kyouryuukunn 61f09261d4 add renpy.set_mouse_pos() 2013-11-13 18:11:34 +09:00
paulmorio bf98392005 Forgot final line on README 2013-11-08 13:39:31 +00:00
paulmorio 037686e7a1 More installation options for sphinx and cython if global rights. 2013-11-08 13:27:13 +00:00
morio 9df83fb0ae Format and look for README 2013-11-08 13:22:29 +00:00
morio 1486757426 Fixed codeblocks for new README 2013-11-08 13:18:46 +00:00
morio b9671f7c77 README altered to show more information and options in building renpy 2013-11-08 13:10:47 +00:00
328 changed files with 13310 additions and 3951 deletions
+4 -4
View File
@@ -5,15 +5,15 @@
*.pyo
*~
*.bak
*.bak
saves
tmp
cache
log.txt
errors.txt
traceback.txt
/errors.txt
/traceback.txt
styles.txt
@@ -51,4 +51,4 @@ styles.txt
dl
renpy/vc_version.py
.externalToolBuilders
rapt-*
rapt
+113 -27
View File
@@ -4,46 +4,132 @@ The Ren'Py Visual Novel Engine
http://www.renpy.org
Ren'Py development takes place on the ``master`` branch, and occasionally
on feature branches.
Branches
========
Getting Started
===============
Ren'Py development takes place on two branches, ``master`` and
``devel``, as well as the occasional feature branch.
Ren'Py depends on a number of python modules written in Cython and C. For
changes to Ren'Py that only involve python modules, you can use the modules
found in the latest nightly build. Otherwise, you'll have to compile the
modules yourself.
Master
-----
The development scripts assume a POSIX-like platform. The scripts should run
on Linux or Mac OS X, and can be made to run on Windows using an environment
like Msys.
The master branch contains code that can be run using the libraries in
the latest (release or pre-release) version of Ren'Py. It's used for
bugfixes and features that do not require C or Cython code to
implement.
Nightly Build
-------------
After checking out master, run::
Nightly builds can be downloaded from:
./after_checkout.sh <path-to-renpy>
http://nightly.renpy.org
to link in the libraries from the most recent Ren'Py. (On Windows, you
will need to run this under msys or cygwin.)
Note that the latest nightly build is at the bottom of the list. Once you've
unpacked the nightly, change into this repository, and run::
Ren'Py can then be run by running renpy.exe, renpy.sh, or renpy.app as
appropriate.
./after_checkout.sh <path-to-nightly>
Devel
-----
Once this script completes, you should be able to run Ren'Py using renpy.sh,
renpy.app, or renpy.exe, as appropriate for your platform.
The devel branch contains code that requires a recompile of modules
implemented in C or Cython. Building devel requires you to have the
prerequisite libraries installed. Then set RENPY_DEPS_INSTALLED to
a \::-separated list of paths containing dependencies. For example::
If the current nightly build doesn't work, please wait 24 hours for a new
build to occur. If that build still doesn't work, contact Tom (`pytom at bishoujo.us`,
or @renpytom on twitter) to find out what's wrong.
export RENPY_DEPS_INSTALL=/usr::/usr/lib/x86_64-linux-gnu/
The ``doc`` symlink will dangle until documentation is built, as described
below.
Finally, change into the modules directory, and run::
Compiling the Modules
----------------------
python setup.py install
Building the modules requires you have the many dependencies installed on
your system. On Ubuntu, these dependencies can be installed with the
command::
Ren'Py can then be run by using python to run renpy.py.
apt-get install python-dev python-pygame libavcodec-dev libavformat-dev \
libfreetype6-dev libglew1.6-dev libsdl1.2-dev libsdl-image1.2-dev \
libfribidi-dev libswscale-dev libesd0-dev libpulse-dev
Other platforms may have an equivalent command. Otherwise, you'll need to
build `renpy-deps <https://github.com/renpy/renpy-deps>`_.
We strongly suggest installing the Ren'Py modules into a Python
virtualenv. `This page <http://dabapps.com/blog/introduction-to-pip-and-virtualenv-python/>`_
describes how to install pip and the virtualenv tool, and set up a new virtualenv.
After activating the virtualenv, install cython::
pip install -U cython
Next, set RENPY_DEPS_INSTALL To a \::-separated list of paths containing the
dependencies, and RENPY_CYTHON to the name of the cython command::
export RENPY_DEPS_INSTALL=/usr::/usr/lib/x86_64-linux-gnu/
export RENPY_CYTHON=cython
Finally, change into the `modules` directory, and run::
python setup.py install
Ren'Py will be installed into the activated virtualenv. It can then be run
using the command::
python -O renpy.py
Documentation
=============
Building
--------
Building the documentation requires Ren'Py to work. You'll either need to
link in a nightly build, or compile the modules as described above. You'll
also need the `Sphinx <http://sphinx-doc.org/>`_ documentation generator.
If you have pip working, install Sphinx using::
pip install -U sphinx
Once Sphinx is installed, change into the ``sphinx`` directory inside the
Ren'Py checkout and run::
./build.sh
Format
------
Ren'Py's documentation consists of reStructuredText files found in sphinx/source, and
generated documentation found in function docstrings scattered throughout the code. Do
not edit the files in sphinx/source/inc directly, as they will be overwritten.
Docstrings may include tags on the first few lines:
\:doc: `section` `kind`
Indicates that this functions should be documented. `section` gives
the name of the include file the function will be documented in, while
`kind` indicates the kind of object to be documented (one of ``function``,
``method`` or ``class``. If omitted, `kind` will be auto-detected.
\:name: `name`
The name of the function to be documented. Function names are usually
detected, so this is only necessary when a function has multiple aliases.
\:args: `args`
This overrides the detected argument list. It can be used if some arguments
to the function are deprecated.
For example::
def warp_speed(factor, transwarp=False):
"""
:doc: warp
:name: renpy.warp_speed
:args: (factor)
Exceeds the speed of light.
"""
renpy.engine.warp_drive.engage(factor)
Contributing
@@ -51,5 +137,5 @@ Contributing
For bug fixes, documentation improvements, and simple changes, just
make a pull request. For more complex changes, it might make sense
to file an issue so we can discuss the design.
to file an issue first so we can discuss the design.
+36 -29
View File
@@ -8,8 +8,9 @@ import compileall
import shutil
import subprocess
import argparse
import glob
CWD = os.getcwdu()
ROOT = os.path.dirname(os.path.abspath(__file__))
def copy_tutorial_file(src, dest):
"""
@@ -59,7 +60,11 @@ def main():
s = subprocess.check_output([ "git", "describe", "--tags", "--dirty", "--match", match_version ])
parts = s.strip().split("-")
vc_version = int(parts[1])
if len(parts) <= 2:
vc_version = 0
else:
vc_version = int(parts[1])
if parts[-1] == "dirty":
vc_version += 1
@@ -76,7 +81,7 @@ def main():
# Check that the versions match.
full_version = ".".join(str(i) for i in renpy.version_tuple) #@UndefinedVariable
if args.version != "experimental" \
if args.version != "renpy-experimental" \
and not args.version.startswith("renpy-nightly-") \
and not full_version.startswith(args.version):
@@ -100,11 +105,35 @@ def main():
# Compile the various games.
if not args.fast:
for i in [ 'tutorial', 'launcher', 'templates/english', 'templates/japanese', 'the_question' ]:
for i in [ 'tutorial', 'launcher', 'the_question' ] + glob.glob("templates/*"):
print "Compiling", i
subprocess.check_call(["./renpy.sh", i, "quit" ])
# Kick off the rapt build.
if not args.fast:
out = open("/tmp/rapt_build.txt", "wb")
print("Building RAPT.")
android = os.path.abspath("android")
rapt_build = subprocess.Popen([
os.path.join(android, "build_renpy.sh"),
"renpy",
ROOT,
],
cwd = android,
stdout=out,
stderr=out)
code = rapt_build.wait()
if code:
print "RAPT build failed. The output is in /tmp/rapt_build.txt."
sys.exit(1)
else:
print "RAPT build succeeded."
if not os.path.exists(destination):
os.makedirs(destination)
@@ -136,24 +165,6 @@ def main():
print
subprocess.check_call(cmd)
# Kick off the rapt build.
if not args.fast:
out = open("/tmp/rapt_build.txt", "wb")
print("Building RAPT in the background.")
android = os.path.abspath("android")
rapt_build = subprocess.Popen([
os.path.join(android, "build_renpy.sh"),
zip_version
],
cwd = android,
stdout=out,
stderr=out)
else:
rapt_build = None
# Sign the update.
if not args.fast:
subprocess.check_call([
@@ -166,6 +177,9 @@ def main():
# Write 7z.exe.
sdk = "renpy-{}-sdk".format(zip_version)
if args.version.startswith("renpy-nightly-"):
sdk = args.version + "-sdk"
if not args.fast:
# shutil.copy("renpy-ppc.zip", os.path.join(destination, "renpy-ppc.zip"))
@@ -214,12 +228,5 @@ def main():
print
if rapt_build:
code = rapt_build.wait()
if code:
print "RAPT build failed. The output is in /tmp/rapt_build.txt"
else:
print "RAPT build succeeded."
if __name__ == "__main__":
main()
+20 -2
View File
@@ -1,5 +1,23 @@
# Copyright 2004-2012 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
# Copyright 2004-2014 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.
# Checks for various abilities that might be taken away from us by
# redistributors.
+20 -2
View File
@@ -1,5 +1,23 @@
# Copyright 2004-2012 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
# Copyright 2004-2014 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.
screen about:
+21
View File
@@ -1,3 +1,24 @@
# Copyright 2004-2014 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.
label add_file:
python hide:
+96 -42
View File
@@ -1,17 +1,34 @@
# Copyright 2004-2013 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
# Copyright 2004-2014 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:
ANDROID_NO_JDK = 0
ANDROID_NO_RAPT = 1
ANDROID_NO_RAPT = 0
ANDROID_NO_JDK = 1
ANDROID_NO_SDK = 2
ANDROID_NO_KEY = 3
ANDROID_NO_CONFIG = 4
ANDROID_OK = 5
NO_RAPT_TEXT = _("To build Android packages, please download RAPT, unzip it, and place it into the Ren'Py directory. Then restart the Ren'Py launcher.")
NO_JDK_TEXT = _("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.")
NO_RAPT_TEXT = _("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.")
NO_SDK_TEXT = _("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.")
NO_KEY_TEXT = _("RAPT has been installed, but a key hasn't been configured. Please create a new key, or restore android.keystore.")
NO_CONFIG_TEXT = _("The current project has not been configured. Use \"Configure\" to configure it before building.")
@@ -39,28 +56,14 @@ init python:
candidates = [ ]
for fn in os.listdir(config.renpy_base):
if not fn.startswith("rapt-"):
continue
if not os.path.isdir(os.path.join(config.renpy_base, fn)):
continue
try:
version = fn[5:]
version = tuple(int(i) for i in version.split('.'))
except ValueError:
continue
candidates.append((version, fn))
if not candidates:
RAPT_PATH = None
else:
RAPT_PATH = os.path.join(config.renpy_base, candidates[-1][1])
RAPT_PATH = os.path.join(config.renpy_base, "rapt")
if os.path.isdir(RAPT_PATH):
import sys
sys.path.insert(0, os.path.join(RAPT_PATH, "buildlib"))
else:
RAPT_PATH = None
RAPT_PATH is None
find_rapt()
@@ -72,6 +75,7 @@ init python:
import rapt.configure
import rapt.install_sdk
import rapt.plat
import rapt.interface
else:
rapt = None
@@ -80,10 +84,10 @@ init python:
Determines the state of the android install, and returns it.
"""
if renpy.windows and not "JAVA_HOME" in os.environ:
return ANDROID_NO_JDK
if RAPT_PATH is None:
return ANDROID_NO_RAPT
if renpy.windows and not "JAVA_HOME" in os.environ:
return ANDROID_NO_JDK
if not os.path.exists(os.path.join(RAPT_PATH, "android-sdk/extras/google/play_licensing")):
return ANDROID_NO_SDK
if not os.path.exists(os.path.join(RAPT_PATH, "android.keystore")):
@@ -98,10 +102,10 @@ init python:
Returns text corresponding to the state.
"""
if state == ANDROID_NO_JDK:
return NO_JDK_TEXT
if state == ANDROID_NO_RAPT:
return NO_RAPT_TEXT
if state == ANDROID_NO_JDK:
return NO_JDK_TEXT
if state == ANDROID_NO_SDK:
return NO_SDK_TEXT
if state == ANDROID_NO_KEY:
@@ -133,9 +137,16 @@ init python:
with open(self.filename, "w"):
pass
def log(self, msg):
with open(self.filename, "a") as f:
f.write("\n")
f.write(msg)
f.write("\n")
def info(self, prompt):
self.info_msg = prompt
interface.processing(prompt, pause=False)
self.log(prompt)
def yesno(self, prompt, submessage=None):
return interface.yesno(prompt, submessage=submessage)
@@ -146,7 +157,10 @@ init python:
def terms(self, url, prompt):
submessage = _("{a=%s}%s{/a}") % (url, url)
return interface.yesno(prompt, submessage=submessage)
if not interface.yesno(prompt, submessage=submessage):
self.fail("You must accept the terms and conditions to proceed.", edit=False)
def input(self, prompt, empty=None):
@@ -164,18 +178,22 @@ init python:
def choice(self, prompt, choices, default):
return interface.choice(prompt, choices, default, cancel=Jump("android"))
def fail(self, prompt):
def fail(self, prompt, edit=True):
self.log(prompt)
prompt = re.sub(r'(http://\S+)', r'{a=\1}\1{/a}', prompt)
# Open android.txt in the editor.
editor.EditAbsolute(self.filename)()
if edit:
editor.EditAbsolute(self.filename)()
interface.error(prompt, label="android")
def success(self, prompt):
self.log(prompt)
interface.info(prompt, pause=False)
def final_success(self, prompt):
self.log(prompt)
interface.info(prompt, label="android")
def call(self, cmd, cancel=False, use_path=False):
@@ -276,16 +294,19 @@ init python:
p = project.current
p.launch(env=env)
def update_android_json():
def update_android_json(p, gui):
"""
Updates .android.json to include the google play information.
`p`
The project to update json for.
"""
project.current.update_dump(True)
p.update_dump(True, gui=gui)
build = project.current.dump["build"]
build = p.dump["build"]
filename = os.path.join(project.current.path, ".android.json")
filename = os.path.join(p.path, ".android.json")
with open(filename, "r") as f:
android_json = json.load(f)
@@ -308,20 +329,30 @@ init python:
with open(filename, "w") as f:
json.dump(android_json, f)
def android_build(command):
def android_build(command, p=None, gui=True):
"""
This actually builds the package.
"""
update_android_json()
if p is None:
p = project.current
dist = project.current.temp_filename("android.dist")
update_android_json(p, gui)
dist = p.temp_filename("android.dist")
if os.path.exists(dist):
shutil.rmtree(dist)
if gui:
reporter = distribute.GuiReporter()
rapt_interface = AndroidInterface()
else:
reporter = distribute.TextReporter()
rapt_interface = rapt.interface.Interface()
distribute.Distributor(project.current,
reporter=distribute.GuiReporter(),
reporter=reporter,
packages=[ 'android' ],
build_update=False,
noarchive=True,
@@ -330,12 +361,12 @@ init python:
)
with interface.nolinks():
rapt.build.build(AndroidInterface(), dist, command)
rapt.build.build(rapt_interface, dist, command)
# The android support can stick unicode into os.environ. Fix that.
init 100 python:
for k, v in list(os.environ.items()):
if isinstance(v, str):
if not isinstance(v, str):
os.environ[k] = renpy.fsencode(v)
screen android_process(interface):
@@ -468,6 +499,11 @@ screen android:
label android:
if RAPT_PATH is None:
$ interface.yesno(_("Before packaging Android apps, you'll need to download RAPT, the Ren'Py Android Packaging Tool. Would you like to download RAPT now?"), no=Jump("front_page"))
$ add_dlc("rapt", restart=True)
call screen android
@@ -500,3 +536,21 @@ label android_build_and_install:
$ android_build([ 'release', 'install' ])
jump android
init python:
def android_build_command():
ap = renpy.arguments.ArgumentParser()
ap.add_argument("project", help="The path to the project directory.")
ap.add_argument("command", help="Commands to pass to ant. (Try 'release' 'install'.)", nargs='+')
args = ap.parse_args()
p = project.Project(args.project)
android_build(args.command, p=p, gui=False)
return False
renpy.arguments.register_command("android_build", android_build_command)
+20 -2
View File
@@ -1,5 +1,23 @@
# Copyright 2004-2012 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
# Copyright 2004-2014 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.
# Ren'Py archiver. This builds a Ren'Py archive file, and the
# associated index file. These files are really easy to
+21
View File
@@ -1,3 +1,24 @@
# Copyright 2004-2014 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.
# http://www.csn.ul.ie/~caolan/publink/winresdump/winresdump/doc/pefile.html
# Contains a reasonable description of the format.
+20 -2
View File
@@ -1,5 +1,23 @@
# Copyright 2004-2012 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
# Copyright 2004-2014 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:
import random
+26 -3
View File
@@ -1,5 +1,23 @@
# Copyright 2004-2012 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
# Copyright 2004-2014 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.
# This file contains code that manages the distribution of Ren'Py games
# and Ren'Py proper.
@@ -313,6 +331,11 @@ init python in distribute:
self.executable_name = build['executable_name']
self.pretty_version = build['version']
if (" " in self.base_name) or (":" in self.base_name) or (";" in self.base_name):
reporter.info(_("Building distributions failed:\n\nThe build.directory_name variable may not include the space, colon, or semicolon characters."), pause=True)
self.log.close()
return
# The destination directory.
if destination is None:
destination = build["destination"]
@@ -559,7 +582,7 @@ init python in distribute:
"""
SCRIPT_VERSION_RPY = os.path.join(config.gamedir, "script_version.rpy")
SCRIPT_VERSION_RPYC = os.path.join(config.gamedir, "script_version.rpy")
SCRIPT_VERSION_RPYC = os.path.join(config.gamedir, "script_version.rpyc")
LICENSE_TXT = os.path.join(config.renpy_base, "LICENSE.txt")
if os.path.exists(SCRIPT_VERSION_RPY):
+20 -2
View File
@@ -1,5 +1,23 @@
# Copyright 2004-2012 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
# Copyright 2004-2014 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:
class PackageToggle(Action):
+21
View File
@@ -1,3 +1,24 @@
# Copyright 2004-2014 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:
import urllib2
+20 -2
View File
@@ -1,5 +1,23 @@
# Copyright 2004-2012 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
# Copyright 2004-2014 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.
# Editor Support.
#
+31 -9
View File
@@ -1,5 +1,23 @@
# Copyright 2004-2012 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
# Copyright 2004-2014 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.
define PROJECT_ADJUSTMENT = ui.adjustment()
@@ -25,14 +43,18 @@ init python:
def __call__(self):
directory = renpy.fsencode(self.directory)
try:
directory = renpy.fsencode(self.directory)
if renpy.windows:
os.startfile(directory)
elif renpy.macintosh:
subprocess.Popen([ "open", directory ])
else:
subprocess.Popen([ "xdg-open", directory ])
if renpy.windows:
os.startfile(directory)
elif renpy.macintosh:
subprocess.Popen([ "open", directory ])
else:
subprocess.Popen([ "xdg-open", directory ])
except:
pass
# Used for testing.
def Relaunch():

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 60 KiB

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Before

Width:  |  Height:  |  Size: 687 B

After

Width:  |  Height:  |  Size: 687 B

Before

Width:  |  Height:  |  Size: 96 B

After

Width:  |  Height:  |  Size: 96 B

Before

Width:  |  Height:  |  Size: 106 B

After

Width:  |  Height:  |  Size: 106 B

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

+26 -4
View File
@@ -1,5 +1,23 @@
# Copyright 2004-2012 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
# Copyright 2004-2014 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.
################################################################################
# Interface actions.
@@ -385,7 +403,7 @@ init python in interface:
common(_("INFORMATION"), store.INFO_COLOR, message, submessage, pause0=True, **kwargs)
def interaction(title, message, submessage=None, **kwargs):
def interaction(title, message, submessage=None, pause=0, **kwargs):
"""
Put up on the screen while an interaction with an external program occurs.
This shows the message, then immediately returns.
@@ -398,9 +416,13 @@ init python in interface:
`submessage`
An optional sub message.
`pause`
The amount of time to pause for after showing the message.
"""
common(title, store.INTERACTION_COLOR, message, submessage, pause0=True, **kwargs)
common(title, store.INTERACTION_COLOR, message, submessage=None, pause=pause, show_screen=True, **kwargs)
renpy.pause(pause)
def processing(message, submessage=None, complete=None, total=None, **kwargs):
"""
+20 -2
View File
@@ -1,5 +1,23 @@
# Copyright 2004-2012 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
# Copyright 2004-2014 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 in navigation:
import store.interface as interface
+21 -3
View File
@@ -1,5 +1,23 @@
# Copyright 2004-2012 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
# Copyright 2004-2014 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:
import shutil
@@ -81,7 +99,7 @@ label new_project:
# Delete the tmp directory, if it exists.
if os.path.isdir(os.path.join(project_dir, "tmp")):
os.path.rmtree(os.path.join(project_dir, "tmp"))
shutil.rmtree(os.path.join(project_dir, "tmp"))
# Delete project.json, which must exist.
os.unlink(os.path.join(project_dir, "project.json"))
+48 -10
View File
@@ -1,5 +1,23 @@
# Copyright 2004-2012 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
# Copyright 2004-2014 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.
## This file contains some of the options that can be changed to customize
## your Ren'Py game. It only contains the most common options... there
@@ -166,8 +184,8 @@ init -1 python hide:
config.sound = False
config.quit_action = Quit(confirm=False)
config.gl_resize = False
config.window_icon = "logo.png"
config.windows_icon = "logo32.png"
config.window_icon = "images/logo.png"
config.windows_icon = "images/logo32.png"
config.has_autosave = False
config.log_enable = False
config.mouse_hide_time = 86400 * 366
@@ -223,6 +241,9 @@ init python:
# correct for Ren'Py.
## Now, add the Ren'Py distribution in using classify_renpy.
build.classify_renpy("rapt/**", "rapt")
build.classify_renpy("**~", None)
build.classify_renpy("**/#*", None)
build.classify_renpy("**/thumbs.db", None)
@@ -234,20 +255,36 @@ init python:
build.classify_renpy("**.pyc", None)
build.classify_renpy("**/log.txt", None)
build.classify_renpy("**/traceback.txt", None)
build.classify_renpy("**/errors.txt", None)
build.classify_renpy("**/saves/", None)
build.classify_renpy("**/tmp/", None)
build.classify_renpy("**/.Editra", None)
# main source.
def source_and_binary(pattern):
"""
Classifies source and binary files beginning with `pattern`.
.pyo, .rpyc, .rpycm, and .rpyb go into binary, everything
else goes into source.
"""
build.classify_renpy(pattern + ".pyo", "binary")
build.classify_renpy(pattern + ".rpyc", "binary")
build.classify_renpy(pattern + ".rpymc", "binary")
build.classify_renpy(pattern + ".rpyb", "binary")
build.classify_renpy(pattern, "source")
build.classify_renpy("renpy.py", "source")
build.classify_renpy("renpy/**", "source")
source_and_binary("renpy/**")
# games.
build.classify_renpy("launcher/game/theme/", None)
build.classify_renpy("launcher/**", "source")
build.classify_renpy("templates/**", "source")
build.classify_renpy("the_question/**", "source")
build.classify_renpy("tutorial/**", "source")
source_and_binary("launcher/**")
source_and_binary("templates/**")
source_and_binary("the_question/**")
source_and_binary("tutorial/**")
# docs.
build.classify_renpy("doc/", "source")
@@ -298,8 +335,9 @@ init python:
build.package("sdk", "zip tar.bz2", "source binary")
build.package("source", "tar.bz2", "source", update=False)
build.package("jedit", "zip", "jedit")
build.package("jedit", "zip", "jedit", dlc=True)
build.package("editra-linux", "tar.bz2", "editra-all editra-linux", dlc=True)
build.package("editra-mac", "zip", "editra-all editra-mac", dlc=True)
build.package("editra-windows", "zip", "editra-all editra-windows", dlc=True)
build.package("rapt", "zip", "rapt", dlc=True)
+20 -2
View File
@@ -1,5 +1,23 @@
# Copyright 2004-2012 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
# Copyright 2004-2014 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 in distribute:
+23 -3
View File
@@ -1,5 +1,6 @@
#@PydevCodeAnalysisIgnore
"""pefile, Portable Executable reader module
@@ -15,10 +16,29 @@ To the best of my knowledge most of the abuses are handled gracefully.
Copyright (c) 2005, 2006, 2007, 2008, 2009 Ero Carrera <ero@dkbza.org>
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
For detailed copyright information see the file COPYING in
the root of the distribution archive.
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
OF SUCH DAMAGE.
"""
__revision__ = "$LastChangedRevision: 63 $"
+20 -2
View File
@@ -1,5 +1,23 @@
# Copyright 2004-2012 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
# Copyright 2004-2014 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:
if persistent.gl_enable is None:
+52 -10
View File
@@ -1,5 +1,23 @@
# Copyright 2004-2012 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
# Copyright 2004-2014 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.
# Code that manages projects.
@@ -23,6 +41,15 @@ init python in project:
import re
import tempfile
if persistent.blurb is None:
persistent.blurb = 0
LAUNCH_BLURBS = [
_("After making changes to the script, press shift+R to reload your game."),
_("Press shift+O (the letter) to access the console."),
_("Press shift+D to access the developer menu."),
]
class Project(object):
def __init__(self, path):
@@ -188,7 +215,8 @@ init python in project:
p = subprocess.Popen(cmd, env=environ)
if wait:
p.wait()
if p.wait():
interface.error(_("Launching the project failed."), _("Please ensure that your project launches normally before running this command."))
def update_dump(self, force=False, gui=True):
"""
@@ -246,7 +274,7 @@ init python in project:
except:
continue
m = re.search(r".*#\s*TODO(\s*:\s*|\s+)(.*)", line, re.I)
m = re.search(ur".*#\s*TODO(\s*:\s*|\s+)(.*)", line, re.I)
if m is None:
continue
@@ -258,7 +286,7 @@ init python in project:
while not todo_text or todo_text in todos:
index += 1
todo_text = "{0} ({1})".format(raw_todo_text, index)
todo_text = u"{0} ({1})".format(raw_todo_text, index)
todos[todo_text] = [f, l]
@@ -480,8 +508,16 @@ init python in project:
def get_sensitive(self):
return self.project is not None
def post_launch(self):
blurb = LAUNCH_BLURBS[persistent.blurb % len(LAUNCH_BLURBS)]
persistent.blurb += 1
interface.interaction(_("Launching"), blurb, pause=2.5)
def __call__(self):
self.project.launch()
renpy.invoke_in_new_context(self.post_launch)
class Rescan(Action):
def __call__(self):
@@ -535,17 +571,23 @@ label choose_projects_directory:
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
choice = p.stdout.read()
p.wait()
if choice:
path = renpy.fsdecode(choice)
code = p.wait()
except:
import traceback
traceback.print_exc()
code = 0
choice = ""
path = None
interface.error(_("Ren'Py was unable to run python with tkinter to choose the projects directory."), label=None)
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
+220 -193
View File
@@ -1,5 +1,23 @@
# Copyright 2004-2012 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
# Copyright 2004-2014 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 -1 python:
@@ -21,14 +39,14 @@ init -1 python:
SCROLLBAR_HOVER = "#d86b45"
# An image used as a separator pattern.
PATTERN = "pattern.png"
PATTERN = "images/pattern.png"
# A displayable used for the background of everything.
BACKGROUND = "background.png"
BACKGROUND = "images/background.png"
# A displayable used for the background of windows
# containing commands, preferences, and navigation info.
WINDOW = Frame("window.png", 0, 0, tile=True)
WINDOW = Frame("images/window.png", 0, 0, tile=True)
# A displayable used for the background of the projects list.
PROJECTS_WINDOW = Null()
@@ -45,8 +63,13 @@ init -1 python:
# The color of input text.
INPUT_COLOR = "#d86b45"
# FONTS/WEIGHTS
LIGHT = "Roboto-Light.ttf"
REGULAR = "Roboto-Regular.ttf"
DARK = "Roboto-Medium.ttf"
init 1 python:
INDENT = 20
HALF_INDENT = 10
@@ -61,243 +84,247 @@ init 1 python:
HALF_SPACER_HEIGHT = 6
HALF_SPACER = Null(height=HALF_SPACER_HEIGHT)
# FONTS/WEIGHTS
LIGHT = "Roboto-Light.ttf"
REGULAR = "Roboto-Regular.ttf"
DARK = "Roboto-Medium.ttf"
# DIVIDING THE SCREEN
ONETHIRD = 258
TWOTHIRDS = 496
ONEHALF = 377
# Default style.
style.l_default = Style(style.default)
style.l_default.font = LIGHT
style.l_default.color = TEXT
style.l_default.idle_color = IDLE
style.l_default.hover_color = HOVER
style.l_default.size = 18
def checkbox(full, color):
if full:
return im.Twocolor("images/checkbox_full.png", color, color, yalign=0.5)
else:
return im.Twocolor("images/checkbox_empty.png", color, color, yalign=0.5)
style.l_text = Style(style.l_default)
init 1:
style.l_button = Style(style.l_default)
style.l_button_text = Style(style.l_default)
style.l_button_text.insensitive_color = DISABLED
style.l_button_text.selected_font = REGULAR
# The default style.
style l_default is default:
font LIGHT
color TEXT
idle_color IDLE
hover_color HOVER
size 18
style l_text is l_default
style l_button is l_default
style l_button_text is l_default:
insensitive_color DISABLED
selected_font REGULAR
# A small button, used at the bottom of the screen.
style.l_link = Style(style.l_default)
style.l_link_text = Style(style.l_default)
style.l_link_text.size = 14
style.l_link_text.font = LIGHT
style l_link is l_default
style l_link_text is l_default:
size 14
font LIGHT
# Action buttons on the bottom of the screen.
style.l_right_button = Style(style.l_default)
style.l_right_button.xalign = 1.0
style.l_right_button.ypos = 600 - 128 + 12
style.l_right_button.left_margin = 8 + INDENT
style.l_right_button.right_margin = 10 + INDENT
style.l_right_button_text = Style(style.l_default)
style.l_right_button_text.size = 30
style l_right_button is l_default:
xalign 1.0
ypos 600 - 128 + 12
left_margin 8 + INDENT
right_margin 10 + INDENT
style.l_left_button = Style(style.l_right_button)
style.l_left_button.xalign = 0.0
style.l_left_button_text = Style(style.l_right_button_text)
style l_right_button_text is l_default:
size 30
style l_left_button is l_right_button:
xalign 0.0
style l_left_button_text is l_right_button_text
# The root frame. This contains everything but the bottom navigation, back
# button, and tooltip button.
style.l_root = Style(style.l_default)
style.l_root.background = BACKGROUND
style.l_root.xpadding = 10
style.l_root.top_padding = 64
style.l_root.bottom_padding = 128
# The root frame. This contains everything but the bottom navigation,
# and buttons.
style l_root is l_default:
background BACKGROUND
xpadding 10
top_padding 64
bottom_padding 128
# An inner window.
style.l_window = Style(style.l_default)
style l_window is l_default:
background WINDOW
left_padding 6
xfill True
yfill True
style.l_window.background = WINDOW
# Normal size labels.
style l_label is l_default:
xfill True
top_padding 10
bottom_padding 8
bottom_margin 12
background SEPARATOR
style.l_window.left_padding = 6
style.l_window.xfill = True
style.l_window.yfill = True
style l_label_text is l_default:
size 24
xpos INDENT
yoffset 6
# Normal-sized labels.
style.l_label = Style(style.l_default)
style.l_label.xfill = True
style.l_label.top_padding = 10
style.l_label.bottom_padding = 8
style.l_label.bottom_margin = 12
style.l_label.background = SEPARATOR
style.l_label_text = Style(style.l_default)
style.l_label_text.size = 24
style.l_label_text.xpos = INDENT
style.l_label_text.yoffset = 6
style l_label_small is l_default:
xfill True
bottom_padding 8
bottom_margin HALF_SPACER_HEIGHT
background SEPARATOR
# Small labels.
style.l_label_small = Style(style.l_default)
style.l_label_small.xfill = True
style.l_label_small.bottom_padding = 8
style.l_label_small.bottom_margin = HALF_SPACER_HEIGHT
style.l_label_small.background = SEPARATOR
style.l_label_small_text = Style(style.l_default)
style.l_label_small_text.xpos = INDENT
style.l_label_small_text.yoffset = 6
style.l_label_small_text.size = 20
style l_label_small_text is l_default:
xpos INDENT
yoffset 6
size 20
# Alternate labels. This nests inside an l_label, and gives a button
# or label that's nested inside another label.
style.l_alternate = Style(style.l_default)
style.l_alternate.xalign = 1.0
style.l_alternate.yalign = 1.0
style.l_alternate.yoffset = 4
style.l_alternate.right_margin = INDENT
style.l_alternate_text = Style(style.l_default)
style.l_alternate_text.size = 14
style.l_alternate_text.font = LIGHT
style.l_alternate_text.text_align = 1.0
style.l_small_button = Style(style.l_button)
style.l_small_button_text = Style(style.l_button_text)
style.l_small_button_text.size = 14
style.l_small_text = Style(style.l_text)
style.l_small_text.size = 14
style l_alternate is l_default:
xalign 1.0
yalign 1.0
yoffset 4
right_margin INDENT
style l_alternate_text is l_default:
size 14
font LIGHT
text_align 1.0
style l_small_button is l_button
style l_small_button_text is l_button_text:
size 14
style l_small_text is l_text:
size 14
# Indents its contents.
style.l_indent = Style(style.l_default)
style.l_indent.left_margin = INDENT
style l_indent is l_default:
left_margin INDENT
# Indents its contents and pads them vertically.
style.l_indent_margin = Style(style.l_indent)
style.l_indent_margin.ymargin = 6
# Indents its contents and pads vertically.
style l_indent_margin is l_indent:
ymargin 6
# List button.
style.l_list = Style(style.l_default)
style.l_list.left_padding = HALF_INDENT
style.l_list.xfill = True
style.l_list.selected_background = REVERSE_IDLE
style.l_list.selected_hover_background = REVERSE_HOVER
style.l_list_text = Style(style.l_default)
style.l_list_text.idle_color = IDLE
style.l_list_text.hover_color = HOVER
style.l_list_text.selected_idle_color = REVERSE_TEXT
style.l_list_text.selected_hover_color = REVERSE_TEXT
style.l_list_text.insensitive_color = DISABLED
# Lists.
style l_list is l_default:
left_padding HALF_INDENT
xfill True
selected_background REVERSE_IDLE
selected_hover_background REVERSE_HOVER
style.l_list2 = Style(style.l_list)
style.l_list2.left_padding = HALF_INDENT + INDENT
style.l_list2_text = Style(style.l_list_text)
style l_list_text is l_default:
idle_color IDLE
hover_color HOVER
selected_idle_color REVERSE_TEXT
selected_hover_color REVERSE_TEXT
insensitive_color DISABLED
style l_list2 is l_list:
left_padding (HALF_INDENT + INDENT)
style l_list2_text is l_list_text
# Scrollbar.
style.l_vscrollbar = Style(style.l_default)
style.l_vscrollbar.thumb = Fixed(
Solid(SCROLLBAR_IDLE, xmaximum=8, xalign=0.5),
Image("vscrollbar_center.png", xalign=0.5, yalign=0.5),
xmaximum = SCROLLBAR_SIZE)
style.l_vscrollbar.hover_thumb = Fixed(
Solid(SCROLLBAR_HOVER, xmaximum=8, xalign=0.5),
Image("vscrollbar_center.png", xalign=0.5, yalign=0.5),
xmaximum = SCROLLBAR_SIZE)
style.l_vscrollbar.xmaximum = SCROLLBAR_SIZE
style.l_vscrollbar.bar_vertical = True
style.l_vscrollbar.bar_invert = True
style.l_vscrollbar.unscrollable = "hide"
style l_vscrollbar is l_default:
thumb Fixed(
Solid(SCROLLBAR_IDLE, xmaximum=8, xalign=0.5),
Image("images/vscrollbar_center.png", xalign=0.5, yalign=0.5),
xmaximum = SCROLLBAR_SIZE)
hover_thumb Fixed(
Solid(SCROLLBAR_HOVER, xmaximum=8, xalign=0.5),
Image("images/vscrollbar_center.png", xalign=0.5, yalign=0.5),
xmaximum = SCROLLBAR_SIZE)
xmaximum SCROLLBAR_SIZE
bar_vertical True
bar_invert True
unscrollable "hide"
# Information window.
style.l_info_vbox = Style(style.vbox)
style.l_info_vbox.yalign = 0.5
style.l_info_vbox.xalign = 0.5
style.l_info_vbox.xfill = True
style l_info_vbox is vbox:
yalign 0.5
xalign 0.5
xfill True
style.l_info_frame = Style(style.l_default)
style.l_info_frame.ypadding = 21
style.l_info_frame.xfill = True
style l_info_frame is l_default:
ypadding 21
xfill True
background Fixed(
INFO_WINDOW,
Frame(PATTERN, 0, 0, tile=True, ymaximum=5, yalign=0.0, yoffset=8),
Frame(PATTERN, 0, 0, tile=True, ymaximum=5, yalign=1.0, yoffset=-8),
)
yminimum 180
ypos 75
style.l_info_frame.background = Fixed(
INFO_WINDOW,
Frame(PATTERN, 0, 0, tile=True, ymaximum=5, yalign=0.0, yoffset=8),
Frame(PATTERN, 0, 0, tile=True, ymaximum=5, yalign=1.0, yoffset=-8),
)
style l_info_label is l_default:
xalign 0.5
ypos 75
yanchor 1.0
yoffset 12
style.l_info_frame.yminimum = 180
style.l_info_frame.ypos = 75
style l_info_label_text is l_default:
size 36
style.l_info_label = Style(style.l_default)
style.l_info_label.xalign = 0.5
style.l_info_label.ypos = 75
style.l_info_label.yanchor = 1.0
style.l_info_label.yoffset = 12
style.l_info_label_text = Style(style.l_default)
style.l_info_label_text.size = 36
style l_info_text is l_default:
xalign 0.5
style.l_info_text = Style(style.l_default)
style.l_info_text.xalign = 0.5
style l_info_button is l_button:
xalign 0.5
xmargin 50
style.l_info_button = Style(style.l_button)
style.l_info_button.xalign = 0.5
style.l_info_button.xmargin = 50
style.l_info_button_text = Style(style.l_button_text)
style.l_info_button_text.text_align = 0.5
style.l_info_button_text.layout = "subtitle"
style l_info_button_text is l_button_text:
text_align 0.5
layout "subtitle"
# Code navigation
style.l_navigation_button = Style(style.l_button)
style.l_navigation_button.size_group = "navigation"
style.l_navigation_button.right_margin = INDENT
style.l_navigation_button.top_margin = 3
style.l_navigation_button_text = Style(style.l_button_text)
style.l_navigation_button_text.size = 14
style.l_navigation_button_text.font = REGULAR
# Progress bar.
style l_progress_frame is l_default:
background Frame(PATTERN, 0, 0, tile=True)
ypadding 5
style.l_navigation_text = Style(style.l_text)
style.l_navigation_text.size = 12
style.l_navigation_text.font = LIGHT
style.l_navigation_text.color = TEXT
style l_progress_bar is l_default:
left_bar REVERSE_IDLE
right_bar Null()
ymaximum 24
# Check boxes
style.l_checkbox = Style(style.l_button)
style.l_checkbox.left_padding = INDENT
# Navigation.
style l_navigation_button is l_button:
size_group "navigation"
right_margin INDENT
top_margin 3
def checkbox(full, color):
if full:
return im.Twocolor("checkbox_full.png", color, color, yalign=0.5)
else:
return im.Twocolor("checkbox_empty.png", color, color, yalign=0.5)
style l_navigation_button_text is l_button_text:
size 14
font REGULAR
style.l_checkbox.background = checkbox(False, IDLE)
style.l_checkbox.hover_background = checkbox(False, HOVER)
style.l_checkbox.selected_idle_background = checkbox(True, IDLE)
style.l_checkbox.selected_hover_background = checkbox(True, HOVER)
style.l_checkbox.insensitive_background = checkbox(False, DISABLED)
style l_navigation_text is l_text:
size 12
font LIGHT
color TEXT
style.l_checkbox_text = Style(style.l_button_text)
style.l_checkbox_text.selected_font = LIGHT
# Checkboxes.
style l_checkbox is l_button:
left_padding INDENT
background checkbox(False, IDLE)
hover_background checkbox(False, HOVER)
selected_idle_background checkbox(True, IDLE)
selected_hover_background checkbox(True, HOVER)
insensitive_background checkbox(False, DISABLED)
# A normal button that lines up with checkboxes.
style.l_nonbox = Style(style.l_button)
style.l_nonbox.xpadding = INDENT
style.l_nonbox_text = Style(style.l_button_text)
style.l_nonbox_text.selected_font = LIGHT
style l_checkbox_text is l_button_text:
selected_font LIGHT
# A progress bar and its frame.
style.l_progress_frame = Style(style.l_default)
style.l_progress_frame.background = Frame(PATTERN, 0, 0, tile=True)
style.l_progress_frame.ypadding = 5
# Lines up with a checkbox.
style l_nonbox is l_button:
xpadding INDENT
style.l_progress_bar = Style(style.l_default)
style.l_progress_bar.left_bar = REVERSE_IDLE
style.l_progress_bar.right_bar = Null()
style.l_progress_bar.ymaximum = 24
style l_nonbox_text is l_button_text:
selected_font LIGHT
# The projects window.
style.l_projects = Style(style.l_default)
style.l_projects.background = PROJECTS_WINDOW
# Projects list.
style l_projects is l_default:
background PROJECTS_WINDOW
style.hyperlink_text.size = 18
style.hyperlink_text.font = LIGHT
style.hyperlink_text.color = IDLE
style.hyperlink_text.hover_color = HOVER
style hyperlink_text:
size 18
font LIGHT
color IDLE
hover_color HOVER
+20 -2
View File
@@ -1,5 +1,23 @@
# Copyright 2004-2013 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
# Copyright 2004-2014 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:
+20 -2
View File
@@ -1,5 +1,23 @@
# Copyright 2004-2012 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
# Copyright 2004-2014 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 in theme_data:
+20 -2
View File
@@ -1,7 +1,25 @@
#!/usr/bin/env python
# Copyright 2004-2012 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
# Copyright 2004-2014 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.
# This is used on Linux and Mac to prompt the user for the projects
# directory.
+10
View File
@@ -0,0 +1,10 @@
translate french strings:
# game/about.rpy:21
old "[version!q]"
new "[version!q]"
# game/about.rpy:25
old "View license"
new "Voir la licence"
+22
View File
@@ -0,0 +1,22 @@
translate french strings:
# game/add_file.rpy:7
old "FILENAME"
new "NOM DU FICHIER"
# game/add_file.rpy:7
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"
+101
View File
@@ -0,0 +1,101 @@
translate french strings:
# game/android.rpy:12
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."
+41
View File
@@ -0,0 +1,41 @@
translate french strings:
# game/choose_theme.rpy:274
old "Could not change the theme. Perhaps options.rpy was changed too much."
new "Impossible de changer le thème. Peut être que options.rpy a été trop modifié."
# game/choose_theme.rpy:332
old "Display"
new "Affichage"
# game/choose_theme.rpy:333
old "Window"
new "Fenêtre"
# game/choose_theme.rpy:334
old "Fullscreen"
new "Plein écran"
# game/choose_theme.rpy:335
old "Planetarium"
new "Planetarium"
# game/choose_theme.rpy:342
old "Sound Volume"
new "Volume sonore"
# game/choose_theme.rpy:376
old "Choose Theme"
new "Choisir un thème"
# game/choose_theme.rpy:389
old "Theme"
new "Thème"
# game/choose_theme.rpy:413
old "Color Scheme"
new "Agencement des couleurs"
# game/choose_theme.rpy:444
old "Continue"
new "Continuer"
+281
View File
@@ -0,0 +1,281 @@
translate french strings:
# renpy/common/00updater.rpy:1258
old "Updater"
new "Programme de mise à jour"
# renpy/common/00updater.rpy:1267
old "This program is up to date."
new "Ce programme est à jour."
# renpy/common/00updater.rpy:1269
old "[u.version] is available. Do you want to install it?"
new "La version [u.version]. Voulez-vous l'installer ?"
# renpy/common/00updater.rpy:1271
old "Preparing to download the updates."
new "Préparation du téléchargement de la mise à jour."
# renpy/common/00updater.rpy:1273
old "Downloading the updates."
new "Téléchargement de la mise à jour."
# renpy/common/00updater.rpy:1275
old "Unpacking the updates."
new "Dépaquetage de la mise à jour."
# renpy/common/00updater.rpy:1279
old "The updates have been installed. The program will restart."
new "La mise à jour a bien été effectuée. Le programme va redémarrer."
# renpy/common/00updater.rpy:1281
old "The updates have been installed."
new "La mise à jour a bien été effectuée."
# renpy/common/00updater.rpy:1283
old "The updates were cancelled."
new "La mise à jour a été annullée."
# renpy/common/_layout/classic_load_save.rpym:120
old "Empty Slot."
new "Emplacement vide."
# renpy/common/_layout/classic_load_save.rpym:152
old "a"
new "a"
# renpy/common/_layout/classic_load_save.rpym:161
old "q"
new "q"
# renpy/common/_layout/classic_joystick_preferences.rpym:76
old "Joystick Mapping"
new "Joystick"
# renpy/common/00layout.rpy:421
old "Are you sure?"
new "Êtes-vous sûr ?"
# renpy/common/00layout.rpy:422
old "Are you sure you want to delete this save?"
new "Êtes-vous sûr de vouloir supprimer cette sauvegarde ?"
# 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 ?"
# 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 ?"
# renpy/common/00layout.rpy:425
old "Are you sure you want to quit?"
new "Êtes-vous sûr de vouloir quitter ?"
# 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é."
# renpy/common/00keymap.rpy:167
old "Saved screenshot as %s."
new "La capture d'écran a été enregistrée en tant que %s"
# renpy/common/00gltest.rpy:50
old "Graphics Acceleration"
new "Accélération graphique"
# renpy/common/00gltest.rpy:54
old "Automatically Choose"
new "Choix automatique"
# renpy/common/00gltest.rpy:59
old "Force Angle/DirectX Renderer"
new "Forcer le rendu Angle/DirectX"
# renpy/common/00gltest.rpy:63
old "Force OpenGL Renderer"
new "Forcer le rendu OpenGL"
# renpy/common/00gltest.rpy:67
old "Force Software Renderer"
new "Forcer le rendu logiciel"
# 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."
# renpy/common/00gltest.rpy:77
old "Quit"
new "Quitter"
# renpy/common/00gltest.rpy:82
old "Return"
new "Retour"
# renpy/common/00gltest.rpy:112
old "Performance Warning"
new "Avertissement sur les performances"
# renpy/common/00gltest.rpy:117
old "This computer is using software rendering."
new "Cet ordinateur utilise le rendu logiciel."
# renpy/common/00gltest.rpy:119
old "This computer is not using shaders."
new "Cet ordinateur n'utilise pas les shaders."
# renpy/common/00gltest.rpy:121
old "This computer is displaying graphics slowly."
new "Cet ordinateur affiche lentement les graphismes."
# 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]."
# 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."
# 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."
# renpy/common/00gltest.rpy:135
old "Update DirectX"
new "Mettre à jour DirectX"
# renpy/common/00gltest.rpy:141
old "Continue, Show this warning again"
new "Continer, Afficher cet avertissement la prochaine fois."
# renpy/common/00gltest.rpy:145
old "Continue, Don't show warning again"
new "Continer, Ne plus afficher cet avertissement."
# 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
old "%b %d, %H:%M"
new "%b %d, %H:%M"
# renpy/common/_compat/gamemenu.rpym:337
old "Previous"
new "Précédent"
# renpy/common/_compat/gamemenu.rpym:344
old "Next"
new "Suivant"
# renpy/common/00library.rpy:77
old "Skip Mode"
new "Mode rapide"
# renpy/common/00library.rpy:80
old "Fast Skip Mode"
new "Mode très rapide"
# renpy/common/00gallery.rpy:521
old "Image [index] of [count] locked."
new "Image [index] sur [count] verrouillée."
# renpy/common/00gallery.rpy:539
old "prev"
new "précédent"
# renpy/common/00gallery.rpy:540
old "next"
new "suivant"
# renpy/common/00gallery.rpy:541
old "slideshow"
new "diaporama"
# renpy/common/00gallery.rpy:542
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 ?"
# renpy/common/00action_file.rpy:587
old "Quick save complete."
new "Sauvegarde rapide effectuée."
+37
View File
@@ -0,0 +1,37 @@
translate french strings:
# game/distribute.rpy:333
old "Nothing to do."
new "Rien à faire."
# game/distribute.rpy:337
old "Scanning project files..."
new "Scan des fichiers du projet..."
# game/distribute.rpy:344
old "Scanning Ren'Py files..."
new "Scan des fichiers Ren'Py..."
# game/distribute.rpy:494
old "Archiving files..."
new "Archivage des fichiers..."
# game/distribute.rpy:745
old "Writing the [variant] [format] package."
new "Écriture du paquet [variant] [format]."
# game/distribute.rpy:758
old "Making the [variant] update zsync file."
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."
@@ -0,0 +1,41 @@
translate french strings:
# game/distribute_gui.rpy:139
old "Build Distributions: [project.current.name!q]"
new "Construction des packets: [project.current.name!q]"
# game/distribute_gui.rpy:154
old "Directory Name:"
new "Nom du répertoire:"
# game/distribute_gui.rpy:158
old "Executable Name:"
new "Nom de l'exécutable:"
# game/distribute_gui.rpy:175
old "Edit options.rpy"
new "Éditer options.rpy"
# game/distribute_gui.rpy:176
old "Refresh"
new "Rafraichir"
# game/distribute_gui.rpy:193
old "Build Packages:"
new "Construire les packets:"
# game/distribute_gui.rpy:208
old "Build Updates"
new "Construire les mises à jour"
# game/distribute_gui.rpy:212
old "Build"
new "Construire"
# game/distribute_gui.rpy:219
old "Errors were detected when running the project. Please ensure the project runs without errors before building distributions."
new "Des erreurs ont été détectées lors de l'utilisation du projet. Assurez-vous qu'il n'y ait plus d'erreur avant de construire les packets."
# game/distribute_gui.rpy:236
old "Your project does not contain build information. Would you like to add build information to the end of options.rpy?"
new "Votre projet ne contient pas d'information pour la construction. Voulez-vous ajouter ces informations à la fin de options.rpy ?"
+57
View File
@@ -0,0 +1,57 @@
translate french strings:
# game/editor.rpy:120
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."
+81
View File
@@ -0,0 +1,81 @@
translate french strings:
# game/front_page.rpy:79
old "+ Create New Project"
new "+ Créer un nouveau projet"
# game/front_page.rpy:111
old "Tutorial"
new "Tutoriel"
# game/front_page.rpy:112
old "The Question"
new "The Question"
# game/front_page.rpy:128
old "Active Project"
new "Projet actif"
# game/front_page.rpy:136
old "Open Directory"
new "Ouvrir le répertoire"
# game/front_page.rpy:141
old "game"
new "game"
# game/front_page.rpy:142
old "base"
new "base"
# game/front_page.rpy:148
old "Edit File"
new "Éditer le fichier"
# game/front_page.rpy:156
old "All script files"
new "Tous les fichiers de script"
# game/front_page.rpy:165
old "Navigate Script"
new "Naviguer dans le script"
# game/front_page.rpy:176
old "Check Script (Lint)"
new "Vérifier le script (Lint)"
# game/front_page.rpy:177
old "Change Theme"
new "Changer de thème"
# game/front_page.rpy:178
old "Delete Persistent"
new "Supprimer persistant"
# game/front_page.rpy:186
old "Build Distributions"
new "Construire les packets"
# game/front_page.rpy:188
old "Generate Translations"
new "Générer fichiers de traduction"
# game/front_page.rpy:204
old "Checking script for potential problems..."
new "Vérifier le script vis à vis des problèmes potentiels..."
# game/front_page.rpy:219
old "Deleting persistent data..."
new "Supprimer les données persistantes..."
# game/front_page.rpy:204
old "Android"
new "Android"
# game/front_page.rpy:206
old "Extract Dialogue"
new "Extraire dialogue"
# game/front_page.rpy:126
old "[p.name!q] (template)"
new "[p.name!q] (gabarit)"
+85
View File
@@ -0,0 +1,85 @@
translate french strings:
# game/interface.rpy:89
old "Documentation"
new "Documentation"
# game/interface.rpy:90
old "Ren'Py Website"
new "Site Web de Ren'Py"
# game/interface.rpy:91
old "Ren'Py Games List"
new "Liste des jeux Ren'Py"
# game/interface.rpy:92
old "About"
new "À propos"
# game/interface.rpy:99
old "update"
new "mise à jour"
# game/interface.rpy:101
old "preferences"
new "préférences"
# game/interface.rpy:102
old "quit"
new "quitter"
# game/interface.rpy:149
old "Yes"
new "Oui"
# game/interface.rpy:151
old "No"
new "Non"
# game/interface.rpy:181
old "Due to package format limitations, non-ASCII file and directory names are not allowed."
new "Les caractères non-ASCII ne sont pas autorisés pour les noms de fichiers et répertoires."
# game/interface.rpy:183
old "[title]"
new "[title]"
# game/interface.rpy:248
old "ERROR"
new "ERREUR"
# game/interface.rpy:280
old "While [what!q], an error occured:"
new "Pendant que [what!q], une erreur est arrivée:"
# game/interface.rpy:281
old "[exception!q]"
new "[exception!q]"
# game/interface.rpy:298
old "Text input may not contain the {{ or [[ characters."
new "Le texte ne devrait pas contenir les caractères {{ ou [[."
# game/interface.rpy:303
old "File and directory names may not contain / or \\."
new "Les noms de fichiers et répertoires ne devrait pas contenir / ou \\."
# game/interface.rpy:309
old "File and directory names must consist of ASCII characters."
new "Les noms de fichiers et de répertoires doivent contenir uniquement des caractères ASCII."
# game/interface.rpy:330
old "INFORMATION"
new "INFORMATION"
# game/interface.rpy:373
old "PROCESSING"
new "TRAITEMENT"
# game/interface.rpy:390
old "QUESTION"
new "QUESTION"
# game/interface.rpy:451
old "CHOICE"
new "CHOIX"
+73
View File
@@ -0,0 +1,73 @@
translate french strings:
# game/navigation.rpy:150
old "Navigate: [project.current.name]"
new "Navigation: [project.current.name]"
# game/navigation.rpy:159
old "Order: "
new "Ordre:"
# game/navigation.rpy:160
old "alphabetical"
new "alphabétique"
# game/navigation.rpy:162
old "by-file"
new "par fichier"
# game/navigation.rpy:164
old "natural"
new "naturel"
# game/navigation.rpy:168
old "refresh"
new "rafraichir"
# game/navigation.rpy:176
old "Category:"
new "Catégorie:"
# game/navigation.rpy:178
old "files"
new "fichiers"
# game/navigation.rpy:179
old "labels"
new "labels"
# game/navigation.rpy:180
old "defines"
new "définitions"
# game/navigation.rpy:181
old "transforms"
new "transformations"
# game/navigation.rpy:182
old "screens"
new "écrans"
# game/navigation.rpy:183
old "callables"
new "appelables"
# game/navigation.rpy:184
old "TODOs"
new "TODOs"
# game/navigation.rpy:223
old "+ Add script file"
new "+ Ajouter un fichier de script"
# game/navigation.rpy:231
old "No TODO comments found.\n\nTo create one, include \"# TODO\" in your script."
new "Aucun commentaire «TODO» trouvé.\n\nPour un créer un, écrivez \"# TODO\" dans le script."
# game/navigation.rpy:238
old "The list of names is empty."
new "La liste des noms est vide."
# game/navigation.rpy:243
old "Launch Project"
new "Lancer le projet"
+33
View File
@@ -0,0 +1,33 @@
translate french strings:
# game/new_project.rpy:22
old "Choose Project Template"
new "Choisissez un patron de projet"
# game/new_project.rpy:40
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'."
+69
View File
@@ -0,0 +1,69 @@
translate french strings:
# game/preferences.rpy:40
old "Launcher Preferences"
new "Préférence du lanceur"
# game/preferences.rpy:61
old "Projects Directory:"
new "Répertoire des projets:"
# game/preferences.rpy:68
old "[persistent.projects_directory!q]"
new "[persistent.projects_directory!q]"
# game/preferences.rpy:70
old "Not Set"
new "Non précisé"
# game/preferences.rpy:84
old "Text Editor:"
new "Éditeur:"
# game/preferences.rpy:106
old "Update Channel:"
new "Version"
# game/preferences.rpy:126
old "Navigation Options:"
new "Options de navigation:"
# game/preferences.rpy:130
old "Include private names"
new "Inclure les noms privés"
# game/preferences.rpy:131
old "Include library names"
new "Inclure les noms des bibliothèques"
# game/preferences.rpy:141
old "Launcher Options:"
new "Options du lanceur:"
# game/preferences.rpy:145
old "Hardware rendering"
new "Rendu matériel"
# game/preferences.rpy:148
old "Console output"
new "Sortie console"
# game/preferences.rpy:165
old "Actions:"
new "Actions:"
# game/preferences.rpy:169
old "Open launcher project"
new "Ouvrir le projet lanceur"
# game/preferences.rpy:183
old "Language:"
new "Langue:"
# game/preferences.rpy:193
old "Back"
new "Retour"
# game/preferences.rpy:146
old "Show templates"
new "Montrer les gabarits"
+25
View File
@@ -0,0 +1,25 @@
translate french strings:
# game/project.rpy:196
old "Ren'Py is scanning the project..."
new "Ren'Py est en train de scanner le projet..."
# game/project.rpy:485
old "PROJECTS DIRECTORY"
new "RÉPERTOIRE DES PROJETS"
# game/project.rpy:485
old "Please choose the projects directory using the directory chooser.\n{b}The directory chooser may have opened behind this window.{/b}"
new "Choisissez le répertoire des projets avec le sélecteur de fichier.\n{b}Il se peut que le sélecteur de fichier s'ouvre derière cette fenêtre.{/b}"
# game/project.rpy:485
old "This launcher will scan for projects in this directory, will create new projects in this directory, and will place built projects into this directory."
new "Ce lanceur va scanner ce répertoire pour trouver des projets éxistants, créra les nouveaux projets dans ce répertoire, et placera les projets construits dans ce répertoire."
# game/project.rpy:525
old "Ren'Py was unable to run python with tkinter to choose the projects directory."
new "Ren'Py n'a pas pu lancer python avec le module tkinker pout choisir le répertoire des projets."
# game/project.rpy:529
old "Ren'Py has set the projects directory to:"
new "Le répertoire des projets vient d'être établit:"
+6
View File
@@ -0,0 +1,6 @@
translate french python:
style.l_default.size = 16
style.l_button_text.selected_bold = True
style.l_navigation_text.bold = False
make_style_backup()
+33
View File
@@ -0,0 +1,33 @@
translate french strings:
# game/translations.rpy:10
old "Create or Update Translations"
new "Créer ou mettre à jour les traductions"
# game/translations.rpy:10
old "Please enter the name of the language for which you want to create or update translations."
new "Entrez le nom de la langue pour laquelle vous voullez créer ou mettre à jour les traductions."
# game/translations.rpy:15
old "The language name can not be the empty string."
new "La langue ne peut pas être une chaîne vide."
# game/translations.rpy:26
old "Ren'Py is generating translations...."
new "Ren'Py est en train de générer les traductions..."
# game/translations.rpy:30
old "Ren'Py has finished generating [language] translations."
new "Ren'Py a fini de générer les fichiers de traductions pour [language]."
# game/translations.rpy:44
old "What format would you like for the extracted dialogue?"
new "Dans quel format souhaitez vous que le dialogue soit extrait ?"
# game/translations.rpy:56
old "Ren'Py is extracting dialogue...."
new "Ren'Py est en train d'extraire le dialogue...."
# game/translations.rpy:60
old "Ren'Py has finished extracting dialogue. The extracted dialogue can be found in dialogue.[format] in the base directory."
new "Ren'Py a fini d'extraire le dialogue. Le dialogue extrait est disponible dans dialogue.[format] dans le répertoire de base."
+85
View File
@@ -0,0 +1,85 @@
translate french strings:
# game/updater.rpy:54
old "Select Update Channel"
new "Choisissez une version."
# game/updater.rpy:65
old "The update channel controls the version of Ren'Py the updater will download. Please select an update channel:"
new "Choisissez une version."
# game/updater.rpy:70
old "Release"
new "version courrante."
# game/updater.rpy:76
old "{b}Recommended.{/b} The version of Ren'Py that should be used in all newly-released games."
new "{b}Recommendé.{/b} La version de Ren'Py qui devrait être utilisée pour créer de nouveaux jeux."
# game/updater.rpy:81
old "Prerelease"
new "Version de test"
# game/updater.rpy:87
old "A preview of the next version of Ren'Py that can be used for testing and taking advantage of new features, but not for final releases of games."
new "Un aperçu de la prochaine version de Ren'Py qui peut être utilisée pour faire des tests et profiter de toutes nouvelles fonctionnalitées, mais par pour créer de nouveaux jeux."
# game/updater.rpy:93
old "Experimental"
new "Expérimental"
# game/updater.rpy:99
old "Experimental versions of Ren'Py. You shouldn't select this channel unless asked by a Ren'Py developer."
new "Version expérimentale de Ren'Py. Vous ne devriez pas choisir cette version, à moins qu'un développeur de Ren'Py ne vous y invite."
# game/updater.rpy:119
old "An error has occured:"
new "Une erreur est apparue."
# game/updater.rpy:121
old "Checking for updates."
new "Vérifier les mises à jour."
# game/updater.rpy:123
old "Ren'Py is up to date."
new "Ren'Py est à jour."
# game/updater.rpy:125
old "[u.version] is now available. Do you want to install it?"
new "La version [u.version] est disponible. Voulez-vous l'installer ?"
# game/updater.rpy:127
old "Preparing to download the update."
new "Préparation du téléchargement de la mise à jour."
# game/updater.rpy:129
old "Downloading the update."
new "Téléchargement de la mise à jour."
# game/updater.rpy:131
old "Unpacking the update."
new "Dépaquetage de la mise à jour."
# game/updater.rpy:133
old "Finishing up."
new "Dernier réglages."
# game/updater.rpy:135
old "The update has been installed. Ren'Py will restart."
new "La mise à jour a bien été effectuée. Ren'Py va redémarrer."
# game/updater.rpy:137
old "The update has been installed."
new "La mise à jour a bien été effectuée."
# game/updater.rpy:139
old "The update was cancelled."
new "La mise à jour a été annullée."
# game/updater.rpy:156
old "Ren'Py Update"
new "Mise à jour de Ren'Py"
# game/updater.rpy:162
old "Proceed"
new "Continuer"
+1 -1
View File
@@ -1,4 +1,4 @@
translate japanese strings:
# game/about.rpy:21
+1 -1
View File
@@ -1,4 +1,4 @@
translate japanese python:
translate japanese python:
MTLC = "tl/japanese/MTLc3m.ttf"
style.l_default.font = MTLC
style.l_default.size = 16
+12
View File
@@ -0,0 +1,12 @@
# TODO: Translation updated at 2013-12-08 21:52
translate russian strings:
# game/about.rpy:21
old "[version!q]"
new "[version!q]"
# game/about.rpy:25
old "View license"
new "Просмотреть лицензию"
+24
View File
@@ -0,0 +1,24 @@
# TODO: Translation updated at 2013-12-08 21:52
translate russian strings:
# game/add_file.rpy:7
old "FILENAME"
new "ИМЯ ФАЙЛА"
# game/add_file.rpy:7
old "Enter the name of the script file to create."
new "Введите имя файла сценария, который вы хотите создать."
# game/add_file.rpy:10
old "The filename must have the .rpy extension."
new "Имя должно иметь расширение .rpy."
# game/add_file.rpy:18
old "The file already exists."
new "Файл уже существует."
# 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 автоматически загружает все файлы сценариев, заканчивающиеся на .rpy\n#Чтобы использовать этот файл, определите метку и прыгните (jump) к ней из другого файла.\n"
+104
View File
@@ -0,0 +1,104 @@
# TODO: Translation updated at 2013-12-08 21:52
translate russian strings:
# 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 "32-разрядный инструментарий разработки Java требуется, чтобы построить Android-пакеты на Windows. JDK отличен от JRE, и возможно, у вас есть Java без JDK.\n\nПожалуйста, {a=http://www.oracle.com/technetwork/java/javase/downloads/index.html}загрузите и установите JDK{/a}, и перезапустите Ren'Py Launcher."
# game/android.rpy:14
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 "Чтобы строить Android-пакеты, пожалуйста, загрузите RAPT ({a=http://www.renpy.org/dl/android}отсюда{/a}), распакуйте его, и поместите его в папку Ren'Py. После этого, перезапустите Ren'Py Launcher."
# game/android.rpy:15
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 установлен, но вам понадобится установить Android SDK до того, как вы сможете создавать Android-пакеты. Выберите Установить SDK, чтобы сделать это."
# game/android.rpy:16
old "RAPT has been installed, but a key hasn't been configured. Please create a new key, or restore android.keystore."
new "RAPT установлен, но отсутствует ключ. Пожалуйста, создайте новый ключ, или восстановите android.keystore."
# game/android.rpy:17
old "The current project has not been configured. Use \"Configure\" to configure it before building."
new "Текущий проект не настроен. Используйте \"Настроить\", чтобы настроить его перед сборкой."
# game/android.rpy:18
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 "Выберите \"Построить\", чтобы собрать текущий проект, или присоедините Android-устройство и выберите \"Построить и Установить\", чтобы собрать и установить его на устройстве."
# game/android.rpy:20
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 "Пытается эмулировать Android-телефон.\n\nПрикосновения иммитируются мышью при зажатой кнопке. Escape назначен на кнопку меню, а PageUp - на кнопку назад."
# game/android.rpy:21
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 "Пытается эмулировать Android-планшет.\n\nПрикосновения иммитируются мышью при зажатой кнопке. Escape назначен на кнопку меню, а PageUp - на кнопку назад."
# game/android.rpy:22
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 "Пытается эмулировать приставку OUYA.\n\nВвод контроллера назначен на клавиши со стрелками, Enter - на кнопку Select, Escape - на кнопку меню, а PageUp - на кнопку назад."
# game/android.rpy:24
old "Downloads and installs the Android SDK and supporting packages. Optionally, generates the keys required to sign the package."
new "Скачивает и устанавливает Android SDK и поддерживающие пакеты. При желании, создает ключи для подписи пакета."
# game/android.rpy:25
old "Configures the package name, version, and other information about this project."
new "Настраивает имя пакета, версию, и другую информацию о проекте."
# game/android.rpy:26
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 "Открывает файл, содержащий ключи Google Play в редакторе.\n\nЭто необходимо лишь для случаев, если приложение использует расширяющий APK. Прочтите документацию для больших деталей."
# game/android.rpy:27
old "Builds the Android package."
new "Собирает Android-пакет."
# game/android.rpy:28
old "Builds the Android package, and installs it on an Android device connected to your computer."
new "Собирает Android-пакет, устанавливает его на Android-устройстве, подключенном к компьютеру."
# game/android.rpy:148
old "{a=%s}%s{/a}"
new "{a=%s}%s{/a}"
# game/android.rpy:371
old "Android: [project.current.name!q]"
new "Android: [project.current.name!q]"
# game/android.rpy:391
old "Emulation:"
new "Эмуляция:"
# game/android.rpy:399
old "Phone"
new "Телефон"
# game/android.rpy:403
old "Tablet"
new "Планшет"
# game/android.rpy:407
old "Television / OUYA"
new "Телевидение / OUYA"
# game/android.rpy:419
old "Build:"
new "Собрать:"
# game/android.rpy:427
old "Install SDK & Create Keys"
new "Установить SDK и создать ключи"
# game/android.rpy:431
old "Configure"
new "Настроить"
# game/android.rpy:435
old "Build Package"
new "Собрать пакет"
# game/android.rpy:439
old "Build & Install"
new "Собрать и установить"
+44
View File
@@ -0,0 +1,44 @@
# TODO: Translation updated at 2013-12-08 21:52
translate russian strings:
# game/choose_theme.rpy:274
old "Could not change the theme. Perhaps options.rpy was changed too much."
new "Невозможно изменить тему. Возможно, options.rpy был сильно изменен."
# game/choose_theme.rpy:339
old "Display"
new "Экран"
# game/choose_theme.rpy:340
old "Window"
new "Окно"
# game/choose_theme.rpy:341
old "Fullscreen"
new "Полный экран"
# game/choose_theme.rpy:342
old "Planetarium"
new "Планетарий"
# game/choose_theme.rpy:349
old "Sound Volume"
new "Громкость звука"
# game/choose_theme.rpy:383
old "Choose Theme"
new "Выберите тему"
# game/choose_theme.rpy:396
old "Theme"
new "Тема"
# game/choose_theme.rpy:420
old "Color Scheme"
new "Цветовая схема"
# game/choose_theme.rpy:451
old "Continue"
new "Продолжить"
+324
View File
@@ -0,0 +1,324 @@
# TODO: Translation updated at 2013-12-08 21:52
translate russian strings:
# renpy/common/_layout/classic_load_save.rpym:120
old "Empty Slot."
new "Пустой слот."
# renpy/common/_layout/classic_load_save.rpym:152
old "a"
new "a"
# renpy/common/_layout/classic_load_save.rpym:161
old "q"
new "q"
# TODO: Translation updated at 2013-12-08 21:52
translate russian strings:
# renpy/common/_layout/classic_joystick_preferences.rpym:76
old "Joystick Mapping"
new "Назначение джойстика"
# TODO: Translation updated at 2013-12-08 21:52
translate russian strings:
# renpy/common/00action_file.rpy:124
old "%b %d, %H:%M"
new "%b %d, %H:%M"
# renpy/common/00action_file.rpy:587
old "Quick save complete."
new "Быстрое сохранение завершено."
# TODO: Translation updated at 2013-12-08 21:52
translate russian strings:
# renpy/common/00layout.rpy:421
old "Are you sure?"
new "Вы уверены?"
# renpy/common/00layout.rpy:422
old "Are you sure you want to delete this save?"
new "Вы уверены, что хотите удалить это сохранение?"
# renpy/common/00layout.rpy:423
old "Are you sure you want to overwrite your save?"
new "Вы уверены, что хотите перезаписать ваше сохранение?"
# renpy/common/00layout.rpy:424
old "Loading will lose unsaved progress.\nAre you sure you want to do this?"
new "Загрузка игры приведет к потере несохраненного прогресса.\nВы уверены, что вы хотите это сделать?"
# renpy/common/00layout.rpy:425
old "Are you sure you want to quit?"
new "Вы уверены, что вы хотите выйти?"
# renpy/common/00layout.rpy:426
old "Are you sure you want to return to the main menu?\nThis will lose unsaved progress."
new "Вы уверены, что вы хотите вернуться в главное меню?\nЭто приведет к потере несохраненного прогресса."
# renpy/common/00layout.rpy:427
old "Are you sure you want to begin skipping?"
new "Вы уверены, что хотите начать пропуск?"
# renpy/common/00layout.rpy:428
old "Are you sure you want to skip to the next choice?"
new "Вы хотите пропустить все до следующего выбора?"
# renpy/common/00layout.rpy:429
old "Are you sure you want to skip to unseen dialogue or the next choice?"
new "Вы уверены, что хотите пропустить все до невиданного диалога или следующего выбора?"
# TODO: Translation updated at 2013-12-08 21:52
translate russian strings:
# renpy/common/_compat/gamemenu.rpym:337
old "Previous"
new "Предыдущий"
# renpy/common/_compat/gamemenu.rpym:344
old "Next"
new "Следующий"
# TODO: Translation updated at 2013-12-08 21:52
translate russian strings:
# renpy/common/00keymap.rpy:168
old "Saved screenshot as %s."
new "Скришнот сохранен как %s."
# TODO: Translation updated at 2013-12-08 21:52
translate russian strings:
# renpy/common/00updater.rpy:1258
old "Updater"
new "Обновление"
# renpy/common/00updater.rpy:1267
old "This program is up to date."
new "Это программа обновлена."
# renpy/common/00updater.rpy:1269
old "[u.version] is available. Do you want to install it?"
new "[u.version] доступна. Вы хотите её установить?"
# renpy/common/00updater.rpy:1271
old "Preparing to download the updates."
new "Подготовка к загрузке обновлений."
# renpy/common/00updater.rpy:1273
old "Downloading the updates."
new "Загрузка обновлений."
# renpy/common/00updater.rpy:1275
old "Unpacking the updates."
new "Распаковка обновлений."
# renpy/common/00updater.rpy:1279
old "The updates have been installed. The program will restart."
new "Обновления установлены. Программа будет перезапущена."
# renpy/common/00updater.rpy:1281
old "The updates have been installed."
new "Обновления были установлены."
# renpy/common/00updater.rpy:1283
old "The updates were cancelled."
new "Обновления были отменены."
# TODO: Translation updated at 2013-12-08 21:52
translate russian strings:
# renpy/common/00gltest.rpy:50
old "Graphics Acceleration"
new "Графическое Ускорение"
# renpy/common/00gltest.rpy:54
old "Automatically Choose"
new "Выбирать Автоматически"
# renpy/common/00gltest.rpy:59
old "Force Angle/DirectX Renderer"
new "Насильно Отображать Через Angle/DirectX"
# renpy/common/00gltest.rpy:63
old "Force OpenGL Renderer"
new "Насильно Отображать Через OpenGL"
# renpy/common/00gltest.rpy:67
old "Force Software Renderer"
new "Насильно Отображать Програмно"
# renpy/common/00gltest.rpy:73
old "Changes will take effect the next time this program is run."
new "Изменения вступят в силу при следующем запуске программы."
# renpy/common/00gltest.rpy:77
old "Quit"
new "Выйти"
# renpy/common/00gltest.rpy:82
old "Return"
new "Вернуться"
# renpy/common/00gltest.rpy:112
old "Performance Warning"
new "Предупреждение о Производительности"
# renpy/common/00gltest.rpy:117
old "This computer is using software rendering."
new "Этот компьютер использует програмный рендеринг."
# renpy/common/00gltest.rpy:119
old "This computer is not using shaders."
new "Этот компьютер не использует шейдеры."
# renpy/common/00gltest.rpy:121
old "This computer is displaying graphics slowly."
new "Этот компьютер медленно отображает графику."
# renpy/common/00gltest.rpy:123
old "This computer has a problem displaying graphics: [problem]."
new "У этого компьютера проблема с отображением графики: [problem]"
# 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 "Графические драйвера устарели или работают неверно. Это может привести к медленному или неверному отображению графики. Обновление DirectX может решить эту проблему."
# 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 "Графические драйвера устарели или работают неверно. Это может привести к медленному или неверному отображению графики."
# renpy/common/00gltest.rpy:135
old "Update DirectX"
new "Обновить DirectX"
# renpy/common/00gltest.rpy:141
old "Continue, Show this warning again"
new "Продолжить, Показать это предупреждение снова"
# renpy/common/00gltest.rpy:145
old "Continue, Don't show warning again"
new "Продолжить, Не показывать это предупреждение снова."
# renpy/common/00gltest.rpy:171
old "Updating DirectX."
new "Обновляется DirectX."
# 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 "Установщик DirectX был запущен. Вероятно, он запустился в свернутом состоянии. Пожалуйста, следуйте инструкциям для установки 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}Предупреждение:{/b} Установщик DirectX по умолчанию попытается установить панель инструментов Bing. Если вы этого не хотите, снимите соответствующую галочку."
# renpy/common/00gltest.rpy:183
old "When setup finishes, please click below to restart this program."
new "По завершению установки, щелкните, чтобы перезапустить программу."
# renpy/common/00gltest.rpy:185
old "Restart"
new "Перезапустить"
# TODO: Translation updated at 2013-12-08 21:52
translate russian strings:
# renpy/common/00gallery.rpy:521
old "Image [index] of [count] locked."
new "Изображение [index] из [count] заблокированных."
# renpy/common/00gallery.rpy:539
old "prev"
new "пред"
# renpy/common/00gallery.rpy:540
old "next"
new "след"
# renpy/common/00gallery.rpy:541
old "slideshow"
new "слайдшоу"
# renpy/common/00gallery.rpy:542
old "return"
new "вернуться"
# TODO: Translation updated at 2013-12-08 21:52
translate russian strings:
# renpy/common/_errorhandling.rpym:408
old "An exception has occurred."
new "Возникло исключение."
# renpy/common/_errorhandling.rpym:434
old "Rollback"
new "Вернуться назад"
# renpy/common/_errorhandling.rpym:436
old "Attempts a roll back to a prior time, allowing you to save or choose a different choice."
new "Пытается вернуться назад, позволяя вам сохраниться или выбрать другой выбор."
# renpy/common/_errorhandling.rpym:439
old "Ignore"
new "Игнорировать"
# renpy/common/_errorhandling.rpym:441
old "Ignores the exception, allowing you to continue. This often leads to additional errors."
new "Игнорирует это исключение, позволяя вам продолжить. Это зачастую ведет к дополнительным ошибкам."
# renpy/common/_errorhandling.rpym:444
old "Reload"
new "Перезагрузить"
# renpy/common/_errorhandling.rpym:446
old "Reloads the game from disk, saving and restoring game state if possible."
new "Перезагружает игру с диска, сохраняя и восстанавливая состояние, если это возможно."
# renpy/common/_errorhandling.rpym:448
old "Open Traceback"
new "Открыть Журнал"
# renpy/common/_errorhandling.rpym:450
old "Opens the traceback.txt file in a text editor."
new "Открывает файл traceback.txt в текстовом редакторе."
# renpy/common/_errorhandling.rpym:456
old "Quits the game."
new "Выходит из игры."
# renpy/common/_errorhandling.rpym:483
old "Parsing the script failed."
new "Обработка сценария завершилась неудачно."
# renpy/common/_errorhandling.rpym:510
old "Open Parse Errors"
new "Открыть Ошибки Обработки"
# renpy/common/_errorhandling.rpym:512
old "Opens the errors.txt file in a text editor."
new "Открывает файл errors.txt в текстовом редакторе."
# TODO: Translation updated at 2013-12-08 21:52
translate russian strings:
# renpy/common/00library.rpy:77
old "Skip Mode"
new "Режим Пропуска"
# renpy/common/00library.rpy:80
old "Fast Skip Mode"
new "Режим Быстрого Пропуска"
+36
View File
@@ -0,0 +1,36 @@
# TODO: Translation updated at 2013-12-08 21:52
translate russian strings:
# game/distribute.rpy:358
old "No packages are selected, so there's nothing to do."
new "Пакеты не выбраны. Делать нечего."
# game/distribute.rpy:363
old "Scanning project files..."
new "Сканирую файлы проекта..."
# game/distribute.rpy:373
old "Scanning Ren'Py files..."
new "Сканирую файлы Ren'Py..."
# game/distribute.rpy:421
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 "Все пакеты были построены.\n\nВ связи с наличием информации о правах доступа, не распаковывайте дистрибутивы для Linux и Macintosh на Windows."
# game/distribute.rpy:545
old "Archiving files..."
new "Архивирую файлы..."
# game/distribute.rpy:808
old "Writing the [variant] [format] package."
new "Пишу пакет [variant] [format]"
# game/distribute.rpy:821
old "Making the [variant] update zsync file."
new "Создаю файл zsync для обновления [variant]"
# game/distribute.rpy:917
old "Processed {b}[complete]{/b} of {b}[total]{/b} files."
new "Обработано {b}[complete]{/b} из {b}[total]{/b} файлов."
@@ -0,0 +1,52 @@
# TODO: Translation updated at 2013-12-08 21:52
translate russian strings:
# game/distribute_gui.rpy:139
old "Build Distributions: [project.current.name!q]"
new "Сборка Дистрибутивов: [project.current.name!q]"
# game/distribute_gui.rpy:154
old "Directory Name:"
new "Имя Папки:"
# game/distribute_gui.rpy:158
old "Executable Name:"
new "Имя исполняемого файла:"
# game/distribute_gui.rpy:167
old "Actions:"
new "Действия"
# game/distribute_gui.rpy:175
old "Edit options.rpy"
new "Редактировать options.rpy"
# game/distribute_gui.rpy:176
old "Refresh"
new "Обновить"
# game/distribute_gui.rpy:193
old "Build Packages:"
new "Построить пакеты:"
# game/distribute_gui.rpy:207
old "Build Updates"
new "Построить Обновления"
# game/distribute_gui.rpy:210
old "Back"
new "Назад"
# game/distribute_gui.rpy:211
old "Build"
new "Построить"
# game/distribute_gui.rpy:218
old "Errors were detected when running the project. Please ensure the project runs without errors before building distributions."
new "При запуске проекта произошли ошибки. Пожалуйста, убедитесь в том, что проект успешно запускается, перед созданием дистрибутивов."
# game/distribute_gui.rpy:235
old "Your project does not contain build information. Would you like to add build information to the end of options.rpy?"
new "Ваш проект не содержит информацию, необходимую для сборки. Добавить её к концу options.rpy?"
+56
View File
@@ -0,0 +1,56 @@
# TODO: Translation updated at 2013-12-08 21:52
translate russian strings:
# game/editor.rpy:120
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}Рекомендуется.{/b} Beta-редактор с простым интерфейсом и возможностями, помогающими в разработке, такими, как проверка орфографии. Editra сейчас не поддерживает IME, необходимые для ввода Китайского, Японского и Корейского текстов."
# 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}Рекомендуется.{/b} Beta-редактор с простым интерфейсом и возможностями, помогающими в разработке, такими, как проверка орфографии. Editra сейчас не поддерживает IME, необходимые для ввода Китайского, Японского и Корейского текстов. На Linux, Editra требует wxPython."
# game/editor.rpy:137
old "This may have occured because wxPython is not installed on this system."
new "Это могло случится, ибо wxPython не установлен на этой системе."
# game/editor.rpy:144
old "Up to 22 MB download required."
new "Требуется скачать 22 МБ."
# game/editor.rpy:155
old "A mature editor that requires Java."
new "Проверенный временем редактор. Требует Java."
# game/editor.rpy:157
old "1.8 MB download required."
new "Требуется скачать 1.8 МБ."
# game/editor.rpy:158
old "This may have occured because Java is not installed on this system."
new "Это могло случится, ибо Java не установлена на данной системе."
# game/editor.rpy:164
old "Invokes the editor your operating system has associated with .rpy files."
new "Включает тектсовый редактор, ассоциированный на вашей системе с фалйами .rpy."
# game/editor.rpy:180
old "Prevents Ren'Py from opening a text editor."
new "Не позволяет Ren'Py запускать тектсовый редактор."
# game/editor.rpy:327
old "An exception occured while launching the text editor:\n[exception!q]"
new "Возникла ошибка при запуске текстового редактора:\n[exception!q]"
# game/editor.rpy:423
old "Select Editor"
new "Выберите редактор"
# game/editor.rpy:438
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 "Тектсовый редактор - программа, необходимая для редактирования сценариев Ren'Py. Здесь, вы можете выбрать редактор, который Ren'Py будет использовать. Если такового нет, редактор будет автоматически загружен и установлен."
# game/editor.rpy:460
old "Cancel"
new "Отмена"
+92
View File
@@ -0,0 +1,92 @@
# TODO: Translation updated at 2013-12-08 21:52
translate russian strings:
# game/front_page.rpy:67
old "refresh"
new "обновить"
# game/front_page.rpy:94
old "+ Create New Project"
new "+ Добавить новый проект"
# game/front_page.rpy:106
old "Launch Project"
new "Запустить проект"
# game/front_page.rpy:122
old "[p.name!q] (template)"
new "[p.name!q] (образец)"
# game/front_page.rpy:138
old "Tutorial"
new "Обучение"
# game/front_page.rpy:139
old "The Question"
new "Вопрос"
# game/front_page.rpy:155
old "Active Project"
new "Активный Проект"
# game/front_page.rpy:163
old "Open Directory"
new "Открыть Папку"
# game/front_page.rpy:168
old "game"
new "game"
# game/front_page.rpy:169
old "base"
new "base"
# game/front_page.rpy:175
old "Edit File"
new "Редактировать Файл"
# game/front_page.rpy:183
old "All script files"
new "Все файлы сценариев"
# game/front_page.rpy:192
old "Navigate Script"
new "Навигация по Сценарию"
# game/front_page.rpy:203
old "Check Script (Lint)"
new "Проверить Сценарий (Lint)"
# game/front_page.rpy:204
old "Change Theme"
new "Сменить тему"
# game/front_page.rpy:205
old "Delete Persistent"
new "Очистить постоянные данные"
# game/front_page.rpy:213
old "Build Distributions"
new "Построить дистрибутивы"
# game/front_page.rpy:215
old "Android"
new "Android"
# game/front_page.rpy:216
old "Generate Translations"
new "Создать переводы"
# game/front_page.rpy:217
old "Extract Dialogue"
new "Извлечь диалог"
# game/front_page.rpy:233
old "Checking script for potential problems..."
new "Проверка потенциальных проблем сценария..."
# game/front_page.rpy:248
old "Deleting persistent data..."
new "Удаление постоянных данных..."
+84
View File
@@ -0,0 +1,84 @@
# TODO: Translation updated at 2013-12-08 21:52
translate russian strings:
# game/interface.rpy:89
old "Documentation"
new "Документация"
# game/interface.rpy:90
old "Ren'Py Website"
new "Сайт Ren'Py"
# game/interface.rpy:91
old "Ren'Py Games List"
new "Список Игр Ren'Py"
# game/interface.rpy:92
old "About"
new "О"
# game/interface.rpy:99
old "update"
new "обновить"
# game/interface.rpy:101
old "preferences"
new "настройки"
# game/interface.rpy:102
old "quit"
new "выйти"
# game/interface.rpy:174
old "Yes"
new "Да"
# game/interface.rpy:176
old "No"
new "Нет"
# game/interface.rpy:211
old "Due to package format limitations, non-ASCII file and directory names are not allowed."
new "В связи с ограничениями на форматы пакетов, не-ASCII имена файлов и папок недопустимы."
# game/interface.rpy:303
old "ERROR"
new "ОШИБКА"
# game/interface.rpy:332
old "While [what!q], an error occured:"
new "Пока [what!q], возникла ошибка:"
# game/interface.rpy:333
old "[exception!q]"
new "[exception!q]"
# game/interface.rpy:351
old "Text input may not contain the {{ or [[ characters."
new "Текст не должен содержать знаки {{ или [[."
# game/interface.rpy:356
old "File and directory names may not contain / or \\."
new "Имена файлов и папок не должны содержать / или \\."
# game/interface.rpy:362
old "File and directory names must consist of ASCII characters."
new "Имена файлов и папок должны состоять из знаков ASCII."
# game/interface.rpy:383
old "INFORMATION"
new "ИНФОРМАЦИЯ"
# game/interface.rpy:426
old "PROCESSING"
new "ОБРАБОТКА"
# game/interface.rpy:443
old "QUESTION"
new "ВОПРОС"
# game/interface.rpy:456
old "CHOICE"
new "ВЫБОР"
+68
View File
@@ -0,0 +1,68 @@
# TODO: Translation updated at 2013-12-08 21:52
translate russian strings:
# game/navigation.rpy:150
old "Navigate: [project.current.name]"
new "Навигация: [project.current.name]"
# game/navigation.rpy:159
old "Order: "
new "Порядок: "
# game/navigation.rpy:160
old "alphabetical"
new "алфавитный"
# game/navigation.rpy:162
old "by-file"
new "по-файлу"
# game/navigation.rpy:164
old "natural"
new "натуральный"
# game/navigation.rpy:176
old "Category:"
new "Категория:"
# game/navigation.rpy:178
old "files"
new "файлы"
# game/navigation.rpy:179
old "labels"
new "метки"
# game/navigation.rpy:180
old "defines"
new "определения"
# game/navigation.rpy:181
old "transforms"
new "трансформации"
# game/navigation.rpy:182
old "screens"
new "экраны"
# game/navigation.rpy:183
old "callables"
new "вызываемые"
# game/navigation.rpy:184
old "TODOs"
new "TODO"
# game/navigation.rpy:223
old "+ Add script file"
new "+ Добавить файл сценария"
# game/navigation.rpy:231
old "No TODO comments found.\n\nTo create one, include \"# TODO\" in your script."
new "Не найдено комментариев TODO.\n\nЧтобы создать такой, включите \"#TODO\" в вашем сценарии"
# game/navigation.rpy:238
old "The list of names is empty."
new "Список имен пуст."
+32
View File
@@ -0,0 +1,32 @@
# TODO: Translation updated at 2013-12-08 21:52
translate russian strings:
# game/new_project.rpy:22
old "Choose Project Template"
new "Выберите Образец Проекта"
# 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 "Пожалуйста, выберите образец, на котором основывать ваш проект. Образец задает шрифт и язык по умолчанию для интерфейса. Если ваш язык не поддерживается, выберите 'english'."
# game/new_project.rpy:55
old "PROJECT NAME"
new "ИМЯ ПРОЕКТА"
# game/new_project.rpy:56
old "Please enter the name of your project:"
new "Пожалуйтса, введите имя проекта:"
# game/new_project.rpy:62
old "The project name may not be empty."
new "Имя проекта не должно быть пустым."
# game/new_project.rpy:67
old "[project_name!q] already exists. Please choose a different project name."
new "[project_name!q] уже существует. Выберите другое имя проекта."
# game/new_project.rpy:70
old "[project_dir!q] already exists. Please choose a different project name."
new "[project_dir!q] уже существует. Выберите другое имя проекта."
+64
View File
@@ -0,0 +1,64 @@
# TODO: Translation updated at 2013-12-08 21:52
translate russian strings:
# game/preferences.rpy:40
old "Launcher Preferences"
new "Настройки Launcher"
# game/preferences.rpy:61
old "Projects Directory:"
new "Папка проектов:"
# game/preferences.rpy:68
old "[persistent.projects_directory!q]"
new "[persistent.projects_directory!q]"
# game/preferences.rpy:70
old "Not Set"
new "Не задано"
# game/preferences.rpy:84
old "Text Editor:"
new "Текстовый редактор:"
# game/preferences.rpy:106
old "Update Channel:"
new "Канал обновлений:"
# game/preferences.rpy:126
old "Navigation Options:"
new "Опции навигации:"
# game/preferences.rpy:130
old "Include private names"
new "Включать приватные имена"
# game/preferences.rpy:131
old "Include library names"
new "Включать имена библиотек"
# game/preferences.rpy:141
old "Launcher Options:"
new "Опции Launcher:"
# game/preferences.rpy:145
old "Hardware rendering"
new "Аппаратный рендеринг"
# game/preferences.rpy:146
old "Show templates"
new "Показывать образцы"
# game/preferences.rpy:149
old "Console output"
new "Вывод на консоль"
# game/preferences.rpy:170
old "Open launcher project"
new "Открыть проект launcher"
# game/preferences.rpy:184
old "Language:"
new "Язык:"
+28
View File
@@ -0,0 +1,28 @@
# TODO: Translation updated at 2013-12-08 21:52
translate russian strings:
# game/project.rpy:204
old "Ren'Py is scanning the project..."
new "Ren'Py сканирует проект..."
# game/project.rpy:508
old "PROJECTS DIRECTORY"
new "ДИРЕКТОРИЯ ПРОЕКТОВ"
# game/project.rpy:508
old "Please choose the projects directory using the directory chooser.\n{b}The directory chooser may have opened behind this window.{/b}"
new "Пожалуйста, выберите директорию проектов, используя выбиратель директорий.\n{b}Он мог появится сзади этого окна.{/b}"
# game/project.rpy:508
old "This launcher will scan for projects in this directory, will create new projects in this directory, and will place built projects into this directory."
new "Launcher будет искать проекты в этой директории, создавать новые проекты в этой директории, и размещать построенные проекты в этой директории."
# game/project.rpy:548
old "Ren'Py was unable to run python with tkinter to choose the projects directory."
new "Ren'Py не смогла запустить python с tkinter для выбора директории проектов."
# game/project.rpy:552
old "Ren'Py has set the projects directory to:"
new "Ren'Py установила директорию проектов на:"
+36
View File
@@ -0,0 +1,36 @@
# TODO: Translation updated at 2013-12-08 21:52
translate russian strings:
# game/translations.rpy:10
old "Create or Update Translations"
new "Создать или Обновить Переводы"
# game/translations.rpy:10
old "Please enter the name of the language for which you want to create or update translations."
new "Пожалуйста, введите имя языка, для которого вы хотите создать или обновить переводы."
# game/translations.rpy:15
old "The language name can not be the empty string."
new "Имя языка не должно быть пустой строкой."
# game/translations.rpy:26
old "Ren'Py is generating translations...."
new "Ren'Py создает переводы..."
# game/translations.rpy:30
old "Ren'Py has finished generating [language] translations."
new "Ren'Py закончил создавать переводы для [language]."
# game/translations.rpy:44
old "What format would you like for the extracted dialogue?"
new "Какой формат вы желаете для извлеченного диалога?"
# game/translations.rpy:56
old "Ren'Py is extracting dialogue...."
new "Ren'Py извлекает диалог..."
# game/translations.rpy:60
old "Ren'Py has finished extracting dialogue. The extracted dialogue can be found in dialogue.[format] in the base directory."
new "Ren'Py закончила извлечение диалога. Извлеченный диалог может быть найден в папке base, в подпапке dialogue.[format]."
+88
View File
@@ -0,0 +1,88 @@
# TODO: Translation updated at 2013-12-08 21:52
translate russian strings:
# game/updater.rpy:54
old "Select Update Channel"
new "Выберите Канал Обновлений"
# game/updater.rpy:65
old "The update channel controls the version of Ren'Py the updater will download. Please select an update channel:"
new "Канал Обновлений выбирает, какую версию Ren'Py скачает программа для обновления. Выберите канал обновлений:"
# game/updater.rpy:70
old "Release"
new "Релиз"
# game/updater.rpy:76
old "{b}Recommended.{/b} The version of Ren'Py that should be used in all newly-released games."
new "{b}Рекомендуется.{/b} Эта версия Ren'Py должна использоваться для всех новых игр."
# game/updater.rpy:81
old "Prerelease"
new "Пререлиз"
# game/updater.rpy:87
old "A preview of the next version of Ren'Py that can be used for testing and taking advantage of new features, but not for final releases of games."
new "Взгляд на следующую версию Ren'Py, которую можно использовать для тестирования и использования новых возможностей, но не для финальных релизов игр."
# game/updater.rpy:93
old "Experimental"
new "Экспериментальная"
# game/updater.rpy:99
old "Experimental versions of Ren'Py. You shouldn't select this channel unless asked by a Ren'Py developer."
new "Экспериментальные версии Ren'Py. Не выбирайте этот канал, если вас не просил об этом разработчик Ren'Py."
# game/updater.rpy:119
old "An error has occured:"
new "Возникла ошибка:"
# game/updater.rpy:121
old "Checking for updates."
new "Проверка обновлений."
# game/updater.rpy:123
old "Ren'Py is up to date."
new "Ren'Py обновлен."
# game/updater.rpy:125
old "[u.version] is now available. Do you want to install it?"
new "[u.version] доступна. Вы хотите её установить?"
# game/updater.rpy:127
old "Preparing to download the update."
new "Подготовка к обновлению."
# game/updater.rpy:129
old "Downloading the update."
new "Загрузка обновления."
# game/updater.rpy:131
old "Unpacking the update."
new "Распаковка обновления."
# game/updater.rpy:133
old "Finishing up."
new "Завершение."
# game/updater.rpy:135
old "The update has been installed. Ren'Py will restart."
new "Обновление было установлено. Ren'Py будет перезапущен."
# game/updater.rpy:137
old "The update has been installed."
new "Обновление было установлено."
# game/updater.rpy:139
old "The update was cancelled."
new "Обновление было отменено."
# game/updater.rpy:156
old "Ren'Py Update"
new "Обновление Ren'Py"
# game/updater.rpy:162
old "Proceed"
new "Продолжить"
+1 -1
View File
@@ -1,4 +1,4 @@
translate spanish strings:
translate spanish strings:
# game/about.rpy:21
old "[version!q]"
+1 -1
View File
@@ -1,4 +1,4 @@
translate spanish strings:
translate spanish strings:
# game/add_file.rpy:7
old "FILENAME"
+10 -1
View File
@@ -1,5 +1,9 @@
translate spanish strings:
translate spanish strings:
# game/android.rpy:12
old "To build Android packages, please download RAPT, unzip it, and place it into the Ren'Py directory. Then restart the Ren'Py launcher."
new "Para construir un paquete para Android, por favor descarga RAPT, descomprimelo y colocalo dentro de la carpeta de Ren'Py. Despues reinicia el launcher de Ren'Py."
# 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 "Se necesita Java Development Kit de 32-bit para construir paquetes de Android en Windows. El JDK es diferente al JRE, es posible que tenga Java sin tener el JDK.\n\nPor favor {a=http://www.oracle.com/technetwork/java/javase/downloads/index.html}descarga e instala el JDK{/a}, después, reinicia Ren'Py."
@@ -103,3 +107,8 @@ translate spanish strings:
# game/android.rpy:435
old "Build & Install"
new "Construir & Instalar"
# game/android.rpy:486
old "Before packaging Android apps, you'll need to download RAPT, the Ren'Py Android Packaging Tool. Would you like to download RAPT now?"
new "Antes de empaquetar apps para Android, vas a necesitar descargar RAPT, Ren'Py Android Packaging Tool. ¿Quieres descargar RAPT ahora?"
+1 -1
View File
@@ -1,4 +1,4 @@
translate spanish strings:
translate spanish strings:
# game/choose_theme.rpy:274
old "Could not change the theme. Perhaps options.rpy was changed too much."
+82 -1
View File
@@ -1,4 +1,4 @@
#translation: renpy/common/00action_file.rpy
#translation: renpy/common/00action_file.rpy
translate spanish strings:
# renpy/common/00action_file.rpy:124
@@ -320,3 +320,84 @@ translate spanish strings:
# renpy/common/_layout/classic_load_save.rpym:161
old "q"
new "q"
# renpy/common/_developer/inspector.rpym:25
old "Displayable Inspector"
new "Displayable Inspector"
# renpy/common/_developer/inspector.rpym:31
old "Nothing to inspect."
new "Nada para inspeccionar."
# renpy/common/_developer/inspector.rpym:40
old "Size"
new "Tamaño"
# renpy/common/_developer/inspector.rpym:45
old "Style"
new "Estilo"
# renpy/common/_developer/inspector.rpym:105
old "Inspecting Styles of [displayable_name!q]"
new "Inspeccionando estilos de [displayable_name!q]"
# renpy/common/_developer/inspector.rpym:117
old "displayable:"
new "visualizable:"
# renpy/common/_developer/inspector.rpym:124
old " (no properties affect the displayable)"
new " (no hay propiedades que afecten la visualización)"
# renpy/common/_developer/inspector.rpym:126
old " (default properties omitted)"
new " (propiedades por defecto omitidas)"
# renpy/common/_developer/inspector.rpym:156
old "<repr() failed>"
new "<repr() fallido>"
# renpy/common/_developer/developer.rpym:46
old "Reload Game (Shift+R)"
new "Reiniciar Juego (Shift+R)"
# renpy/common/_developer/developer.rpym:49
old "Variable Viewer"
new "Visor De Variables"
# renpy/common/_developer/developer.rpym:52
old "Theme Test"
new "Probar Tema"
# renpy/common/_developer/developer.rpym:58
old "Image Location Picker"
new "Image Location Picker"
# renpy/common/_developer/developer.rpym:61
old "Filename List"
new "Lista De Archivos"
# renpy/common/_developer/developer.rpym:307
old "Undefined Images"
new "Imagenes No Definidas"
# renpy/common/_developer/developer.rpym:410
old "Mouse position: %r"
new "Posición del ratón: %r"
# renpy/common/_developer/developer.rpym:412
old "Right-click or escape to quit."
new "Click-derecho o escape para salir."
# renpy/common/_developer/developer.rpym:465
old "Done"
new "Hecho"
# renpy/common/_developer/developer.rpym:44
old "Developer Menu"
new "Menú De Desarrollo"
# renpy/common/_developer/developer.rpym:405
old "Rectangle: %r"
new "Rectángulo: %r"
+1 -1
View File
@@ -1,4 +1,4 @@
translate spanish strings:
translate spanish strings:
# game/distribute.rpy:358
old "No packages are selected, so there's nothing to do."
+1 -1
View File
@@ -1,4 +1,4 @@
translate spanish strings:
translate spanish strings:
# game/distribute_gui.rpy:139
old "Build Distributions: [project.current.name!q]"
+1 -1
View File
@@ -1,4 +1,4 @@
translate spanish strings:
translate spanish strings:
# description for the option: "Editra"
# game/editor.rpy:120
+1 -1
View File
@@ -1,4 +1,4 @@
translate spanish strings:
translate spanish strings:
# game/font_page.rpy 65
old "PROJECTS:"
+1 -1
View File
@@ -1,4 +1,4 @@
translate spanish strings:
translate spanish strings:
# game/interface.rpy:89
old "Documentation"
+1 -1
View File
@@ -1,4 +1,4 @@
translate spanish strings:
translate spanish strings:
# game/navigation.rpy:150
old "Navigate: [project.current.name]"
+1 -1
View File
@@ -1,4 +1,4 @@
translate spanish strings:
translate spanish strings:
# game/new_project.rpy:22
old "Choose Project Template"
+1 -1
View File
@@ -1,4 +1,4 @@
translate spanish strings:
translate spanish strings:
# game/preferences.rpy:40
old "Launcher Preferences"
+25 -1
View File
@@ -1,4 +1,12 @@
translate spanish strings:
translate spanish strings:
# game/project.rpy:201
old "Launching the project failed."
new "La ejecución del proyecto ha fallado."
# game/project.rpy:201
old "Please ensure that your project launches normally before running this command."
new "Por favor, asegurate de que tu proyecto se ejecuta normalmente antes de ejecutar este comando."
# game/project.rpy:204
old "Ren'Py is scanning the project..."
@@ -23,3 +31,19 @@ translate spanish strings:
# game/project.rpy:547
old "Ren'Py has set the projects directory to:"
new "Ren'Py ha establecido el directorio de proyectos:"
# game/project.rpy:30
old "After making changes to the script, press shift+R to reload your game."
new "Despues de hacer cambios a un script, presiona shift+R para recargar tu juego."
# game/project.rpy:31
old "Press shift+O (the letter) to access the console."
new "Presiona shift+O (la letra) para acceder a la consola."
# game/project.rpy:32
old "Press shift+D to access the developer menu."
new "Presiona shift+D para acceder al menú de desarrollador."
# game/project.rpy:496
old "Launching"
new "Ejecutando"
+1 -1
View File
@@ -1,3 +1,3 @@
translate spanish python:
translate spanish python:
make_style_backup()
+1 -1
View File
@@ -1,4 +1,4 @@
translate spanish strings:
translate spanish strings:
# game/translations.rpy:10
old "Create or Update Translations"
+10 -1
View File
@@ -1,4 +1,4 @@
translate spanish strings:
translate spanish strings:
# game/updater.rpy:54
old "Select Update Channel"
@@ -32,6 +32,14 @@ translate spanish strings:
old "Experimental versions of Ren'Py. You shouldn't select this channel unless asked by a Ren'Py developer."
new "Versiones experimentales de Ren'Py. No debes seleccionar el canal a menos que te lo pida un desarrollador de Ren'Py."
# game/updater.rpy:106
old "Nightly"
new "Nightly"
# game/updater.rpy:112
old "The bleeding edge of Ren'Py development. This may have the latest features, or might not run at all."
new "Versión de desarrollo de Ren'Py. Puede tener las últimas características o puede no funcionar."
# game/updater.rpy:119
old "An error has occured:"
new "Ha ocurrido un error:"
@@ -83,3 +91,4 @@ translate spanish strings:
# game/updater.rpy:162
old "Proceed"
new "Seguir"
+21
View File
@@ -1,3 +1,24 @@
# Copyright 2004-2014 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:
if persistent.translate_language is None:
+41 -5
View File
@@ -1,5 +1,23 @@
# Copyright 2004-2012 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
# Copyright 2004-2014 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:
# This can be one of None, "available", "not-available", or "error".
@@ -12,7 +30,8 @@ init python:
UPDATE_URLS = {
"Release" : "http://update.renpy.org/release/updates.json",
"Prerelease" : "http://update.renpy.org/prerelease/updates.json",
"Experimental" : "http://update.renpy.org/experimental/updates.json"
"Experimental" : "http://update.renpy.org/experimental/updates.json",
"Nightly" : "http://nightly.renpy.org/current/updates.json",
}
version_tuple = renpy.version(tuple=True)
@@ -29,7 +48,7 @@ init python:
return name in updater.get_installed_packages()
def add_dlc(name):
def add_dlc(name, restart=False):
"""
Adds the DLC package, if it doesn't already exist.
@@ -39,7 +58,12 @@ init python:
if check_dlc(name):
return True
return renpy.invoke_in_new_context(updater.update, DLC_URL, add=[name], public_key=PUBLIC_KEY, simulate=UPDATE_SIMULATE, restart=False)
if persistent.update_channel == "Nightly":
dlc_url = UPDATE_URLS["Nightly"]
else:
dlc_url = DLC_URL
return renpy.invoke_in_new_context(updater.update, dlc_url, add=[name], public_key=PUBLIC_KEY, simulate=UPDATE_SIMULATE, restart=restart)
screen update_channel:
@@ -99,6 +123,18 @@ screen update_channel:
text _("Experimental versions of Ren'Py. You shouldn't select this channel unless asked by a Ren'Py developer.") style "l_small_text"
# Nightly
add SPACER
textbutton _("Nightly") action [ SetField(persistent, "update_channel", "Nightly"), Jump("preferences") ]
add HALF_SPACER
frame:
style "l_indent"
text _("The bleeding edge of Ren'Py development. This may have the latest features, or might not run at all.") style "l_small_text"
textbutton _("Cancel") action Jump("preferences") style "l_left_button"
label update_preference:
+20 -2
View File
@@ -1,5 +1,23 @@
# Copyright 2004-2012 Tom Rothamel <pytom@bishoujo.us>
# See LICENSE.txt for license details.
# Copyright 2004-2014 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 in util:
import os
+1 -1
View File
@@ -1,5 +1,5 @@
# -*- python -*-
# Copyright 2004-2012 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2014 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
+20
View File
@@ -1,3 +1,23 @@
# Copyright 2004-2014 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.
cdef extern from "fribidi/fribidi.h":
int FRIBIDI_TYPE_LTR
+532
View File
@@ -0,0 +1,532 @@
# Copyright 2004-2014 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.
from __future__ import print_function, unicode_literals, division, absolute_import
str = unicode # @ReservedAssignment
import collections
import os
try:
from io import StringIO
except:
from StringIO import StringIO
# Paths
BASE = os.path.dirname(os.path.abspath(__file__))
ROOT = os.path.dirname(BASE)
def sorted_dict(**kwargs):
"""
Constructs an ordered_dict from the keyword arguments in sorted order.
"""
items = list(kwargs.items())
return collections.OrderedDict(items)
################################################################################
# Prefixes
################################################################################
# A map from prefix name to Prefix object.
prefixes = collections.OrderedDict()
class Prefix(object):
def __init__(self, index, name, priority, alts):
# The index of where this prefix is stored in memory, or -1 if this
# prefix isn't stored in memory.
self.index = index
# The name of this prefix.
self.name = name
# The priority of this prefix. When added at the same time, higher
# priority prefixes take precendence over lower priority prefixes.
self.priority = priority
# A list of prefix indexes that should be updated when this prefix is
# updated, including this prefix.
if index >= 0:
self.alts = [ self.index ]
self.alt_names = [ self.name ]
else:
self.alts = [ ]
self.alt_names = [ ]
for i in alts:
self.alts.append(prefixes[i].index)
self.alt_names.append(i)
prefixes[name] = self
# The number of priority levels we have.
PRIORITY_LEVELS = 4
# The number of prefixes we have.
PREFIX_COUNT = 6
Prefix(5, 'selected_hover_', 3, [ ])
Prefix(4, 'selected_idle_', 3, [ ])
Prefix(3, 'selected_insensitive_', 3, [ ])
Prefix(-3, 'selected_', 2, [ "selected_hover_", "selected_idle_", "selected_insensitive_" ])
Prefix(2, 'hover_', 1, [ "selected_hover_" ])
Prefix(1, 'idle_', 1, [ "selected_idle_" ] )
Prefix(0, 'insensitive_', 1, [ "selected_insensitive_" ])
Prefix(-4, '', 0, [ "selected_hover_", "selected_idle_", "selected_insensitive_", "idle_", "hover_", "insensitive_" ] )
Prefix(-2, 'activate_', 0, [ ])
Prefix(-1, 'selected_activate_', 0, [ ])
################################################################################
# Style Properties
################################################################################
# All the style properties we know about. This is a dict, that maps each style
# to a function that is called when it is set, or None if no such function
# is needed.
style_properties = sorted_dict(
activate_sound = None,
aft_bar = 'none_is_null',
aft_gutter = None,
antialias = None,
vertical = None,
background = 'renpy.easy.displayable_or_none',
bar_invert = None,
bar_resizing = None,
unscrollable = None,
bar_vertical = None,
black_color = 'renpy.easy.color',
bold = None,
bottom_margin = None,
bottom_padding = None,
box_layout = None,
box_reverse = None,
box_wrap = None,
caret = 'renpy.easy.displayable_or_none',
child = 'renpy.easy.displayable_or_none',
clipping = None,
color = 'renpy.easy.color',
drop_shadow = None,
drop_shadow_color = 'renpy.easy.color',
first_indent = None,
first_spacing = None,
fit_first = None,
focus_mask = None,
focus_rect = None,
font = None,
fore_bar = 'none_is_null',
fore_gutter = None,
foreground = 'renpy.easy.displayable_or_none',
hover_sound = None,
hyperlink_functions=None,
italic = None,
justify = None,
kerning = None,
language = None,
layout = None,
line_leading = None,
left_margin = None,
line_overlap_split=None,
left_padding = None,
line_spacing = None,
mouse = None,
min_width = None,
newline_indent = None,
order_reverse = None,
outlines = 'expand_outlines',
rest_indent = None,
right_margin = None,
right_padding = None,
ruby_style = None,
size = None,
size_group = None,
slow_abortable = None,
slow_cps = None,
slow_cps_multiplier = None,
spacing = None,
strikethrough = None,
subtitle_width = None,
subpixel = None,
text_y_fudge = None,
text_align = None,
thumb = 'none_is_null',
thumb_offset = None,
thumb_shadow = 'none_is_null',
time_policy = None,
top_margin = None,
top_padding = None,
underline = None,
xanchor = 'expand_anchor',
xfill = None,
xmaximum = None,
xminimum = None,
xoffset = None,
xpos = None,
yanchor = 'expand_anchor',
yfill = None,
ymaximum = None,
yminimum = None,
yoffset = None,
ypos = None,
)
# A map from a style property to its index in the order of style_properties.
style_property_index = collections.OrderedDict()
for i, name in enumerate(style_properties):
style_property_index[name] = i
style_property_count = len(style_properties)
# print("{} properties * {} prefixes = {} cache entries".format(
# style_property_count, PREFIX_COUNT, style_property_count * PREFIX_COUNT))
# A list of synthetic style properties, where each property is expanded into
# multiple style properties. Each property are mapped into a list of tuples,
# with each consisting of:
#
# * The name of the style to assign.
# * A string giving the name of a functon to call to get the value to assign, a constant
# numeric value, or None to not change the argument.
synthetic_properties = sorted_dict(
xmargin = [
('left_margin', None),
('right_margin', None)
],
ymargin = [
('top_margin', None),
('bottom_margin', None),
],
xalign = [
('xpos', None),
('xanchor', None),
],
yalign = [
('ypos', None),
('yanchor', None),
],
xpadding = [
('left_padding', None),
('right_padding', None),
],
ypadding = [
('top_padding', None),
('bottom_padding', None),
],
minwidth = [ ('min_width', None) ],
textalign = [ ('text_align', None) ],
slow_speed = [ ('slow_cps', None) ],
enable_hover = [ ],
left_gutter = [ ('fore_gutter', None) ],
right_gutter = [ ('aft_gutter', None) ],
top_gutter = [ ('fore_gutter', None) ],
bottom_gutter = [ ('aft_gutter', None) ],
left_bar = [ ('fore_bar', None) ],
right_bar = [ ('aft_bar', None) ],
top_bar = [ ('fore_bar', None) ],
bottom_bar = [ ('aft_bar', None) ],
box_spacing = [ ( 'spacing', None ) ],
box_first_spacing = [ ( 'first_spacing', None) ],
pos = [
('xpos', 'index_0'),
('ypos', 'index_1'),
],
anchor = [
('xanchor', 'index_0'),
('yanchor', 'index_1'),
],
# Conflicts w/ a variable used in the Style implementation.
# offset = [
# ('xoffset', index_0),
# ('yoffset', index_1),
# ],
align = [
('xpos', 'index_0'),
('ypos', 'index_1'),
('xanchor', 'index_0'),
('yanchor', 'index_1'),
],
maximum = [
('xmaximum', 'index_0'),
('ymaximum', 'index_1'),
],
minimum = [
('xminimum', 'index_0'),
('yminimum', 'index_1'),
],
area = [
('xpos', 'index_0'),
('ypos', 'index_1'),
('xanchor', 0),
('yanchor', 0),
('xfill', True),
('yfill', True),
('xmaximum', 'index_2'),
('ymaximum', 'index_3'),
('xminimum', 'index_2'),
('yminimum', 'index_3'),
],
xcenter = [
('xpos', None),
('xanchor', 0.5),
],
ycenter = [
('ypos', None),
('yanchor', 0.5),
],
)
all_properties = collections.OrderedDict()
for k, v in style_properties.items():
all_properties[k] = [ (k, None) ]
all_properties.update(synthetic_properties)
################################################################################
# Code Generation
################################################################################
class CodeGen(object):
"""
Utility class for code generation.
`filename`
The name of the file we code-generate into.
`spew`
If true, spew the generated code to stdout.
"""
def __init__(self, filename, spew=False):
self.filename = os.path.join(ROOT, filename)
self.f = StringIO()
self.depth = 0
self.spew = spew
def close(self):
text = self.f.getvalue()
if os.path.exists(self.filename):
with open(self.filename, "rb") as f:
old = f.read()
if old == text:
return
with open(self.filename, "wb") as f:
f.write(text)
def write(self, s, *args, **kwargs):
out = " " * self.depth
out += s.format(*args, **kwargs)
out = out.rstrip()
if self.spew:
print(out)
out += "\n"
self.f.write(out)
def indent(self):
self.depth += 1
def dedent(self):
self.depth -= 1
def generate_constants():
"""
This generates code that defines the property functions.
"""
g = CodeGen("module/gen/styleconstants.pxi")
g.write("DEF PRIORITY_LEVELS = {}", PRIORITY_LEVELS)
g.write("DEF PREFIX_COUNT = {}", PREFIX_COUNT)
g.write("DEF STYLE_PROPERTY_COUNT = {}", style_property_count)
for p in prefixes.values():
if p.index < 0:
continue
g.write("DEF {}PREFIX = {}", p.name.upper(), p.index * style_property_count)
for k in style_properties:
g.write("DEF {}_INDEX = {}", k.upper(), style_property_index[k])
g.close()
def generate_property_function(g, prefix, propname, properties):
name = prefix.name + propname
g.write("cdef int {name}_property(PyObject **cache, int *cache_priorities, int priority, object value) except -1:", name=name)
g.indent()
g.write("priority += {}", prefix.priority)
for stylepropname, func in properties:
value = "value"
g.write("")
if isinstance(func, str):
g.write("v = {func}({value})", func=func, value=value)
value = "v"
elif func is not None:
g.write("v = {}", func)
value = "v"
propfunc = style_properties[stylepropname]
if propfunc is not None:
g.write("v = {propfunc}({value})", propfunc=propfunc, value=value)
value = "v"
for alt, alt_name in zip(prefix.alts, prefix.alt_names):
g.write("assign({}, cache, cache_priorities, priority, <PyObject *> {}) # {}{}",
alt * len(style_properties) + style_property_index[stylepropname],
value, alt_name, stylepropname)
g.write("return 0")
g.dedent()
g.write("")
g.write('register_property_function("{}", {}_property)', name, name)
g.write("")
pass
def generate_property_functions():
"""
This generates code that defines the property functions.
"""
g = CodeGen("module/gen/stylepropertyfunctions.pxi")
for propname, proplist in all_properties.items():
for prefix in sorted(prefixes.values(), key=lambda p : p.index):
generate_property_function(g, prefix, propname, proplist)
g.close()
def generate_property(g, propname, prefix):
"""
This generates the code for a single property on the style object.
"""
name = prefix.name + propname
g.write("property {}:", name)
g.indent()
if name in style_properties:
# __get__
g.write("def __get__(self):")
g.indent()
g.write("return self._get({})", style_property_index[propname])
g.dedent()
# __set__
g.write("def __set__(self, value):")
g.indent()
g.write("self.properties.append({{ '{}' : value }})", name)
g.dedent()
# __del__
g.write("def __del__(self):")
g.indent()
g.write("self.delattr('{}')", name)
g.dedent()
g.dedent()
g.write("")
def generate_properties():
g = CodeGen("module/gen/styleproperties.pxi")
g.write("cdef class Style(StyleCore):")
g.write("")
g.indent()
for propname in all_properties:
for prefix in sorted(prefixes.values(), key=lambda p : p.index):
generate_property(g, propname, prefix)
g.dedent()
g.close()
def generate_sets():
"""
Generates code for sets of properties.
"""
ap = collections.OrderedDict()
for k, v in all_properties.items():
ap[k] = [ i[0] for i in v ]
prefix_priority = collections.OrderedDict()
prefix_alts = collections.OrderedDict()
for p in prefixes.values():
prefix_priority[p.name] = p.priority
prefix_alts[p.name] = p.alt_names
g = CodeGen("module/gen/stylesets.pxi")
g.write("# This file is generated by generate_styles.py.")
g.write("")
g.write('exec """\\')
g.write("all_properties = {}", ap)
g.write("prefix_priority = {}", prefix_priority)
g.write("prefix_alts = {}", prefix_alts)
g.write('"""')
g.close()
def generate():
generate_constants()
generate_property_functions()
generate_properties()
generate_sets()
if __name__ == "__main__":
generate()
+1 -1
View File
@@ -1,5 +1,5 @@
# -*- python -*-
# Copyright 2004-2012 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2014 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
+50 -6
View File
@@ -1,5 +1,26 @@
#!/usr/bin/env python
# Copyright 2004-2014 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.
import platform
import sys
import os
@@ -7,8 +28,28 @@ import os
# Change to the directory containing this file.
os.chdir(os.path.abspath(os.path.dirname(sys.argv[0])))
# Create the gen directory if it doesn't exist.
try:
os.makedirs("gen")
except:
pass
# Generate styles.
import generate_styles
generate_styles.generate()
# If RENPY_CC or RENPY_LD are in the environment, and CC or LD are not, use them.
def setup_env(name):
renpy_name = "RENPY_" + name
if (renpy_name in os.environ) and (name not in os.environ):
os.environ[name] = os.environ[renpy_name]
setup_env("CC")
setup_env("LD")
import setuplib
from setuplib import android, include, library, cython, cmodule, pymodule, copyfile, find_unnecessary_gen
from setuplib import android, include, library, cython, pymodule, copyfile, find_unnecessary_gen
# These control the level of optimization versus debugging.
setuplib.extra_compile_args = [ "-Wno-unused-function" ]
@@ -25,7 +66,7 @@ include("zlib.h")
include("png.h")
include("SDL.h", directory="SDL")
include("ft2build.h")
include("freetype/freetype.h", directory="freetype2")
include("freetype/freetype.h", directory="freetype2", optional=True) or include("freetype.h", directory="freetype2")
include("libavutil/avstring.h")
include("libavformat/avformat.h")
include("libavcodec/avcodec.h")
@@ -85,12 +126,15 @@ if not android:
libs = sdl + sound,
define_macros=macros)
# renpy
cython("renpy.style")
cython("renpy.styleclass")
# Display.
# renpy.display
cython("renpy.display.render", libs=[ 'z', 'm' ])
cython("renpy.display.accelerator", libs=sdl + [ 'z', 'm' ])
# Gl.
# renpy.gl
if android:
glew_libs = [ 'GLESv2', 'z', 'm' ]
elif has_libglew:
@@ -106,7 +150,7 @@ cython("renpy.gl.glenviron_limited", libs=glew_libs, compile_if=not android)
cython("renpy.gl.glrtt_copy", libs=glew_libs)
cython("renpy.gl.glrtt_fbo", libs=glew_libs)
# Angle
# renpy.angle
def anglecopy(fn):
if android:
return
@@ -134,7 +178,7 @@ anglecython("renpy.angle.glenviron_shader")
anglecython("renpy.angle.glrtt_fbo")
anglecython("renpy.angle.glrtt_copy")
# Text.
# renpy.text
cython("renpy.text.textsupport")
cython("renpy.text.texwrap")
+25 -1
View File
@@ -1,3 +1,24 @@
# Copyright 2004-2014 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.
# This file encapsulates much of the complexity of the Ren'Py build process,
# so setup.py can be clean by comparison.
@@ -11,7 +32,7 @@ import distutils.core
android = "RENPY_ANDROID" in os.environ
# The cython command.
cython_command = os.environ.get("RENPY_CYTHON", None)
cython_command = os.environ.get("RENPY_CYTHON", "cython")
# Note that the android build sets up CFLAGS for us, and ensures
# that necessary libraries are present. So autoconfiguration is
@@ -198,6 +219,8 @@ def cython(name, source=[], libs=[], compile_if=True, define_macros=[]):
dep_fn = os.path.join("..", dep_fn)
elif os.path.exists(os.path.join("include", dep_fn)):
dep_fn = os.path.join("include", dep_fn)
elif os.path.exists(os.path.join("gen", dep_fn)):
dep_fn = os.path.join("gen", dep_fn)
elif os.path.exists(dep_fn):
pass
else:
@@ -220,6 +243,7 @@ def cython(name, source=[], libs=[], compile_if=True, define_macros=[]):
subprocess.check_call([
cython_command,
"-Iinclude",
"-Igen",
"-a",
fn,
"-o",
+2 -2
View File
@@ -3,7 +3,7 @@
#include <stdint.h>
#include <ft2build.h>
#include <freetype/ftotval.h>
#include FT_OPENTYPE_VALIDATE_H
typedef struct
{
@@ -101,7 +101,7 @@ typedef struct
typedef struct
{
int LookupCount;
TLookup *Lookup;
TLookup *Lookup;
} TLookupList;
typedef struct
+1 -1
View File
@@ -4,7 +4,7 @@
# This file is part of Ren'Py. The license below applies to Ren'Py only.
# Games and other projects that use Ren'Py may use a different license.
# Copyright 2004-2012 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2014 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
+33 -21
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2013 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2014 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
@@ -86,9 +86,36 @@ def import_cython():
import renpy.angle.glrtt_fbo #@UnresolvedImport
import renpy.angle.gltexture #@UnresolvedImport
import renpy.styleclass # @UnresolvedImport
def update_path(package):
"""
Update the __path__ of package, to import binary modules from a libexec
directory.
"""
name = package.__name__.split(".")
import _renpy #@UnresolvedImport
libexec = os.path.dirname(_renpy.__file__)
package.__path__.append(os.path.join(libexec, *name))
# Also find encodings, to deal with the way py2exe lays things out.
import encodings
libexec = os.path.dirname(encodings.__path__[0])
package.__path__.append(os.path.join(libexec, *name))
def import_all():
# Note: If we add a new update_path, we have to add an equivalent
# hook in the renpython hooks dir.
import renpy # @UnresolvedImport
update_path(renpy)
import renpy.arguments # @UnresolvedImport
import renpy.log #@UnresolvedImport
import renpy.display #@UnresolvedImport
@@ -118,34 +145,19 @@ def import_all():
import renpy.substitutions #@UnresolvedImport
import renpy.translation #@UnresolvedImport
import renpy.display # @UnresolvedImport @Reimport
update_path(renpy.display)
import renpy.display.presplash #@UnresolvedImport
import renpy.display.pgrender #@UnresolvedImport
import renpy.display.scale #@UnresolvedImport
import renpy.display.module #@UnresolvedImport
def update_path(package):
"""
Update the __path__ of package, to import binary modules from a libexec
directory.
"""
name = package.__name__.split(".")
import _renpy #@UnresolvedImport
libexec = os.path.dirname(_renpy.__file__)
package.__path__.append(os.path.join(libexec, *name))
# Also find encodings, to deal with the way py2exe lays things out.
import encodings
libexec = os.path.dirname(encodings.__path__[0])
package.__path__.append(os.path.join(libexec, *name))
update_path(renpy.display)
import renpy.display.render # Most display stuff depends on this. @UnresolvedImport
import renpy.display.core # object @UnresolvedImport
import renpy.text #@UnresolvedImport
update_path(renpy.text)
import renpy.text.ftfont #@UnresolvedImport

Some files were not shown because too many files have changed in this diff Show More