Compare commits

..

1550 Commits

Author SHA1 Message Date
Tom Rothamel 366a09d708 Changes to get Ren'Py compiling with pygame_sdl2/sdl2. 2014-11-04 21:15:41 -05:00
Tom Rothamel 3fe3df9f23 Link to translation best practices. 2014-10-22 22:46:21 -04:00
Tom Rothamel e942545e39 changelog: Translation updates. 2014-10-21 22:33:09 -04:00
Tom Rothamel 9fe39eb8f3 Update changelog for 6.18.3. 2014-10-21 22:27:52 -04:00
Tom Rothamel b1b17bd9cc Remove translation TODOs. 2014-10-20 21:38:32 -04:00
Tom Rothamel 1b34b59f5e Merge pull request #482 from civalin/i10n/zh_TW
Traditional Chinese translation for launcher updated.
2014-10-20 21:36:25 -04:00
Tom Rothamel 719f06339c Merge pull request #481 from tlm-2501/patch-2
Updated Russian translation for preferences.rpy.
2014-10-20 21:36:07 -04:00
Tom Rothamel 7abba42bca Document showif. 2014-10-20 21:32:44 -04:00
Tom Rothamel c1120fc5b2 transform: Apply time adjustments on _hide, as well as render.
Fixes #484.

See: http://lemmasoft.renai.us/forums/viewtopic.php?p=343556#p343556
2014-10-19 23:07:10 -04:00
Tom Rothamel 7d29b8968a When in self-voicing mode, ignore {w} and {p} text tags.
These (especially the timed variants) tend to disrupt
text-to-speech. It's best to just have them speak in a
single block, whih is closest to the human speech pattern.

Fixes #483.
2014-10-19 11:40:46 -04:00
Tom Rothamel 994adf2ca5 Add the renpy.invoke_in_thread function. 2014-10-18 15:10:17 -04:00
Tom Rothamel bd55020512 Add updater.UpdateVersion.
This is a function that contacts an update server and determines
if there is an update available. It does this in a background thread,
so as to not make the game unresponsive.
2014-10-18 15:02:45 -04:00
Tom Rothamel b4f7d641b0 showif: Integrate with screen language.
This gives us a showif statement that applies the ShowIf displayable
to its children.
2014-10-17 23:12:13 -04:00
Tom Rothamel 1197cff85b showif: Rewrite showif.
We now simply deliver "appear", "show", and "hide" to the child,
rather than trying to exploit _hide. The advantage of doing it this
way is that we can preserve the hide state going into show, without
having to transfer it between transforms.
2014-10-17 22:15:53 -04:00
Tom Rothamel 5e8fc44fb3 Maintain hide_response and replaced_response over all transform renders.
This lets us simply query a transform to determine if it's blocking
hide/replaced, rather than having to update it in an unusual way.
2014-10-17 22:14:53 -04:00
Tom Rothamel 5df33b0f56 Only force us to stay in hide/replaced if a request happens.
This lets us issue "hide" to a transform by normal means, and override
it later.
2014-10-17 22:13:56 -04:00
Civa Lin fc9e826976 i10n: Traditional Chinese language for launcher updated. 2014-10-18 09:50:36 +08:00
Civa Lin e80d6f95a9 Merge branch 'master' into i10n/zh_TW 2014-10-18 09:47:33 +08:00
tlm-2501 8815e5efb8 Updated Russian translation for preferences.rpy. 2014-10-17 21:31:08 +04:00
Tom Rothamel 9874bc4dc3 WiP of ShowIf. 2014-10-16 22:54:22 -04:00
Tom Rothamel 82b597f62b Fix {Set,Toggle}ScreenVariable.
These functions were marked as pure, but weren't actually pure
functions, since the scope they update can change. This change
has them return objects, which are pure.
2014-10-16 22:41:31 -04:00
Tom Rothamel 4b35493447 The ATL on statement now takes a list of event names.
This will be useful for the upcoming showif displayable, which might
be used with transforms that contain "on start, idle:".
2014-10-15 20:17:28 -04:00
Tom Rothamel 69b203fbaa doc: Add warning about show layer and transform state.
Fixes #479.
2014-10-14 18:05:46 -04:00
Tom Rothamel 875a585e90 sl2: Use a newly-created context when predicting SLIf.
We had incorrectly used the original context, which led to the
contents of the predicted if statement showing up if the
statement was reused:

See: http://lemmasoft.renai.us/forums/viewtopic.php?f=32&t=28793
2014-10-14 17:46:32 -04:00
Tom Rothamel 935d065712 Transfer focus based on displayable replacement.
When a displayable in a screen that has focus/grab is replaced,
we transfer the focus to its replacement. This fixes a problem where
we would transfer grab only, which could lead to a permagrab condition.

Fixes #477.
2014-10-14 00:32:05 -04:00
Tom Rothamel c0c44896a8 Add _composite_parts for composite displayables.
For composite displayables (those with _main) set, this gives a list
of all components, other than the root widget, that make up the
displayable.
2014-10-13 23:55:40 -04:00
Tom Rothamel b7a9266bf3 Update changelog with new prediction stuff. 2014-10-12 13:26:42 -04:00
Tom Rothamel 8bf5f05270 While at the main menu, predict the start label.
This should provide a better experience in the start-new-game case,
which is the first thing a player will see.

Fixes #478.
2014-10-12 12:43:24 -04:00
Tom Rothamel 996d3c2fd6 Improve prediction of call/return.
We now model the return stack as part of the prediction process,
making it possible to perform prediction through a call and return
pair.

Fixes #288.
2014-10-12 01:30:01 -04:00
Tom Rothamel f68a4caec2 Check Side for correct parameters and children.
Fixes #476.
2014-10-11 22:17:44 -04:00
Tom Rothamel f06e5861e7 Bump versio to 6.18.3. 2014-10-11 17:13:07 -04:00
Daniel Luque a93f4f1f76 Merge pull request #475 from LuqueDaniel/update-es
Update es
2014-10-11 15:30:40 +02:00
Daniel Luque 572054c6e1 Update: templates/spanish/game/tl/none/common.rpy 2014-10-11 15:24:15 +02:00
Daniel Luque bc3f659f4b Update: launcher/game/tl/spanish/common.rpy 2014-10-11 15:19:24 +02:00
Tom Rothamel db63d0db4e Update changelog. 2014-10-09 22:28:02 -04:00
Tom Rothamel e7424e1140 Merge pull request #474 from civalin/i10n/zh_TW
Add Traditional Chinese translation.
2014-10-09 17:07:53 -04:00
Tom Rothamel c345b6a84c android: Log call errors to android.txt. 2014-10-08 23:21:02 -04:00
Tom Rothamel 5fd9bbe651 Pop dynamic when a lookup_return fails. 2014-10-08 20:44:01 -04:00
Tom Rothamel d19b49d418 Restore the current screen using try/catch.
This fixes a bug where the current screen could be set at an
inopportune time, causing crashes.

See: https://gist.github.com/vaendryl/97fb82b9cbee8bda0777
2014-10-08 20:17:00 -04:00
Tom Rothamel f5103f4bf9 Update the changelog. 2014-10-07 23:34:02 -04:00
Tom Rothamel dc5357c7f2 Increase the image cache size to 16 screens.
We should be able to afford this, and computers have more RAM than they used to.
2014-10-07 23:26:26 -04:00
Tom Rothamel 61f940a2f2 Config changes:
* Increase the predict lookahead.
* Make RENPY_DEBUG_IMAGE_CACHE set the default value of config.debug_image_cache.
2014-10-07 22:26:37 -04:00
Tom Rothamel b38d0edb2c Better prediction of DynamicDisplayable.
If no predict function exists, the regular DD function is called,
and what it returns is now predicted.
2014-10-07 22:19:40 -04:00
Tom Rothamel 36834b094d Ensure rpyfn is defined when loading .rpyc files. 2014-10-07 20:12:27 -04:00
Civa Lin cefdc342b6 i10n: Traditional Chinese language for template. 2014-10-07 15:54:04 +08:00
Civa Lin 1c409025e1 i10n: Traditional Chinese language for launcher 2014-10-07 15:41:41 +08:00
Tom Rothamel 29cbac1c95 Ensure that yes_thread is always defined in AndroidInterface.
Fixes the immediate problems in #472.
2014-10-06 22:16:12 -04:00
Tom Rothamel 596cc4e6b6 Display an indicator when self-voicing is enabled.
This prevents people from getting stuck in self-voicing, and reporting
it as a bug.

Fixes #471.
2014-10-06 21:46:58 -04:00
Tom Rothamel 19d52e85f1 Update docs/changelog. 2014-10-05 21:33:30 -04:00
Tom Rothamel 75789bb8f2 memory: Add the renpy.profile_rollback() function.
This profiles the amount of memory used by the rollback system.

Fixes #470.
2014-10-05 21:13:55 -04:00
Tom Rothamel 55c00a86aa memory: Ignore the renpy.store module.
It's an alias of the store module, and we want to use the store name
to make it clear what's part of Ren'Py and what's part of the game.
2014-10-05 13:35:32 -04:00
Tom Rothamel 3f4f86f0fd memory: Try to speed up profiling. 2014-10-05 00:34:54 -04:00
Tom Rothamel 81c3e0c28e memory: Use gc.get_referents to walk objects.
This is simpler and more accurage.
2014-10-05 00:12:48 -04:00
Tom Rothamel dc058298f7 memory: Add the renpy.diff_memory() function.
This prints out the difference in memory usage since the last
time it was called.
2014-10-05 00:02:25 -04:00
Tom Rothamel 4609a1139c memory: Add the renpy.profile_memory() function.
This is a function that dumps a profile of memory to memory.txt (and
stdout if it's a tty.)
2014-10-04 23:27:39 -04:00
Tom Rothamel 9b5cb37b74 Rewrite the memory profile.
We now use sys.getsizeof to consider the actual object size,
rather than simply the number of objects that exist.
2014-10-04 22:03:09 -04:00
Tom Rothamel ff0893155d focused -> mouse_focused in swdraw. 2014-10-04 17:59:45 -04:00
Tom Rothamel 127f46c1d9 Remove unnecessary translation TODOs. 2014-10-03 23:09:35 -04:00
Tom Rothamel 2edea5b052 Write script to remove translation TODOs. 2014-10-03 23:09:14 -04:00
Tom Rothamel a256ed1c1e Merge pull request #469 from renoa/patch-7
Update common.rpy
2014-10-03 23:01:01 -04:00
Tom Rothamel 54d8b5733c Merge pull request #468 from renoa/patch-6
Update front_page.rpy
2014-10-03 23:00:51 -04:00
Tom Rothamel d59e6d0d45 Merge pull request #467 from renoa/patch-5
Update preferences.rpy
2014-10-03 23:00:44 -04:00
Tom Rothamel 66d3fbd6b0 Merge pull request #466 from renoa/patch-4
Update project.rpy
2014-10-03 23:00:36 -04:00
Tom Rothamel f83f217385 Merge pull request #459 from tlm-2501/patch-1
Updated translations in front_page.rpy.
2014-10-03 23:00:07 -04:00
Tom Rothamel c0b6d2dd3e Merge pull request #451 from renoa/patch-3
Update editor.rpy
2014-10-03 22:59:56 -04:00
Tom Rothamel 42e6d3f368 sl2: Properly analyze the iteration variable of a for loop.
Since it's defined in the loop, it should be at most a local constant,
not a global constant.
2014-10-02 23:27:36 -04:00
Tom Rothamel 9e3d1db244 Do not cache renders when sizing size_groups. 2014-10-02 21:21:05 -04:00
Tom Rothamel 8f0d132104 Ignore tts errors.
Rather than letting them crash the game.
2014-10-02 20:11:57 -04:00
Tom Rothamel 3813f0dc26 Improve reporting of duplicated labels from renamed .rpycs.
Fixes #452.
2014-10-01 20:56:52 -04:00
Renoa 1cb04cd09f Update common.rpy 2014-10-01 10:34:02 +03:00
Tom Rothamel fa8d11a13c Check return value of l.rest() when an expression/statement is expected.
This prevents problems where we let a None pass into some other
part of the code:

See: <00b201cfdc7e$c7d24530$5776cf90$@gmail.com>
2014-09-30 20:28:49 -04:00
Renoa c9c74ec020 Update common.rpy
translation
2014-09-30 23:13:06 +03:00
Renoa cccd957545 Update front_page.rpy
translation
2014-09-30 23:10:14 +03:00
Renoa 938a6f3fa8 Update preferences.rpy
translation
2014-09-30 23:06:31 +03:00
Renoa ad2763a460 Update project.rpy
translation
2014-09-30 23:04:11 +03:00
Tom Rothamel 779912dd80 Update Play.selected when get_selected() to be recalled.
This fixes a problem where selected would never become correct.
2014-09-29 22:57:46 -04:00
Tom Rothamel f058d56d0f Make Play's participation in get_selected optional.
It doesn't make sense for Play on the sound channel to participate
in get_selected(), since it's very likely the sound will quickly
end.

See: http://lemmasoft.renai.us/forums/ucp.php?i=pm&mode=view&f=0&p=148211
where Play causes Ren'Py to restart the interaction repeatedly.
2014-09-29 22:42:36 -04:00
Tom Rothamel c081ad9f78 Add renpy.music.is_music().
An internal function that returns true if a channel is a music
channel, and false otherwise.
2014-09-29 22:36:25 -04:00
Tom Rothamel bbd505b378 Add a debug style property.
This is meant for Ren'Py developer use. We can look at d.style.debug
to debug a displayable.
2014-09-29 20:11:58 -04:00
Tom Rothamel 1382c299fb Mousearea now respects focus_mask.
This makes it possible to have non-rectangular mouseareas.

Fixes #457.
2014-09-28 20:53:53 -04:00
Tom Rothamel 84429c3826 Convert focus_mask into a displayable in the style system.
This allows for render caching as necessary.
2014-09-28 20:40:47 -04:00
Tom Rothamel 971e33aa97 Remove spurious debug print. 2014-09-27 21:39:02 -04:00
Tom Rothamel 9cf92c7f34 Add keyboard_focus style property.
Setting this property to False hides a button, bar, or hotspot from the
keyboard focus mechanism. This might be useful for games where we
want to hide interface from the user, like hidden object games.
2014-09-27 21:34:36 -04:00
Tom Rothamel 20ca7fb463 Random doc fixes / generated code. 2014-09-26 21:49:15 -04:00
Tom Rothamel 5834069ddf Document the character named store.
Fixes #422.
2014-09-26 21:48:26 -04:00
Tom Rothamel ee2dc4aaea Make the define statement take an optional namespace.
This is intended to let us do:

   define character.e = Character("Eileen")
2014-09-26 21:22:46 -04:00
Tom Rothamel 7057ce19a1 The say statement looks for characters in the character namespace.
This lets us have a character with the same name as an object or
variable.
2014-09-26 20:39:10 -04:00
Tom Rothamel a190738a24 Add functions to get/set the return stack.
Fixes #464.
2014-09-25 23:27:26 -04:00
Tom Rothamel 60a9589a80 Deal with formats SDL_image can't reentrantly load.
It seems like SDL_image has problems reentrantly loading some
formats, certainly GIF and maybe TGA and BMP. So we whitelist
the common formats (png and jpeg), and lock loads of the rest.

Fixes #426.
2014-09-24 21:26:20 -04:00
Tom Rothamel 2ea6291b0d Add the crop_relative transform property.
When true, makes crop relative to the size of the image.
2014-09-24 00:42:36 -04:00
Tom Rothamel 4bd9c96d9c Bump version to 6.18.2. 2014-09-23 19:06:11 -04:00
Tom Rothamel 46c1f8067c Merge pull request #461 from javimat/master
Update Spanish template
2014-09-22 10:02:03 -04:00
javimat 4deae69732 Update screens.rpy
...from the English template. With parameters in screens definitions.
2014-09-22 15:34:02 +02:00
javimat ac09cb8363 Update options.rpy
Delete English explanations (redundant)
2014-09-22 15:32:22 +02:00
Tom Rothamel b397f4b235 Stop using the RENPY_BASE environment variable.
Fixes #460.
2014-09-21 17:37:04 -04:00
Tom Rothamel 389749b221 Use redraw() to handle invalidation.
They're really the same operation, except invalidation can be
run in the middle of a render. So let's check for that, and
use a single codepath.

This fixes a bug where when something was shown twice, the
invalidate could not take.

See: twelvethousand
2014-09-21 15:51:47 -04:00
Tom Rothamel 2da32702fe Revert "Force the animation timebase for ATL in show layer."
It's no longer necessary, now that we're only adjusting
ATL time in screens.

This reverts commit 72027f7f69.
2014-09-21 00:24:29 -04:00
Tom Rothamel f6b2161ac9 Run IAP actions in a new context.
The actions (at least the purchase action) requires us be interacting,
so we can go to sleep and let play services take over to handle the
actual transaction.

This requires us to interact in the middle of a callback, so we do
an invoke_in_new_context to make that possible.
2014-09-21 00:22:50 -04:00
Tom Rothamel 6343c2cd6b Make ATL time adjustments require take_execution_state.
The ATL time adjustments only make sense after take_execution_state.
If we're in a context where take_execution_state is never called,
we don't want to do the time adjustments.

So now, we make it a requirement that take_execution_state be called
before doing time adjustments.
2014-09-20 21:52:51 -04:00
Tom Rothamel 7960b6b7be Use only the index to look up entries in an SLFor's cache.
Using the object id proved to be error prone when new objects were
created during each iteration of the list (something we support).
This also returns the behavior to what it was in 6.17.

See: Seasons of the Wolf.
2014-09-20 19:50:16 -04:00
tlm-2501 f9875d9bad Updated translations in front_page.rpy. 2014-09-21 00:35:44 +04:00
Tom Rothamel 72027f7f69 Force the animation timebase for ATL in show layer.
We really should be propagating the transform state, but there
isn't really a good way to do that at the moment. (It isn't clear
where we'd store the old state.)

This is a reasonable, if ugly, workaround.

See: http://lemmasoft.renai.us/forums/ucp.php?i=pm&mode=view&f=0&p=147158
2014-09-19 23:00:38 -04:00
Tom Rothamel da532392d9 Fix load of .rpycs during .rpy compilation.
This fixes various missing label problems.
2014-09-19 22:21:07 -04:00
Tom Rothamel b1a392e171 Properly check that all parameters have been consumed.
And do it right this time.
2014-09-19 18:47:48 -04:00
Tom Rothamel 252baf8f1e Add renpy.munge()
This is a function that munges a string beginning with __ in the
same manner that Ren'Py munges names when parsing a file.

    jump __test

and:

    jump expression renpy.munge("__test")
2014-09-18 19:53:01 -04:00
Tom Rothamel 75d41125a1 Do not predict the main_menu image.
We don't define one by default, so if the user is debugging
prediction, this will fail.
2014-09-18 19:33:31 -04:00
Tom Rothamel 76c7c2aa86 atl: Global const transforms do not need parameters to be compiled.
This prevents an error we introduced in the last release.
2014-09-18 13:44:32 -04:00
Tom Rothamel 61466cf927 Update docs. 2014-09-18 00:09:40 -04:00
Tom Rothamel 2befad5da1 Fix check of atl parameters before compile. 2014-09-18 00:00:47 -04:00
Tom Rothamel c1c046788b Add an sv character that can be used to self-voice descriptive text. 2014-09-17 23:55:41 -04:00
Tom Rothamel 1af82edd66 sl2: Propagate state into transitions added with add.
This requires a recompile.
2014-09-17 22:12:25 -04:00
Tom Rothamel 6a9835ad43 Bump version and update changelog. 2014-09-16 23:30:03 -04:00
Tom Rothamel 5402d84831 Add german template. 2014-09-16 23:28:24 -04:00
Tom Rothamel b30e7de686 sl2: Update screens that are already showing.
This matches the SL1 behavior.
2014-09-16 22:56:48 -04:00
Tom Rothamel 312d64b361 iap: Unconditionally restore purchases @ start. 2014-09-16 17:07:18 -04:00
Tom Rothamel 8bfb4d9f00 Update the who Text after display_say changes its properties.
This is necessary to make the properties take effect after the layout
has already been built.
2014-09-15 22:49:13 -04:00
Tom Rothamel 7253663eff sl2: Displayables with id can't be constant.
That's because they may be given arguments from outside the screen that
sl2 doesn't know about. Better safe then sorry, especially in a rare
case.
2014-09-15 22:47:37 -04:00
Tom Rothamel df6e8db1f1 Document Placeholder. 2014-09-15 20:20:47 -04:00
Tom Rothamel 7bc51c30db Properly document the third argument to edgescrill.
Fixes #447.
2014-09-15 20:09:47 -04:00
Tom Rothamel d2aa4adfe4 ATL transforms now begin executing when first shown.
Previously, ATL transforms began executing when the screen containing
the ATL transform was first shown, which meant that if the transform
changed over the course of screen display, a portion of the new
transform would be skipped.
2014-09-15 19:54:38 -04:00
Tom Rothamel f29df20878 script: Commit to loading a file when it parses/unpickles.
This prevents an error that was caused by when an exception in
finish_load would cause the .rpy file to load after finish_load
had already started updating data structures.
2014-09-15 00:45:46 -04:00
Tom Rothamel 57e935e1f4 Reorder methods in Script. 2014-09-15 00:12:21 -04:00
Tom Rothamel 88cb519b4d atl: Properly compute const-ness for a function statement.
Fixes #449.
2014-09-14 09:42:52 -04:00
Renoa 4a9becb351 Update editor.rpy
translated some lines
2014-09-14 14:44:24 +03:00
Tom Rothamel 0a4e788349 Use Placeholders for missing images. 2014-09-13 19:02:39 -04:00
Tom Rothamel ed9f598098 placeholder: Add Placeholder displayable.
This displays a placeholder image. The image displayed may be chosen
by the creator, or automatically determined based on the name of the
image being placeheld.
2014-09-13 18:39:30 -04:00
Tom Rothamel 529bb95a43 Ensure hiding is set on legacy ScreenDisplayables. 2014-09-12 21:37:55 -04:00
Tom Rothamel d8a945095e Ensure hiding is always an attribute of screens.
Fixes compatibility with 6.17.

See: Lovely Little Thieves 0.5
2014-09-12 21:05:39 -04:00
Tom Rothamel 77b65c7778 Set all-state Transform properties on initialization.
This lets users of a Transform access its properties before it
has been rendered or updated for the first time.
2014-09-11 09:06:39 -04:00
Tom Rothamel 2ed8af936c Check in profile_screen. 2014-09-10 22:30:35 -04:00
Tom Rothamel 3ecf7cf565 Optionally, automatically build_all on distribute if pyx changed. 2014-09-10 22:25:30 -04:00
Tom Rothamel 0902ccd28b tts: Document what_alt. 2014-09-10 21:20:42 -04:00
Tom Rothamel 2a217bf064 tts: Strip " before passing text to windows.
Windows command line argument parsing strikes again. This seems to
let text pass through in a way that makes it reasonably correct.
2014-09-10 21:10:54 -04:00
Tom Rothamel 3243f4c3ac tts: Allow the alt property of Text to take [text].
This makes it possible to wrap the text with prefixes and suffixes
on a per-Character basis, so as to more accurately convey meaning.
2014-09-10 21:00:27 -04:00
Tom Rothamel 4cf2921310 Share code between the RollForward action and behavior.
This makes the action work properly.

Fixes #436.
2014-09-09 18:20:28 -04:00
Tom Rothamel 53fc982bba Speed up style selection.
We do this by cheating heavily - avoiding re-preparing screens, and
busting the render cache. This wouldn't work for arbitrary code,
but it's good enough for the theme chooser.
2014-09-09 09:21:11 -04:00
Tom Rothamel 8a88c6d6f9 Re-add the use_cache at setstate.
This makes it possible to load a screen that uses use.
2014-09-09 08:46:00 -04:00
Tom Rothamel 136e31ada7 When a used screen takes parameters, persist its scope across interactions.
This makes sense for the new behavior of screens with parameters,
and is useful.

Fixes #194.
2014-09-08 22:59:26 -04:00
Tom Rothamel dfe32a1339 Ignore time spent not scrolling when edge scrolling.
This prevents big jumps from occuring when the mouse leaves one side
of the window, and re-enters on another side of the window.

Fixes #431.
2014-09-08 22:31:28 -04:00
Tom Rothamel bab6f8afc6 Allow a transform to have both a function and arguments.
This fixes a regression of the 6.17 behavior.

See: Jake's battle engine.
2014-09-07 22:51:00 -04:00
Tom Rothamel c0ea8ebcf2 Document use statement changes. 2014-09-07 00:11:33 -04:00
Tom Rothamel 033fcbbeaf sl2: Implement the "use <screen> id <id>" syntax.
Where sl1 used structural equality to transfer state between
screens sharing the same tag, sl2 can't do that. (Doing so would
require maintaining _name, which is expensive.)

Instead, we allow uses of screens to include an id property,
which explcitly specifies equality of used screens.
2014-09-06 23:44:54 -04:00
Tom Rothamel a2398afaf1 Update properties in Transform.default_function.
This preserves non-ATL transform behavior in the face of taking
state and execution state.

Fixes #445.
2014-09-06 20:47:10 -04:00
Tom Rothamel cacef7e71a Fix formatting of "could not find return label". 2014-09-06 20:19:42 -04:00
Tom Rothamel 54f9662bc0 Transpose grids as we render the grid.
Before this patch, we would transpose grids once, which caused a
problem where a reused grid would only be transposed once.

See: https://mail.google.com/mail/u/0/#inbox/1484b917bff1005b (Private)
2014-09-06 16:04:10 -04:00
Tom Rothamel 0fea7ee77c Use RENPY_AUTO_LOAD to override config.auto_load.
This provides an easy way to force a save load for development
purposes.
2014-09-06 14:26:30 -04:00
Tom Rothamel 1c71db539e Test that save directories are writable on Android before using them.
Relevant to #441.
2014-09-05 23:27:56 -04:00
Tom Rothamel e8a0b8413d Do not use the game-local save directory on Android.
Relevant to #441.
2014-09-05 23:18:12 -04:00
Tom Rothamel e192814d02 Error out if the base directory doesn't exist. 2014-09-05 15:21:37 -04:00
Tom Rothamel 066a6a6185 sl2: Do not take state from predicted displayables or transforms.
If the parameters to a displayable or transform change between
when a screen is predicted and when it is shown, it means that
the prediction was incorrect.

We now discard the incorrect prediction state, instead of allowing it
to influence the screen.

See: http://lemmasoft.renai.us/forums/ucp.php?i=pm&mode=view&f=0&p=144880
See: http://lemmasoft.renai.us/forums/viewtopic.php?p=338394#p338394
2014-09-04 23:05:13 -04:00
Tom Rothamel 4034f87f26 Revert take_execution_state to the 6.17 version.
This is intended to fix problems caused by the changes outside of
screens.
2014-09-04 23:05:13 -04:00
Tom Rothamel 3ee319ba9e Merge pull request #443 from LuqueDaniel/update-es
Update spanish translation
2014-09-04 08:31:42 -05:00
Tom Rothamel 4c094852e8 Various doc fixes. 2014-09-03 18:36:44 -04:00
Daniel Luque a4aef8ceb1 Update spanish translation 2014-09-03 13:54:18 +02:00
Tom Rothamel 5794e8b3b7 Fix HideInterface documentation. 2014-09-02 22:59:30 -04:00
Tom Rothamel 3ab4f62cf8 Make renpy.file() work with the with statement. 2014-09-02 21:17:40 -04:00
kyouryuukunn 7f70d22344 Merge pull request #442 from kyouryuukunn/update_japanese_template
update japanese translation
2014-09-02 23:01:13 +09:00
kyouryuukunn 4a7ca192e9 update japanese translation 2014-09-02 22:59:57 +09:00
Tom Rothamel 74fce0049c Add the OnEvent displayable to run actions on events.
By being a displayable, OnEvent is able to invoke actions even when
a screen is not being updated. This is important in the new version
of Ren'Py, which tries to avoid screen updates as much as possible.
2014-09-01 21:27:19 -04:00
Tom Rothamel 22397c225f screen: Propagate hide events to children of the screen. 2014-09-01 21:24:52 -04:00
Tom Rothamel 8f80e828c7 Do not autosave when loading an autosave file.
Doing so will screw us up, because we'll change the autsave slots
right before we load.
2014-09-01 18:20:20 -04:00
Tom Rothamel c901b4c1bd drag: Improved response to changes in position
* More accurately check for changes in position.
* Allow a change in position to override a drag_group position.
2014-09-01 15:05:40 -04:00
Tom Rothamel 2f1455351d Update doc generation to use the new location of pyanalysis. 2014-09-01 09:43:08 -04:00
Tom Rothamel 83c7eef6c8 drag: Correctly detect placement changes.
When detecting placement changes, we want to use xpos/ypos, not
self.x/self.y.
2014-08-31 23:15:17 -04:00
Tom Rothamel f29ab675ec Call run_unhovered when a drag is unhovered. 2014-08-31 22:41:43 -04:00
Tom Rothamel d4e1a1d1f3 If the placement of a drag changes, move it to the new position.
This is probably the least bad thing we can do with a drag that
has changed its placement.
2014-08-31 22:09:06 -04:00
Tom Rothamel cede3f651d Fix call to super().__init__ in Drag constructor. 2014-08-31 19:34:19 -04:00
Tom Rothamel 4ed0c8e313 atl: Try to avoid recompiling constant ATL.
This should speed things up a little by avoiding the expensive
recompile step where possible.
2014-08-31 01:42:31 -04:00
Tom Rothamel ba4c6d8b10 Add a script analysis phase.
For now, all we do in this phase it analyze ATL for const-ness.
2014-08-31 00:05:29 -04:00
Tom Rothamel 87f2975dd0 Add the ability to analyze ATL for const-ness. 2014-08-31 00:04:12 -04:00
Tom Rothamel 15717d87af transform: default_xpos -> inherited_xpos, etc.
This is a field rename to better reflect what we use the fields for,
in the hope of making code slightly more reasonable.
2014-08-30 16:04:14 -04:00
Tom Rothamel 59174e44fb Rename renpy.sl2.pyutil to renpy.pyanalysis.
It more accurately reflects what the module does, and it may be useful
outside of sl2.
2014-08-30 15:57:01 -04:00
Tom Rothamel b6778f1a9e transform: Take state in the take_state method.
Previously, we had be transferring the position state in the
take_execution_state method.
2014-08-30 14:28:54 -04:00
Tom Rothamel e693038479 take_execution_state should properly inherit xpos. 2014-08-30 14:16:43 -04:00
Tom Rothamel f1cae21fdb sl2: Force a screen update on hide.
The multiple-update-prevention was stopping us from updating the
screen on hide like we want to.
2014-08-30 12:17:30 -04:00
Tom Rothamel 33e557c04f Check that the what argument to Character.__call__ is a string. 2014-08-29 21:50:26 -04:00
Tom Rothamel 32773f3832 Ensure coordinates of drags remain integers. 2014-08-28 22:07:06 -04:00
Tom Rothamel 32a6de49c9 Allow drags to exist outside a drag_group without a drag_name. 2014-08-28 22:01:49 -04:00
Tom Rothamel 64f6038b52 sl2: Do not always treat config and style as constants.
We have a case in the wild where someone used "style" as an argument
to a screen.
2014-08-28 17:50:53 -04:00
Tom Rothamel 813ef90eb2 Remove uses of type() in store.
While a reserved word, it's the sort of thing we didn't use much,
and that might be used a lot by end users. So we'll try to avoid
adding uses of type, prefering _type instead.
2014-08-28 17:08:21 -04:00
Tom Rothamel 3ef409b4f2 Suspend self-voicing when playing voice. 2014-08-27 23:24:09 -04:00
Tom Rothamel 34ad1df5b2 Properly compare ATL contexts. 2014-08-27 22:44:32 -04:00
Tom Rothamel 41afb8e5b2 Load .rpy if .rpyc fails with an exception.
If both files exist, we prefer to load the .rpy rather than a
corrupt or obsolete rpyc.

Fixes #437.
2014-08-27 21:37:23 -04:00
kyouryuukunn 15e0d57277 Merge pull request #439 from kyouryuukunn/update_japanese_template
fix japanese template
2014-08-27 18:01:26 +09:00
kyouryuukunn 04ce5eaf09 fix japanese template 2014-08-27 18:00:42 +09:00
kyouryuukunn 130d92c5a2 Merge pull request #438 from kyouryuukunn/update_japanese_template
update japanese template
2014-08-27 16:56:56 +09:00
kyouryuukunn 504f2ff708 update japanese template 2014-08-27 16:54:22 +09:00
Tom Rothamel 99f44f7eff Add the ability to parse a screen as sl1.
This is purely to make it possible to port sl1 games up to newer
Ren'Py, without rewriting them. This shouldn't be used in new games,
and may go away at some point.
2014-08-26 21:27:57 -04:00
Tom Rothamel 0a95f50724 Update a screen on hide before copying it.
When we copy a screen, we lose the cache - but we need the cache
to propagate the state of transforms (etc) to the children of the
screen.
2014-08-26 20:11:53 -04:00
Tom Rothamel 4da7ac8af7 Preserve nearest over subsurface operation. 2014-08-25 08:05:19 -04:00
Tom Rothamel b8c6a62c8f doc: Various minor improvements. 2014-08-24 17:51:37 -04:00
Tom Rothamel 8ecc3a200f doc: IAP. 2014-08-24 17:51:26 -04:00
Tom Rothamel c8d45d3715 iap: Add Purchase and Restore actions, get_store_name function. 2014-08-24 17:19:30 -04:00
Tom Rothamel 328e389f19 Compat old screen language location. 2014-08-24 16:33:40 -04:00
Tom Rothamel 53d9a60544 Update screens once before we lock them down for a hide.
This matches 6.17 behavior, and it makes sense that a hiding screen
should show the data as of the time it was hidden.
2014-08-23 22:33:24 -04:00
Tom Rothamel 7985a39a00 Do not take transition state when a parameter changes.
When a parameter to a transition changes, we have a different
transition, so taking the state doesn't work - it means we will
be representing the state of a different transition.
2014-08-23 22:28:07 -04:00
Tom Rothamel 60ce7ca8c9 Update musicroom Play selection status.
This makes the musicroom Play action compatible with sl2's reuse
of displayables.
2014-08-22 22:34:09 -04:00
Tom Rothamel e3ee421221 Introduce renpy.substitute.
This is a new public API corresponding to renpy.substitutions.substitute.
2014-08-21 21:36:42 -04:00
Tom Rothamel d373cf93e6 Add config.transition_screens for compatibility.
Setting this to False restores compatibility with old versions of
Ren'Py, where screens would always be updated, even on the old side
of a transition.
2014-08-20 19:02:02 -04:00
Tom Rothamel 2e3f6991a2 Add self-voicing to help.html.
Fixes #424.
2014-08-19 10:17:29 -05:00
Tom Rothamel e8d78b9deb doc: Add screen optimization to the index page. 2014-08-19 00:05:09 -05:00
Tom Rothamel ca4eb8857d doc: renpy.profile_screen. 2014-08-18 23:57:03 -05:00
Tom Rothamel 91cc4aa85a doc: Include const and pure vars, add link anchors. 2014-08-18 23:36:35 -05:00
Tom Rothamel 53328bf2a8 doc: Screen prediction. 2014-08-17 23:02:39 -05:00
Tom Rothamel 6d6cc7e6c0 Merge pull request #434 from ZeikJT/master
Fixing mistakes on the Language Basics doc page
2014-08-17 12:29:04 -05:00
kyouryuukunn 411028297e Merge pull request #435 from kyouryuukunn/update_japanese_template
update japanese template
2014-08-17 15:56:03 +09:00
kyouryuukunn 7186ccc22e update japanese template 2014-08-17 15:55:02 +09:00
Tom Rothamel 4b3b9dd3f1 doc: How const optimizes screen language, const text. 2014-08-16 10:18:29 -05:00
Tom Rothamel c619ee7ef2 Add the _developer_default style.
This is needed to enter the developer menu.
2014-08-15 23:23:20 -05:00
Matias Giachino 49df5bed9c Tuple - one-item tuple text incorrect
Says they must specify a parenthesis must follow one-item special cases. The truth is a comma must follow special cases
2014-08-15 19:18:31 -07:00
Matias Giachino b3e2801f38 True, False, None section - remove trailing text 2014-08-15 19:17:08 -07:00
Tom Rothamel fa2292a811 doc: Define const and pure. 2014-08-15 11:11:54 -05:00
Tom Rothamel 3da77b1ce7 doc: Start screen optimization. 2014-08-15 09:34:02 -05:00
Tom Rothamel b89e630e77 Store the location when defining screens.
This lets us link to the screen from the inspector.
2014-08-14 23:13:51 -05:00
Tom Rothamel 03701d8c39 inspector: Clicking on a location opens it in the editor. 2014-08-14 22:56:36 -05:00
Tom Rothamel c4d41109a6 Show displayable lines numbers in the style inspector.
For sl2 only.
2014-08-14 07:25:28 -04:00
Tom Rothamel 7ef976d637 sl2: child_or_fixed should consider actual children.
It was considering the number of available children, which was
improperly considering children in if statements and so on.
2014-08-13 22:01:27 -04:00
Tom Rothamel bdc7cf062e Merge pull request #433 from LuqueDaniel/update-es
Update es
2014-08-13 07:40:45 -04:00
Daniel Luque d562fdba93 To uppercase 2014-08-13 12:36:34 +02:00
Daniel Luque 66acf402ec Updated: spanish/front_page.rpy 2014-08-13 12:30:35 +02:00
Tom Rothamel b053705869 sl2: Use implicit_add to add displayables.
This prevents us from copying transforms that already have had
take_execution_state called. This fixes a regression that caused
copied transforms to reset, and hence the show event to be fired
multiple times.
2014-08-12 19:16:15 -04:00
Tom Rothamel 8c6060b2ba sl2: Ensure screen.widgets is updated on reuse. 2014-08-11 23:28:31 -04:00
Tom Rothamel 06f5ddffbf Make XScrollValue and YScrollValue use the current screen.
This lets them deal with cases where they are reused on a copied
or hiding screen.
2014-08-11 23:21:10 -04:00
Tom Rothamel 6b259960a1 Make _current_screen valid during per_interact() and render().
This let's us defer decisions about the current screen until
closer to render time.
2014-08-11 23:18:50 -04:00
Tom Rothamel 4555020fee When putting a screen into the old state, make a copy. 2014-08-11 23:03:08 -04:00
Tom Rothamel 87d3b65f4b Fix more PyDev 3.6.0 warnings. 2014-08-11 21:14:42 -04:00
Tom Rothamel 479eac2ebb Fix PyDev 3.6.0 errors. 2014-08-11 21:03:03 -04:00
Tom Rothamel 5f80db6880 Add a script that can compare zip sizes.
This lets us attribute changes in size to particular files.
2014-08-10 19:59:39 -04:00
Tom Rothamel d66a9f0bd7 Update docs. 2014-08-10 18:23:02 -04:00
Tom Rothamel be42df7e09 Add alt text to imagemap hotspots. 2014-08-10 09:55:35 -04:00
Tom Rothamel 05b1d38e8f Try harder to find a place to return to.
When the return site exists, we simply return to it. If the return
site disappears, we look up the call site, and return to the next
node, if one exists.

If we're in developer mode, we report an error at this
point. Otherwise, we pop the stack, and try again.
2014-08-09 10:43:23 -04:00
Tom Rothamel 6f377d8253 Fix some issues with edgescroll.
* It could start on timerevent, rather than a mouse event.
* It could get the wrong edge_last_st, leading to large jumps.
2014-08-08 23:11:36 -04:00
Tom Rothamel dd02654228 distribute-made copy of screens.rpy. 2014-08-08 21:07:39 -04:00
Tom Rothamel acc82e3030 tts: Only speak text after {fast}.
This deals with extend properly.
2014-08-08 19:37:04 -04:00
Tom Rothamel 84871c65c1 Call the dynamicdisplayable function iff it has no child.
Transform may need to get the placemet, which requires a
child exist.
2014-08-07 21:34:36 -04:00
Tom Rothamel a704363c54 Make emphasize audio into a preference. 2014-08-06 23:23:23 -04:00
Tom Rothamel 86609614b8 Update name. 2014-08-06 21:47:55 -04:00
Tom Rothamel ace45f4ef0 Apply style group to detached widgets.
This seems to make sense, and fixes the sl2viewport function.
2014-08-06 21:28:44 -04:00
Tom Rothamel 2f114e59df Revert tutorial. 2014-08-05 23:35:30 -04:00
Tom Rothamel 43bed3a92b Revert options.rpy in testcases. 2014-08-05 23:26:28 -04:00
Tom Rothamel 4b3c5ecbbc sl2: Document changes. 2014-08-05 23:20:44 -04:00
Tom Rothamel d34ec5d0fd Include glib-2.0 for versions of fribidi that need it.
Fixes #303.
2014-08-04 21:20:02 -04:00
Tom Rothamel b45d9f957b Update changelog. 2014-08-04 01:01:31 -04:00
Tom Rothamel 001a5f747c voice: Deal more sensibly with the character volume being 0.
We now treat this as a mute, and do not play the voice file. This
prevents us from emphasizing voice when the user has disabled the
voice of a particular character.
2014-08-04 00:56:38 -04:00
Tom Rothamel 1d3e8e1ad7 Add the ability to emphasize certain audio channels.
When an emphasized channel is playing, all non-emphasized channels
have their volume lowered. When emphasis ends, the non-emphasized
channels resume their normal volume.

This is a generalization of (and replacement for) #360.
2014-08-04 00:40:27 -04:00
Tom Rothamel 2453eb2cbe Make reduce_volume_in_voice opt-in by creators.
This will break existing games, by changing the volumes in a way
creators will not expect. Let's make this opt in across the board.

Removed it from the various templates since voice stuff is pretty
rarely used, and shouldn't required attention from a new user.
2014-08-03 23:28:38 -04:00
Tom Rothamel 4024f4f6bd Revert "Move voice config to 00voice.rpy."
This reverts commit e612e2a168822e1e0804b825953808fefb83df7d.
2014-08-03 23:28:38 -04:00
Tom Rothamel dbefae5855 Initial run at updating the changelog. 2014-08-03 23:28:38 -04:00
Tom Rothamel a147e41609 Move voice config to 00voice.rpy.
In general, config variables that only touch common/ should only
exist in common/.
2014-08-03 23:28:38 -04:00
Tom Rothamel 724f9d91aa sl2: Fix regression reusing displayables. 2014-08-02 14:35:31 -04:00
Tom Rothamel 8f9f42352b Allow the launcher to scan/launch mac app packages.
This makes it possible to run an older mac app package with a newer
Ren'Py - to get self-voicing, for example.
2014-08-02 00:06:27 -04:00
Tom Rothamel 463d9cde79 sl2: Only reuse non-None displayables. 2014-08-01 23:53:31 -04:00
Tom Rothamel 92cae431f2 Add "Force Recompile" to the launcher.
This will be useful for people upgrading from pre-sl2 to sl2 versions
of Ren'Py, as it makes it possible to be sure all screens are using
sl2.
2014-08-01 15:47:11 -04:00
Tom Rothamel 1f93fbfd0b Use the focus system to retain grab between interactions.
With the new screen system, it's now possible to reuse the same
displayable between two interactions. Such displayables need to
retain grab until they go away, or grab is explicitly released.

This fixes a problem where a constant bar would lose focus after being
adjusted in a way that restarts the interaction, as volume sliders do.
2014-07-31 23:05:39 -04:00
Tom Rothamel f8094c21b1 Invalidate drags on child change. 2014-07-30 23:18:58 -04:00
Tom Rothamel 833cf20f56 Mark drags as focusable. 2014-07-30 23:18:43 -04:00
Tom Rothamel 581d30debb sl2: Properly get old_main. 2014-07-30 23:18:15 -04:00
Tom Rothamel 71d771d172 Store the new position in the drag_group on drag snap.
Fixes the first part of #396.
2014-07-30 22:42:37 -04:00
Tom Rothamel d6745e7492 Remove syntax error. 2014-07-30 11:08:24 -04:00
Tom Rothamel 8a66bab786 Handle android mouse release move in Ren'Py.
Previously, we were handling this in SDL. However, this conflicted
with the MOUSEMOTION merging - the other event could be moved before
the mouse release, leading to unsightly jumps, and (perhaps) the
viewport being in the wrong place.

We now synthesize the mouse release move in Ren'Py, which lets us
control the order in which it occurs.

Fixes #391.
2014-07-29 23:28:46 -04:00
Tom Rothamel 20be450e1a Mouse focus only on mouse events.
We had been using the mouse to determine focus at the start of
each interaction. We now only use the mouse to determine focus
if the last event - the event that ended the interaction - was
a mouse event.

Fixes #299.
2014-07-28 23:53:12 -04:00
Tom Rothamel 4277d2b049 Merge pull request #324 from duanemoody/master
Add application category for OS X
2014-07-28 23:26:46 -04:00
Tom Rothamel 8ddf658543 Use an adv-mode narrator for adv-mode _default_empty_window.
Fixes #330, using kyouryuukunn's second approach.
2014-07-28 23:23:34 -04:00
Tom Rothamel 3d3f437f57 Add config.autosave_on_choice.
This variable determines if Ren'Py autosaves at menus.
2014-07-28 23:04:29 -04:00
Tom Rothamel 99330bb1eb Do not save ScreenDisplayable.children.
This is recreated on load, and saving it just leads to slower save and
load times.
2014-07-28 22:57:09 -04:00
Tom Rothamel eff11fec79 sl2: Properly finish and imagemaps.
Previously, we were failing to finish the imagemaps we created, which
both leaked the md5 object and generally hurt performance.
2014-07-28 22:55:56 -04:00
Tom Rothamel af0784af3b Perform save dumps before we pickle things.
This makes config.save_dump a powerful tool for debugging pickle
problems, where previously it was only useful for finding out the size
of save files.
2014-07-28 22:54:24 -04:00
Tom Rothamel 4607b2db38 sl2: Improve prediction of screens.
This includes:

* When predicting, we do not stop on the first exception. Instead, we
  keep going, trying to predict what we can.

* This includes screen parameters and arguments as well.

* If we can't evaluate the list part of a for loop, we use [ 0 ] - in
  conjunction with the error handling, this should get us
  something. In many cases, it gets us everything important.

* Once per if statement, we predict all branches.
2014-07-27 22:53:32 -04:00
Tom Rothamel acbaa4c9ba _hide hides the hiding screen, not the not-hiding screen.
This fixes a regression that caused screens without hide transforms to
immediately become empty, even when they should have been used in an
old transition.
2014-07-27 15:00:15 -04:00
Tom Rothamel b9d4a6f6f5 If a Fixed with a layer_name does not have a scene list, do not copy it. 2014-07-26 22:34:17 -04:00
Tom Rothamel d82ff5c7d6 sl2: Track which SLNodes can have keywords.
There are certain nodes that can't have keywords, like if nodes that
occur after a python statement that defines a variable used by the if
statement.

This change ensures that we only execute the keywords() method if:

* Some keywords are present.
* Nothing precludes the keywords method from running.
2014-07-26 22:17:56 -04:00
Tom Rothamel 569f6c0f95 Add portuguese translation by mrstalker. 2014-07-26 11:15:56 -04:00
Tom Rothamel 1a5f693ccd sl2: Pop the open viewport from the ui stack. 2014-07-25 23:02:09 -04:00
Tom Rothamel 92ed019e6c sl2: Fix sl2viewport.
We now properly get the outer and inner elements for all sl2viewports.
2014-07-24 23:08:21 -04:00
Tom Rothamel ebbca682f7 Make autosave_on_quit apply to autosave on load. 2014-07-24 10:39:07 -04:00
Tom Rothamel 33f2c0670d Merge pull request #338 from kyouryuukunn/autosave_before_load
autosave before load
2014-07-23 23:02:58 -04:00
Tom Rothamel 7f85657c0a Add config.autosave_on_quit.
This variable lets us control if Ren'Py autosaves when entering the
quit or main menu prompts.
2014-07-23 21:01:35 -04:00
Tom Rothamel c24b99a0a6 Do not convert the screenshot to the screen's format.
The screen's format may not be the for RGBA format we expect surfaces
to be in when we load them into textures. This would cause
FileCurrentScreenshot to break.

Fixes #314.
2014-07-21 23:27:23 -04:00
Tom Rothamel c2a2572aec Reduce over-passing of show arguments to nvl screen.
We would pass say_vbox_properties, which is only used in pre-screens
code. When iterating through a say_list containing multiple
lines of text, we could use say_args from a previous line.
2014-07-20 23:16:31 -04:00
kyouryuukunn dd5796a59d Merge pull request #419 from kyouryuukunn/update_japanese_template
update japanese template
2014-07-21 11:57:49 +09:00
kyouryuukunn 280ef1c396 update japanese template 2014-07-21 11:56:58 +09:00
Tom Rothamel a2a48e4603 Merge pull request #358 from kyouryuukunn/pass_show_args
NVLCharacter now passes show_ arguments to the nvl screen.
2014-07-20 21:49:07 -04:00
Tom Rothamel 52413479a6 Merge pull request #354 from kyouryuukunn/character_volume
Make voice volume adjustable on a per-character basis.
2014-07-20 21:38:57 -04:00
Tom Rothamel 919bbbca87 Merge pull request #388 from renoa/patch-2
Update Arabic template translation.
2014-07-20 21:36:27 -04:00
Tom Rothamel 9c8a4e17f3 Track mouse and keyboard focuse separately. Make joy depend on key.
This more accurately models how one would expect the joystick to work
on Linux.

Fixes #402.
2014-07-20 21:34:27 -04:00
Tom Rothamel cb359e8a45 When a default_focus appears, if nothing is focused, focus it.
This fixes #417, an issue that was causing problems when the default
focuse only appeared at the end of a transition.
2014-07-20 19:23:30 -04:00
Tom Rothamel 20bfd1298f Update android packaging doc to represent the latest approach. 2014-07-19 21:28:05 -04:00
Tom Rothamel 108ca1f981 Launcher language selection improvements.
* Sort alphabetically.
* Turn "_" into " ".
* Add scrollbar.
2014-07-19 21:03:30 -04:00
Tom Rothamel 8573bb76f9 Merge pull request #404 from LuqueDaniel/update-es
Update es
2014-07-19 20:30:19 -04:00
Tom Rothamel 1176d159af Use name_only when extending a string-named character.
Fixes #408.
2014-07-19 20:25:16 -04:00
Tom Rothamel f554e19a1a Move the code for accessing a character into its own function.
This will make it easier to change in the future.
2014-07-19 20:24:55 -04:00
Tom Rothamel be17f9cc6b Nearest neighbor filtering.
This takes the form of the "nearest" transform property. When the
transform property is true, blits use nearest-neighbor filtering.
2014-07-19 00:05:56 -04:00
Tom Rothamel bdf788b5eb Add config.adjust_view_size.
This is optionally a function that returns the size of the OpenGL
viewport in which Ren'Py draws the game. Having this a callback makes
it possible to constrain the sizes of the game window.

For example, this makes it possible to limit the viewport to integer
multiples of the starting window size, as requested in #406.
2014-07-18 23:25:33 -04:00
Tom Rothamel 27cd90d6db Merge pull request #409 from kyouryuukunn/fix_doc
fix doc
2014-07-18 21:24:03 -04:00
Tom Rothamel 60b8ee46a1 Add renpy.count_{,seen_}_dialogue_blocks().
These are functions to count the number of dialogue blocks and the
number of seen dialogue blocks in the game. This makes it possible
to give an indication of how much of the game text the player has
seen.
2014-07-18 00:07:08 -04:00
Tom Rothamel 7e533fbb8f Fix regression in the handling of insensitive buttons.
The focusable field was not being set correctly, which made the button
participate in the focus mechanism and get the idle background when
it should have been insensitive.
2014-07-17 22:57:51 -04:00
Tom Rothamel 329ff9fc5c Clean up last merge a bit. 2014-07-16 22:02:44 -04:00
Tom Rothamel 980104b35e Merge pull request #377 from HikkeKun/master
Small fix for newline_indent behavior.
2014-07-16 21:48:50 -04:00
Tom Rothamel e51000c947 Fix name conflict in android code. 2014-07-16 21:46:06 -04:00
Tom Rothamel ef69a69a3f Limit when we supply the image parameter to the say screen.
It's normally only used for compatability with older games, and
isn't documented, nor is is present in the say screen.
2014-07-16 21:17:32 -04:00
Tom Rothamel c4880e33f3 Add parameter lists to screens in documentation and screens.rpy.
This is to make everything conform to the new best practices.
2014-07-16 21:09:55 -04:00
Tom Rothamel 00d3da2040 Fix two bugs in lint.
Fixes #415, in which show would check all attributes, when partial
would do.

Fixes #416, in which lint would check disabled old_substitutions.
2014-07-15 23:34:16 -04:00
Tom Rothamel 895350ed4d Limit scope of used screens with parameters.
Used screens that take parameters now run isolated from their parent
context. This lets us treat global const variables as constant,
without having to worry about the parent scope redefining them.
2014-07-15 22:53:25 -04:00
Tom Rothamel f97b59c414 sl2: Take args and kwargs into account when finding a screen to reuse. 2014-07-14 23:36:28 -04:00
Tom Rothamel 62e85b728c sl2: Do not treat screen parameters as constant.
Our definition of constant includes field access, indexing, etc. Since
a screens parameter might be mutable (a list, for example), we can't
treat it as const in the general case.
2014-07-14 23:34:08 -04:00
Tom Rothamel ead4e44d80 sl2: Give constants to parameterized screens.
We can analyze parameterized screens more thoroughly than
non-parameterized screens, since the parameters limit what can
be overridden in the screens' scope.
2014-07-13 19:56:14 -04:00
Tom Rothamel 0b5a54f0f8 Deal with problems that occur when we have no glyphs in a line. 2014-07-13 17:03:50 -04:00
Tom Rothamel 626981c349 Do not call the DynamicDisplayable function on per_interact.
It's not necessary, and can cause problems since st and at are not
correct.
2014-07-13 16:13:31 -04:00
Tom Rothamel bed9699983 sl2: Only treat a function as pure if it's also const.
This lets us redefine a const function and get away with it.
2014-07-13 01:10:01 -04:00
Tom Rothamel dc97bdb194 sl2: Extend local/global const analysis to slast.
This brings us to the point where we can run the launcher using
the local/global const analysis.
2014-07-13 00:17:15 -04:00
Tom Rothamel f6df843499 sl2: More work to distingush local const from global const. 2014-07-12 21:07:48 -04:00
Tom Rothamel 46ba33dde1 iap: Add missing import. 2014-07-11 23:59:35 -04:00
Tom Rothamel 1a969be8fd iap: Separate product names and identifiers.
Each product has a name, used to identify it. This name may be
different from the names used in the various app stores, which can be
specified independently.
2014-07-11 23:42:22 -04:00
Tom Rothamel c8de62c682 iap: Bugfixes. 2014-07-11 23:29:55 -04:00
Tom Rothamel 4197f10d18 Fix link to keytool. 2014-07-11 08:54:35 -04:00
Tom Rothamel c403d13119 iap: Start work on high-level IAP framework.
This code runs, but hasn't been tested yet.
2014-07-10 23:50:37 -04:00
Tom Rothamel 9b4ec3206c Merge pull request #413 from kyouryuukunn/gallery_nav
enable customizing the look of gallery navigation
2014-07-09 20:35:54 -04:00
kyouryuukunn 61da5d93ec rename gallery_nav to gallery_gavigation 2014-07-10 08:17:20 +09:00
kyouryuukunn 1486932b49 enable customizing the look of gallery navigation 2014-07-10 08:08:53 +09:00
Tom Rothamel 4e5199b6a1 Add gallery testcase. 2014-07-08 18:18:38 -04:00
Tom Rothamel 2e8494a2c8 Re-prepare screens when rebuilding styles. 2014-07-08 18:18:12 -04:00
Tom Rothamel f753db5862 sl2: Introduce three levels of const-ness.
This lets us distinguish compile-time constants from expressions
that are const within a single screen.
2014-07-08 18:11:37 -04:00
kyouryuukunn 18d4039aa1 Merge pull request #411 from kyouryuukunn/update_japanese
update japanese
2014-07-08 19:32:12 +09:00
kyouryuukunn 1125cc4b32 update japanese 2014-07-08 19:29:39 +09:00
Tom Rothamel 137e71c461 Fix comparison of gallery actions. 2014-07-07 23:10:29 -04:00
Tom Rothamel 027099daad Deal with the first image in gallery button being locked.
Fixes #410, and adds a test case for the gallery.
2014-07-07 23:08:50 -04:00
Tom Rothamel c6472da521 Update changelog.
Conflicts:
	sphinx/source/changelog.rst
2014-07-06 18:01:42 -04:00
Tom Rothamel aedd0273a4 Ignore .rpyc files that cannot be loaded.
This makes it possible to version down if the .rpy file exists and
do not use any newer features.
2014-07-06 17:56:29 -04:00
Tom Rothamel 6872f3db62 Revert parameterization of launcher screens.
We want to be able to pass in arbitrary arguments, so we can sub
them into text.
2014-07-06 00:24:27 -04:00
kyouryuukunn 8311fafeb4 fix doc 2014-07-06 12:25:12 +09:00
Tom Rothamel 7cba90c0d0 Add the selected parameter to the common screen. 2014-07-05 21:31:36 -04:00
Tom Rothamel 36c9df4353 Distribute the project given to android_build.
This fixes a bug where we would distribute the current project
instead of the one supplied on the command line, causing things
not to work.
2014-07-05 20:26:07 -04:00
Tom Rothamel 4705aa2b6f sl2: Fix fixed.
The SL fixed statement was calling renpy.display.layout.Fixed with
the layout parameter. Since Fixed also supplied a layout parameter
we'd get a crash.
2014-07-05 10:19:06 -04:00
Tom Rothamel 5ae2ae3075 Remove constant offsets from video timestamps.
We had previously been assuming the audio started at 0, while
respecting the video PTS. If the PTS of the first video frame was
non-zero, this would lead to the video being delayed behind the audio
and never catching up.

Fixes #386.
2014-07-04 21:16:01 -04:00
Tom Rothamel b45998fdec sl2: Fix FieldValue equality. 2014-07-03 19:15:36 -04:00
Tom Rothamel 4c273f6a3b sl2: Fix analysis of Python if statements. 2014-07-03 19:15:19 -04:00
Tom Rothamel 0098a41633 sl2: Version the screen language cache.
This ensures that when we prepare screens - such as after a language
change - the cache is dropped. If we don't do this, sl2 can use old
values for displayable arguments and const displayables.
2014-07-02 22:03:20 -04:00
Daniel Luque 20b80bb706 project to lowercase 2014-07-02 12:08:28 +02:00
Daniel Luque 3327378d4f Updated spanish/preferences.rpy 2014-07-02 12:03:19 +02:00
Daniel Luque 7cc4820e96 Updated spanish/front_page.rpy 2014-07-02 11:59:40 +02:00
Tom Rothamel 725ba33062 Merge pull request #403 from kyouryuukunn/fix_MusicRoom
Fix selected status in musicroom.
2014-07-01 23:31:31 -04:00
Tom Rothamel f85b13642b Merge pull request #325 from kyouryuukunn/list_of_action
If a list of Actions contains SensitiveIf or SelectedIf, those take precedence over other actions.

This also introduces the new SensitiveIf action.
2014-07-01 22:44:07 -04:00
Tom Rothamel 95dd481b3a Rename Chinese_Simplified -> simplified_chinese.
This makes the naming similar to the other languages we support.
2014-07-01 22:36:52 -04:00
Tom Rothamel 479a13f5fc Remove text from Chinese translation, per:
https://github.com/renpy/renpy/pull/365#issuecomment-44358481
2014-07-01 22:33:01 -04:00
Tom Rothamel 1fb9fe7bb8 Remove TODOs from simpified chinese translation. 2014-07-01 22:32:29 -04:00
kyouryuukunn 3daae9b0f0 add SetCharacterVolume 2014-07-02 11:28:41 +09:00
Tom Rothamel 4fa044fbc0 Remove +x bit from Chinese translation. 2014-07-01 22:22:05 -04:00
Tom Rothamel 2c676c2fc2 Fix license on DroidSansFallback.ttf.
According to

    https://github.com/android/platform_frameworks_base/tree/master/data/fonts ,

the Droid fonts are under the Apache license.
2014-07-01 22:21:07 -04:00
Tom Rothamel d0ad2d924f Merge pull request #365 from huanxuantian/system-translations-chinese
Chinese (Simplified) translation of launcher.
2014-07-01 22:17:57 -04:00
Tom Rothamel 02a1447837 The voice system should ignore interactions caused by window
show/hide/auto.

Based on a pull request by kyouryuukunn.
2014-07-01 22:03:45 -04:00
Tom Rothamel 2422e2c477 Merge pull request #360 from kyouryuukunn/reduce_volume_in_voice
reduce bgm volume during voice playing
2014-07-01 21:49:35 -04:00
Tom Rothamel 2ae0592486 Merge pull request #397 from renpy/template-replace-symlink
Copy target files of symbolic links
2014-07-01 21:47:26 -04:00
Tom Rothamel 56fc7f8603 Report autoreload as part of the window title. 2014-07-01 21:32:59 -04:00
Tom Rothamel dbe1ccc29e Merge pull request #383 from kyouryuukunn/fix_doc
fix doc
2014-06-30 22:30:15 -04:00
Tom Rothamel 02e2916a82 Merge pull request #401 from renpy/my-tts
config.tts_function to support user defined TTS processor
2014-06-30 22:25:09 -04:00
Tom Rothamel 2e6a836e2d Mark less names as const.
Do not mark transforms that aren't intended for use in screens - but
may have names that would be common for screen parameters - as const.

This should improve compatibility with older screens.
2014-06-30 22:22:41 -04:00
Tom Rothamel 5f671d9990 Ignore profile_screen.txt when distributing. 2014-06-30 21:50:58 -04:00
Tom Rothamel 4286cdca0e Make the parameters to the default screens.rpy to be explicit. 2014-06-30 21:49:22 -04:00
Tom Rothamel 6793a176e0 Launcher screens take an explicit parameter list.
This fixes a problem where sl2 was considering the "default"
parameter const.
2014-06-30 21:47:07 -04:00
Tom Rothamel 4f790bdc11 Properly mark parameters as non-const. 2014-06-30 21:46:45 -04:00
Koichi Akabe cc841c5f52 Move the process managiment into default_tts_function 2014-07-01 02:06:08 +09:00
Koichi Akabe 53d3039ee8 Add tts_function config to support user defined TTS function 2014-06-30 23:58:13 +09:00
Tom Rothamel f2d69c078e Ignore tmp/ directory when navigating .rpy files. 2014-06-30 00:13:07 -04:00
Tom Rothamel ce76ab25f6 Include Ren'Py with android distributions.
RAPT will now use this version of Ren'Py, which can include patches
by the creator.

Fixes #368.
2014-06-30 00:03:57 -04:00
Tom Rothamel a8c0cc096c Add some self-voicing support to the launcher. 2014-06-28 21:55:26 -04:00
Tom Rothamel 60a6f6adfc Add a large-fonts mode to the launcher.
Fixes #399.
2014-06-28 21:43:17 -04:00
Tom Rothamel c471e3ff26 Generate lists of const and pure variables. 2014-06-28 21:12:07 -04:00
Tom Rothamel 249ebb8b0c sl2: Flag more things pure. 2014-06-28 17:19:43 -04:00
Tom Rothamel 24de1990ce Fix typo. 2014-06-28 17:18:41 -04:00
Tom Rothamel 8cac7510ee Invalidate, rather than redraw, on Transform.set_child.
This prevents a redraw from unconditionally occuring when the
child is changed - we only want the change to occur if we're
not already in a redraw.
2014-06-28 00:10:01 -04:00
Tom Rothamel fae51e39bd sl2: Make sl2 the default screen language. 2014-06-27 23:07:31 -04:00
Tom Rothamel 4c94285195 sl2: Analyze screen parameters. 2014-06-27 22:58:44 -04:00
Tom Rothamel 0a6797340f sl2: Let the user dump the results of const analysis. 2014-06-27 18:15:03 -04:00
Tom Rothamel e3f2c70144 sl2: Make defines and transforms pure.
They should be, and this should help make more things const.
2014-06-27 17:42:48 -04:00
Tom Rothamel 6c97478a81 sl2: Flag renpy.<name> as pure functions, when appropriate. 2014-06-27 09:44:37 -04:00
Tom Rothamel 738321cc4e sl2: Pure functions should also be constants. 2014-06-27 09:23:22 -04:00
Koichi Akabe 2990efac7a Copy target files of symbolic links 2014-06-27 21:48:16 +09:00
Tom Rothamel 31419d103b sl2: Perform const/not-const analysis on Python code. 2014-06-26 22:50:19 -04:00
Tom Rothamel 57b6d6124b Keep the source of PyCode objects around.
We're no longer as memory-limited as we once were, and this makes
the source available for code analysis, when necessary.
2014-06-26 22:49:17 -04:00
Tom Rothamel a01f3b8432 sl2: Analyze sl2 statements (not including python). 2014-06-25 17:29:48 -04:00
Tom Rothamel 76477f103e sl2: Frameworks for fixed-point analysis.
This doesn't do anything yet, but provides the structure for constant
analysis.
2014-06-24 22:07:48 -04:00
Tom Rothamel 394c19b9c2 sl2: Encapsulate code analysis into a single object.
This is in preparation for analyzing const/non-const inside a screen.
2014-06-23 22:19:04 -04:00
kyouryuukunn c159dcce30 pass show_args to 'nvl' screen 2014-06-23 23:22:55 +09:00
Tom Rothamel 50d8f356e2 sl2: Fix debug. 2014-06-22 23:38:17 -04:00
Tom Rothamel 366257119b sl2: Screen profiling debugging.
This entails writing information about the decisions we make when
creating the displayables comprising the screen.
2014-06-22 23:32:41 -04:00
Tom Rothamel 64159e840b Basic framework for profiling screen execution. 2014-06-22 22:02:32 -04:00
Tom Rothamel 680131beb3 Simplify ScreenDisplayable._hide and make it work with sl2. 2014-06-21 10:57:31 -04:00
Tom Rothamel 857a5a06b5 sl2: Migrate grab. 2014-06-20 23:03:33 -04:00
Tom Rothamel 4dab5e849b Allow RevertableDict to be past as the properties argument to Style.
Fixes #323.
2014-06-19 21:45:45 -04:00
Tom Rothamel 925cd35947 Merge pull request #384 from kyouryuukunn/Function
Add Function action, which calls a function with arguments.
2014-06-19 21:14:24 -04:00
Tom Rothamel 17b77dcce2 Remove spurious code. 2014-06-19 08:40:02 -04:00
Tom Rothamel 96260b4ec8 sl2: Pass default keyword arguments to the displayable.
This is required so we can pass the layout argument to MultiBox,
which makes the distiniction between fixed, horizontal, and vertical
layouts when the style does not.
2014-06-18 23:08:17 -04:00
Tom Rothamel 16d361c714 Document self-voicing, generate doc includes. 2014-06-18 20:23:42 -04:00
Tom Rothamel 738f93b156 tts: Speak bar text immediately. 2014-06-18 00:19:02 -04:00
Tom Rothamel 23b03ea790 tts: Allow the user to unfocus all widgets.
This will read out the default text.
2014-06-17 23:45:20 -04:00
Tom Rothamel 6a27c02a9b tts: Add a new linear focus ordering.
This allows one to navigate through all of the displayables on the
screen with the cursor keys, without having to do 2-d navigation,
which is what Ren'Py does by default.
2014-06-17 23:35:14 -04:00
Tom Rothamel d1f6132637 tts: Add self-voicing text to file actions. 2014-06-17 20:29:01 -04:00
Tom Rothamel c612db1551 tts: Read non-prefs labels.
We want to read yesno_label, for example.
2014-06-17 20:28:56 -04:00
kyouryuukunn d5e8e70d7c fix 2014-06-17 12:58:57 +09:00
kyouryuukunn 724cae119b update 2014-06-17 12:56:07 +09:00
Tom Rothamel 845d318a44 tts: Make nvl-mode compatible with tts.
This involves using alt to disable speaking of already-spoken text.
2014-06-16 21:36:14 -04:00
Tom Rothamel 28ec3f2326 Directly invoke platform-specific TTS commands.
Pyttsx would try to invoke TTS from the python process, which
required a ton of dependencies. (Pyobjc and win32api) We now
use subprocess to run platform-specific executables, passing
the text to speak on the commands line.
2014-06-16 21:31:34 -04:00
Tom Rothamel f7e763f8a8 tts: Make self voicing a preference. 2014-06-15 22:52:03 -04:00
Tom Rothamel 8e5c2a1532 tts: Make the alt property available in sl1 and sl2. 2014-06-15 20:18:00 -04:00
Tom Rothamel 077ae1b609 tts: Self-voicing improvements.
* Generate alt text only when voice is enabled.
* Allow the text of the children to be interpolated into alt text.
* Alt text for the preferences screen.
2014-06-15 15:56:18 -04:00
Tom Rothamel 179301421c tts: Initial implementation of self-voicing. 2014-06-15 13:23:46 -04:00
Tom Rothamel 88439529e4 Merge pull request #361 from oshi-shinobu/renpy-it
Added Italian translations for launcher and template
2014-06-15 11:34:11 -04:00
Tom Rothamel 74b7cbe06c Make SL2 screens copy displayables during transitions.
This required several fixes, including making sure copy_on_change works
and copying constant displayables if a change to the scope causes a Text
to change its contents.
2014-06-14 22:38:29 -04:00
Tom Rothamel 4d8144d320 Fixes to make transitions and screens work together.
This currently only works for sl1 screens, as sl2 screens are
over-agressively reusing displayables.
2014-06-14 20:56:04 -04:00
Tom Rothamel 251cfacb22 Implement ScreenDisplayable._in_old_scene(). 2014-06-13 18:22:57 -04:00
Tom Rothamel b9a47a2bb8 Merge pull request #389 from renpy/fix-doc-vbk
Fix typos in the documentation
2014-06-13 13:08:10 -04:00
Koichi Akabe 9a06636789 Fix many typos in the documentation
Following documents are checked:
* skins
* sprites
* statement_equivalents
* store_variables
* style
* style_properties
* text
* thequestion
* thequestion_nvl
* trans_trans_python
* transforms
* transitions
* translation
* udd
* updater
* voice
2014-06-14 01:43:21 +09:00
Koichi Akabe 413c2dee85 Fix many typos in the documentation
Following documents are checked:
* label
* language_basics
* license
* menus
* modes
* movie
* nvl_mode
* other
* persistent
* problems
* python
* quickstart
* reserved
* rooms
* save_load_rollback
* screen_actions
* screen_python
* screen_special
* screens
* side_image
2014-06-14 01:21:12 +09:00
Koichi Akabe a7000ffb14 Fix many typos in the documentation
Following documents are checked:
* developer_tools
* dialogue
* display_problems
* displayables
* displaying_images
* distributor
* drag_drop
* editor
* environment_variables
* file_python
* incompatible
* index
* input
* keymap
2014-06-14 00:41:47 +09:00
Koichi Akabe 76b7b471a4 Fix many typos in the documentation
Following documents are checked:
* android
* android-packaging
* atl
* audio
* build
* cds
* changelog
* character_callbacks
* conditional
* config
2014-06-14 00:11:50 +09:00
Renoa 97000fd87a Update screens.rpy
fixed the path where Ren'Py had the wrong path for the arabic font AdvertisingBold.ttf which created an error message while trying to access "Options" from the inside the game.
2014-06-13 16:27:19 +03:00
Tom Rothamel f639a201a6 Add ui.implicit_add for internal use.
This is a function that takes displayables that are being implicitly
added to a widget by ChildOrFixed. We do not want to copy transforms
added this way, which we had been doing, causing problems.
2014-06-13 00:35:17 -04:00
Tom Rothamel b63be138d5 Mark buttons with an action (but not clicked) as Focusable.
This lets Ren'Py transfer focus to them at the start of an interaction,
preventing hovered actions from being called repeatedly.
2014-06-12 23:30:44 -04:00
Tom Rothamel 55a45c54be Further optimization. 2014-06-12 12:27:36 -04:00
Tom Rothamel 2fc9c3d4c0 Optimize MultiBox._in_old_scene.
We now only use the newly-created boxes if at least one displayable
has changed. Otherwise, we don't bother, preferring to use the old
box (which likely has been cached).
2014-06-12 01:00:30 -04:00
Tom Rothamel ef9cffdbf6 Implement MultiBox._in_old_scene(). 2014-06-12 00:41:14 -04:00
Tom Rothamel c3a87909ce Add Displayable._in_old_scene().
This is a method that can copy layers and screens when they're being
used as the old_widget in a transition.
2014-06-11 18:37:34 -04:00
Koichi Akabe 3d553e31f0 Fix typo in doc: translatoon -> translation 2014-06-11 17:42:32 +09:00
Tom Rothamel fa1d3b7e21 sl2: Implement copy_on_change functionality.
This will copy displayables when their children change, which will
eventually let us use transitions to show changes in screen state.
2014-06-10 17:52:36 -04:00
Tom Rothamel e6dc0aa644 Merge pull request #385 from LuqueDaniel/update-es
Update-es
2014-06-09 08:29:05 -04:00
Daniel Luque 0994579c2a Added new string 2014-06-09 12:29:27 +02:00
kyouryuukunn 45e1854786 add Function Action 2014-06-09 17:54:50 +09:00
kyouryuukunn 7897a9c369 fix doc 2014-06-09 17:26:45 +09:00
Tom Rothamel 7fa4517439 sl2: Only pass scope to a displayable it it uses the scope. 2014-06-08 10:37:37 -04:00
Tom Rothamel 8a69b0c03f play sound / queue sound should respect loop parameters.
Fixes #378.
2014-06-07 21:02:58 -07:00
Tom Rothamel 0a3ca8bc3a Prompt the user to back up their project.
Brought to you by citizens against data loss.
2014-06-07 21:24:35 -04:00
Tom Rothamel ab4951d08c Window show None should not use config.window_show_transition.
And similary for window hide None and config.window_hide_transition.

Fixes #381.
2014-06-06 21:53:28 -07:00
Tom Rothamel c7de8a8b50 Merge pull request #379 from kyouryuukunn/fix_doc
fix doc about LiveComposite
2014-06-06 23:08:42 -04:00
Tom Rothamel 635ccdf130 Add the uses_scope property to Text.
This tells us if we need to update the text when the scope changes.
2014-06-05 23:21:10 -04:00
kyouryuukunn 246888c794 fix doc about MoveTransition 2014-06-05 16:50:31 +09:00
Tom Rothamel 845d78df2e Properly encode unicode strings in exceptions.
Previously, if a non-ascii unicode string was in an exception,
we'd fail to encode the exception and crash.
2014-06-05 00:28:28 -04:00
Nobody Really a325ffff22 Fixed very minor typos 2014-06-04 15:50:46 +02:00
kyouryuukunn 6372563998 fix doc about LiveComposite 2014-06-04 21:16:36 +09:00
Nobody Really 91c46649e1 Removed TODO and duplicates, added README.html 2014-06-04 00:07:52 +02:00
Helloise 5f920b5b0a Small fix for newline_indent behavior.
Now should work as described in documentation ( http://www.renpy.org/doc/html/style_properties.html#style-property-newline_indent )
2014-06-03 22:39:00 +04:00
Tom Rothamel 689d3acc63 Use list_logical_lines to scan for translations.
This will properly handle comments, and so fixes #363.
2014-06-03 08:42:12 -04:00
Tom Rothamel 6fe2f8afa2 Fix queuing of unicode filenames.
Fixes #369, again.
2014-06-02 22:33:46 -04:00
Tom Rothamel 776ea299c3 Properly format style names for lint.
Fixes #367.
2014-06-02 18:16:15 -04:00
Nobody Really 1580502949 Fixed screens.rpy 2014-06-02 20:27:33 +02:00
Tom Rothamel c092d687d7 Transform: Fix and optimize argument parsing.
Transform had a problem parsing arguments with underscores in the
name, like transform_anchor. That's been fixed.

Transform also did a lot of allocation for rare cases, such a
Transform being given an argument with a style prefix,
like hover_xpos. This has been optimized in order to reduce
the amount of allocation required.
2014-06-01 23:42:30 -04:00
Tom Rothamel a5301ec50c Add an 'events' transform property.
This determines if events will be passed to the child of the
transform. This allows one to prevent events from being passed
to the old_widget in an ATL transform.
2014-06-01 22:49:26 -04:00
Tom Rothamel d0e01f5c9c Transform.set_child should update the transform's children.
This lets us pass events to a new child when the child changes.
2014-06-01 22:28:03 -04:00
Tom Rothamel c717c42b13 Encode PSS_play extension using UTF-8.
This prevents a crash that occurs when a unicode filename is passed
to PSS_play.

Fixes #369, thanks to everyone for tracking this down.
2014-06-01 10:39:24 -04:00
Tom Rothamel 65ed8f87b0 Get rid of _predict_screens.
This has been obsoleted by the new code.
2014-05-31 22:59:12 -04:00
Tom Rothamel 0f2b67745c New functions for continuously predicting displayables and screens. 2014-05-31 22:56:32 -04:00
Tom Rothamel 30ce6b5033 Add __hash__ to Image and Solid. 2014-05-31 22:07:22 -04:00
Tom Rothamel d6768da6c8 Predict show screen and call screen statements with arguments.
This is a behavior change, and a potentially dangerous one, since it
could execute arguments with side effects multiple times. But those
should be rare, this provides a nice performance boost, and users
will be able to disable prediction using the new nopredict clause.
2014-05-30 21:29:22 -04:00
Tom Rothamel 6c8e997cf2 Fix prediction of argument-containing screens.
We were passing the arguments incorrectly, which prevented them from
working.
2014-05-30 21:28:49 -04:00
Tom Rothamel 62458fa036 Fix regression: Set Text.dirty before we use it. 2014-05-30 08:31:28 -04:00
Tom Rothamel bcf47fd43a Fix prediction of screens without arguments.
Fixes #370, at least partially.
2014-05-29 23:17:45 -04:00
Tom Rothamel 39b168eda9 Do not wait for an event to occur to proceed with prediction. 2014-05-29 23:17:25 -04:00
Tom Rothamel 80130db047 Do not redraw Text if it hasn't been drawn at least once. 2014-05-29 23:09:27 -04:00
Tom Rothamel 2942ddc53d Merge pull request #373 from Shizmob/master
Only consider unique image attributes when determining best match.
2014-05-29 21:19:53 -04:00
Shiz b127da3a41 Only consider unique image attributes when determining best match. 2014-05-30 03:18:27 +02:00
Tom Rothamel 0375b7cf1a Merge pull request #372 from Shizmob/master
Restart interaction when MixerValue value changes.
2014-05-29 17:40:09 -04:00
Shiz 294e6611ef Restart interaction when MixerValue value changes.
This allows UIs which rely on the mixer value for other UI elements to
be properly updated as the value changes.
2014-05-29 23:37:32 +02:00
Tom Rothamel c03d1fddd1 Fix dump of non-ASCII defines. 2014-05-28 22:47:35 -04:00
Tom Rothamel 59e3eecb92 sl2: Ensure exceptions in screens work.
This means clearing out the various gui stacks if an exception occurs.
2014-05-28 21:45:52 -04:00
Tom Rothamel 0e11a964cc Fix XScrollValue and YScrollValue.
These have been broken since we started deferring get_adjustment()s.
2014-05-28 21:34:14 -04:00
Tom Rothamel 3744a729b3 Make renpy.get_widget() accept a ScreenDisplayable.
This makes it possible to do:

    self.screen = renpy.current_screen()

and later:

    renpy.get_widget(self.current_screen, "name")
2014-05-28 21:33:25 -04:00
Tom Rothamel 9dafe56266 Allow non-ascii identifiers to be used as character names.
There are a couple of caveats here, since non-ascii identifiers
can't be used in python code.

* The names must be defined with the define statement.
* The names can't be accessed in python code.

Stil, something like:

    define 彁 = Character("Boy who is not able satisfactorily to explain what a Hrung is, nor why it should choose to collapse on Betelgeuse Seven")

    彁 "Don't forget your towel."

should work.
2014-05-27 22:42:39 -04:00
Tom Rothamel a705f46018 sl1: Fix label and textbutton.
Now that we're creating the widgets directly, we need to apply the
function wrapper to the results of _label and _textbutton.
2014-05-27 21:13:56 -04:00
Tom Rothamel 1bf516bd79 Fix transform_anchor to work with anchors of type absolute. 2014-05-27 19:14:25 -04:00
Tom Rothamel 533b22e9d8 Remove accidentally included text. 2014-05-27 17:43:22 -04:00
huanxuantian 94e1681802 Chinese_Simplified translation for ren'py launcher 1.3c release
orgin version:0.98a
current version:1.3c
least update date:2014-5-27
2014-05-27 19:05:44 +08:00
Tom Rothamel bee2a91d3d sl2: sl2viewport no longer uses ChildList. 2014-05-26 23:50:18 -04:00
Tom Rothamel 1c80515112 sl2: More optimizations. 2014-05-26 23:34:19 -04:00
Tom Rothamel 6eec5cd454 sl2: Various minor optimizations 2014-05-26 23:11:02 -04:00
Tom Rothamel 263a2d4c51 sl2: Allow the use of cprofile to profile the screen implementation. 2014-05-26 22:27:28 -04:00
Tom Rothamel 042a87b2ce sl2: Prepare screens ahead of time. 2014-05-26 21:58:19 -04:00
Tom Rothamel c823bef1c6 Add the ability to profile various phases of a screen's life. 2014-05-26 21:15:40 -04:00
Tom Rothamel c7e5856fdb sl2: Store the location the displayable was created at. 2014-05-25 23:42:52 -04:00
Tom Rothamel 1d3a8a0459 sl2: Fix cache.children issues. 2014-05-25 23:42:08 -04:00
Tom Rothamel 77ae9668b8 sl2: Store the children of displayables in the cache.
This means we don't have to re-add them all the time, and prevents
clear from being called for no-child displayables.
2014-05-25 22:43:53 -04:00
Tom Rothamel a964d2fc9a Merge pull request #355 from kyouryuukunn/fix_doc8
Fix get_playing doc
2014-05-25 10:09:05 -04:00
kyouryuukunn 27ecb992e9 fix doc 2014-05-25 23:07:41 +09:00
Tom Rothamel fd3c89c3ff Allow ImageButtons to not have children.
Since ImageButtons do not use their child, it makes sense to not
require one - especially since _clear() will occasionally remove
it.
2014-05-24 23:35:20 -04:00
huanxuantian c7bae1eee8 Signed-off-by: huanxuantian <huanxuantian@msn.cn>
Chinese_Simplified translation for ren'py launcher
Created by huanxuantian
Translate by huanxuantian
Translation version 1.3.b
update to github on 2014-5-25 sun
2014-05-25 09:52:36 +08:00
Tom Rothamel a45df6e964 sl2: Fix regression in imagemap.
The _reuse() method would clear out the fixed during reuse,
which would remove the ground from the imagemap.
2014-05-24 17:48:43 -04:00
Tom Rothamel 905b0e0534 Simple expressions take words as field names.
This lets one use a keyword (like transform) as a field name.
2014-05-23 22:00:34 -04:00
Tom Rothamel bfeae69e5e Screen language keywords (incl. at) take comma separated expressions. 2014-05-23 21:59:38 -04:00
Tom Rothamel 1e0b224ccc Fix sl1 and sl2 pass statements.
Neither ever worked, despite being part of SL design from the
beginning.
2014-05-22 23:00:29 -04:00
Tom Rothamel 1fc90fb3b5 sl2: Add slast.SLOn.
Since on doesn't create a displayable, it makes sense to handle it
differently rather than complicating SLDisplayable.
2014-05-22 22:18:45 -04:00
Tom Rothamel bebbc73210 Update screens at most once per interaction. 2014-05-21 23:52:54 -04:00
Tom Rothamel 9615971e2e Store and use the cache of predicted screens.
This will generally let us show the screen a lot faster.
2014-05-21 23:49:25 -04:00
Tom Rothamel 55f8782da9 Fix all errors and warnings reported by pydev 3.5.
The predefinition directory (predef) needs to be added to the Ren'Py
interpreter in PyDev for this to work.
2014-05-21 22:13:11 -04:00
Tom Rothamel 651da7e487 Add shift+P to profile once.
This restarts the interaction, and then reports the amount of time
it took to do so. This can give us an idea of how much (if any)
performance is being improved by the new screens code.
2014-05-21 09:22:48 -04:00
Tom Rothamel 248793923a sl2: Fix bar handling.
We have to figure out the style in the sl2 code so the context is
available to the code that gets the bar style.
2014-05-20 23:18:39 -04:00
Tom Rothamel 66e07d6e9b sl2: Fix handling of tuple patterns in SLFor. 2014-05-20 21:28:53 -04:00
Tom Rothamel 079d311228 sl2: Use eval and exec directly in execute and keywords code.
For performance reasons.
2014-05-19 23:42:53 -04:00
Tom Rothamel afb1da6248 sl2: Fix const on if statements. 2014-05-19 23:34:13 -04:00
Tom Rothamel 72c1aa0f8d Improve profiling and control screen prediction with an envvar. 2014-05-19 23:32:51 -04:00
Tom Rothamel b4b7fcfc26 Mark config and style as constants. 2014-05-19 23:32:21 -04:00
Tom Rothamel 372d8cb748 Fix __repr__ on displayable - encode unicode. 2014-05-19 23:31:06 -04:00
Tom Rothamel 6ee38b1817 Fix --compile. 2014-05-19 23:30:39 -04:00
Tom Rothamel ee24f4f96d Import os before running os.startfile. 2014-05-19 18:49:37 -04:00
Tom Rothamel 16ae08345e A regression prevented insensitive buttons from working. 2014-05-18 23:11:33 -04:00
Tom Rothamel e651810ade Do not attempt to resize a 0-width or 0-height displayable.
This prevents a divide-by-zero.
2014-05-18 21:10:39 -04:00
Tom Rothamel ec59eef066 sl2: Make the version of screen language used configurable.
For now, this is controlled by an environment variable.
2014-05-18 20:06:14 -04:00
Tom Rothamel f8f147ad30 Add --compile and --lint arguments.
--compile compiles the script before doing anything else.

--lint is a backwards compatable way of invoking the lint
command. We've been parsing it as an argument for a while, but it
didn't work.
2014-05-18 17:41:57 -04:00
Tom Rothamel d50c922c87 sl2: Transforms take a child parameter, while transforms just take an argument. 2014-05-17 22:21:45 -04:00
Tom Rothamel d0bbf09783 Reset Viewport and Input when first shown.
This supports reuse, by eliminating state state from these
displayables.
2014-05-17 08:57:54 -04:00
Tom Rothamel d69c59beca Get a new adjustment from bars on each interaction.
This lets us reuse the Bar objects, and yet update the object in
the face of changing data.
2014-05-16 23:43:36 -04:00
Tom Rothamel b3a1571038 Evaluate button role and sensitivity per-interaction.
This lets us reuse buttons, and still update the role/sensitivity
as the actions dictate.
2014-05-16 08:46:27 -04:00
Nobody Really d91f9ce376 Added Italian translations for launcher and template 2014-05-16 12:23:38 +02:00
Tom Rothamel ee1295c98b sl2: Implement constant displayables.
These are displayables that have constant arguments and constant
children, and hence where the same displayable can alwaye be used.  We
use a very fast path for these displayables (simply retrieving them
from the cache), and avoid evaluating their children entirely.
2014-05-16 00:05:00 -04:00
Tom Rothamel 94cc959880 sl2: Do not pass keywords intended for a displayable to its parent.
Due to inheritance of SLBlocks, we had the problem that

    frame:
        textbutton "test" xysize (100, 100)

Would pass the xysize parameter to both the textbutton and the frame.
2014-05-15 09:10:05 -04:00
Tom Rothamel 1c7685550d sl2: Use object identity and count in slfor. 2014-05-15 08:41:57 -04:00
Tom Rothamel 37f5738b86 sl2: Update the scope when we reuse a displayable. 2014-05-14 22:56:29 -04:00
Tom Rothamel bde2cf84f7 sl2: Redraw cleared displayables.
If we don't do this, we won't actually show the changes.
2014-05-14 21:57:13 -04:00
Tom Rothamel e393d647f0 Allow auto to take images as well as image filenames. 2014-05-13 18:42:07 -04:00
Tom Rothamel 1d534a6162 Add renpy.image_exists, a function that makes it possible to tell
if an image exists.
2014-05-13 18:11:09 -04:00
Tom Rothamel 0cbc06a241 Make more Displayables comparable. 2014-05-12 22:49:48 -04:00
Tom Rothamel 911f179631 An object should be equal to itself. 2014-05-12 22:11:21 -04:00
Tom Rothamel 043a2c7213 Make styles comparable. 2014-05-12 22:11:05 -04:00
Tom Rothamel 87073bcd0b render cache: use id(d) as the key.
This is needed so we can start defining __eq__ on various
displayables, even when we don't want them being considered the same
by the cache.
2014-05-12 21:17:01 -04:00
kyouryuukunn 9e895e2575 reduce bgm volume during voice playing 2014-05-12 16:13:23 +09:00
Tom Rothamel eec2d6e7d6 Annotate more functions as pure. 2014-05-11 22:04:20 -04:00
Tom Rothamel 44a8128326 The define statement now marks variables as const. 2014-05-11 09:15:47 -04:00
Tom Rothamel 292e24b640 Annotate BarValues for purity and equality. 2014-05-10 23:28:07 -04:00
Tom Rothamel a37c841d16 Merge pull request #341 from kyouryuukunn/DictValue
Add DictValue
2014-05-10 23:15:44 -04:00
Tom Rothamel 878bde34fc Annotate actions for purity and equality. 2014-05-10 22:47:07 -04:00
Tom Rothamel 6e49ed1a15 New renpy.const and renpy.pure functions.
These allow one to declare variables const and functions/classes pure,
for the purpose of sl2.
2014-05-10 22:04:50 -04:00
Tom Rothamel 2c6c97b27a sl2: Pass the main displayable to replaces=. 2014-05-09 21:26:21 -04:00
Tom Rothamel 143cb26ae3 sl2: Add viewport and the concept of a main displayable.
Viewport was broken with sl2, so we now have a compatible
implementation.

Several screen language things are implemented as composite
displayables. For example, a textbutton consists of a Text
and a Button, and a viewport scrollbars "both" consists of
a Side, two Bars, and a Viewport.

The main displayable (stored in _main on the outer displayable) is the
displayable we add children to, and return for get_widget.
2014-05-09 21:18:55 -04:00
Tom Rothamel 2d1af033f8 sl2: Improve reuse.
* SLFor now reuses the cache.
* SLDisplayable no longer clears composite displayables.
2014-05-08 23:56:19 -04:00
Tom Rothamel 1abb87e2a2 sl2: The result of a pure function called with constants is constant. 2014-05-08 23:51:20 -04:00
Tom Rothamel a53eb8b3ce Fix doc typo in queue_event.
Thanks, KiloTango.
2014-05-07 21:59:51 -04:00
Tom Rothamel 26ea3fb14e Fix changelog. 2014-05-07 21:50:55 -04:00
Tom Rothamel 3232620a12 Add 6.17.6 changelog. 2014-05-07 21:38:58 -04:00
Tom Rothamel 28fbf90342 Only enable config.rtl in the launcher iff Arabic is the language.
This is a workaround for #351, which only seems to manifest on certain
Macs, and hence is proving hard to actually fix. At least with this
change, it will only show up when switching to Arabic. (And may not
show up at all, as it may have something to do with filesystem
encodings.)
2014-05-07 20:30:22 -04:00
Tom Rothamel 8f7a2acba5 Extend tkaskdir to handle non-ASCII directories. 2014-05-06 21:53:26 -04:00
Tom Rothamel f50726b5ce Edit a bit. 2014-05-06 21:13:42 -04:00
Tom Rothamel 94d11b0e01 Merge pull request #344 from kyouryuukunn/update_doc
add doc about translations for the launcher
2014-05-06 21:12:04 -04:00
Tom Rothamel 71ef71611b Improve wording of sl/sl2 syntax errors.
Fixes #348.
2014-05-05 21:43:59 -04:00
Tom Rothamel 3da1b368e0 Merge pull request #349 from LuqueDaniel/update-es
Update Spanish translation.
2014-05-05 09:30:40 -04:00
Tom Rothamel 4fea47f3f2 Add Korean translation, by Baekansi. 2014-05-05 09:25:56 -04:00
Daniel Luque 00a92329dd Update launcher/game/tl/spanish/android.rpy 2014-05-05 08:31:38 +02:00
Tom Rothamel fe79eb948f sl2: Reuse displayables where possible.
Reusing a displayable is possible when we realize that the positional
and keyword arguments of the displayable are the same. We can also
reuse the transform if we apply the same transform to the
displayable.
2014-05-04 23:23:41 -04:00
Tom Rothamel e85c0ade0f Add _clear methods to containers.
This facilitates reuse of the underlying displayable.
2014-05-04 21:55:28 -04:00
Tom Rothamel 45c6eb156f sl2: Persist the cache. 2014-05-03 21:09:56 -04:00
Tom Rothamel e45a935c7e sl2: Fix parsing layouts. 2014-05-03 20:19:50 -04:00
Tom Rothamel 094c07ce3c Add screen profiling.
For now, this is intended for Ren'Py development use, so we can
see if sl2 is actually making things faster, as optimizations are
implemented.
2014-05-02 22:39:48 -04:00
Tom Rothamel 1d3a14bc99 Add a German Translation of the launcher. (By NoJoker) 2014-05-02 15:29:27 -04:00
Tom Rothamel 7aa971a978 Add project.json to Arabic template. 2014-05-01 22:46:49 -04:00
Tom Rothamel d0b3ba90f2 Various Arabic fixes. 2014-05-01 22:45:51 -04:00
Tom Rothamel 45b8cb3051 Update documentation for 6.17.5. 2014-05-01 21:22:18 -04:00
Tom Rothamel 4829a32c29 Fix save_directory in arabic translation. 2014-05-01 18:14:46 -04:00
Tom Rothamel e355c451e5 Properly set up the context after a warp occurs. 2014-04-30 18:19:54 -07:00
Tom Rothamel 3301f8c87b Fix --warp.
Fixes #345.
2014-04-30 18:03:40 -07:00
Tom Rothamel 13c4c97e59 Improved memory debugging. 2014-04-29 21:42:21 -07:00
Tom Rothamel 6355e0d623 Re-initialize the cache after shift+R.
Fixes a major memory leak, where textures would be placed in a
stopped cache and never deallocated.
2014-04-29 21:40:40 -07:00
Tom Rothamel 94f0ff71a1 Pause defaults to only setting a checkpoint if delay is not set.
This fixes an issue where renpy.pause(0) would effectively block
rollback, since there would be no time for the rollback to occur.
(The same issue occurs when pausing for a short time.)
2014-04-28 23:26:45 -04:00
kyouryuukunn 3e966d308f add doc about translations for the launcher 2014-04-29 11:52:48 +09:00
Tom Rothamel 2c49d5902d Add/use the renpy.object.Sentinel class.
This is a class that can be used to create sentinel objects. Even if
we pickle and unpickle an object of this class, it remains the same
object, as far as the 'is' operator is concerned.

This fixes a problem with the shift+R module backups. (The same
problem 9dec1f32ab tried to fix.)
2014-04-28 22:17:43 -04:00
Tom Rothamel 816d60eae0 Merge pull request #333 from renoa/master
add arabic translation
2014-04-28 17:47:32 -04:00
Tom Rothamel be258d878d Merge pull request #335 from kyouryuukunn/fix_doc3
fix doc
2014-04-28 17:46:36 -04:00
Daniel Luque 92c4c68942 Add new tl 2014-04-28 14:30:07 +02:00
kyouryuukunn fc25414deb Merge pull request #343 from kyouryuukunn/update_japanese_template
Update japanese template
2014-04-28 20:03:11 +09:00
kyouryuukunn 137e8ba77d update the japanese translation for launcher 2014-04-28 20:01:17 +09:00
kyouryuukunn 0a26eeaa7e update japanese_template 2014-04-28 18:58:28 +09:00
Tom Rothamel 9dec1f32ab Do not backup / restore flag singletons.
The reload backup process would back up singletons, but not functions
and methods that used those singletons as default arguments. The
result was that the singletons would change identity, but not
the default arguments - and the code using them would fail in
odd ways.

An example problem this caused is
http://lemmasoft.renai.us/forums/viewtopic.php?p=320775#p320757 .
2014-04-27 22:44:34 -04:00
Tom Rothamel 499762aad4 atl: Properly transfer child_st_offset, raw_child, and debug.
The major problem fixed here is one where if a transform was
replaced (like one in a screen would be), it would not know that
the old child was being shown. This would prevent the
"<displayable> with <transition>" ATL construct from doing
anything.

Fixes #340.
2014-04-27 19:52:42 -04:00
Tom Rothamel 6cac00a688 Remove raspi stuff. 2014-04-27 01:40:29 -04:00
Tom Rothamel 37d31a6f85 Add raspberry pi and x11 egl modes.
The raspi one somewhat works (it has problems, such as positioning the
window in the wrong place), but the slowness of the raspi system make
using it problematic.

The x11 mode hasn't been tested.
2014-04-27 01:28:16 -04:00
Tom Rothamel 116d344519 Rename eg_gl to egl_none, since it's really used in cases where we're not managing egl. 2014-04-26 23:13:21 -04:00
Tom Rothamel 6739a9a268 Make it easier to add EGL support. 2014-04-26 14:16:33 -04:00
Tom Rothamel 96058a9de3 Get things building on Raspberry Pi.
Right now, we can run Ren'Py, but at an unusably slow speed.
2014-04-26 13:53:45 -04:00
Tom Rothamel b6e71f20c2 Add a new debug ATL property.
This can be accessed in the Ren'Py internals to dump particular
transforms that are having problems.
2014-04-25 22:04:50 -04:00
Tom Rothamel ebd9274776 Add RENPY_TIMEWARP.
This environment variable, if set, makes time itself run faster or
slower. (Well, at least inside the game.)
2014-04-25 21:41:32 -04:00
kyouryuukunn f3a52917cd add DictValue 2014-04-25 16:57:46 +09:00
Tom Rothamel f24379aec6 sl2: Report tracebacks using the screen lines they originate on. 2014-04-24 19:19:52 -04:00
Tom Rothamel 49fa961502 Do not back up renpy.display.presplash.
This prevents an issue with copying modules that only occurs when
presplash is present.
2014-04-23 21:48:23 -04:00
Tom Rothamel 3abba0c7e9 sl2: Supply location to SLDefault. 2014-04-23 21:46:16 -04:00
Tom Rothamel ab00c6a876 sl2: Annotate the ast nodes with locations. 2014-04-22 23:44:30 -04:00
Tom Rothamel 769a65467a Only change the reported traceback if it is not the proximate cause
of the error.
2014-04-22 19:25:04 -04:00
Tom Rothamel 62c66b3794 Various fixes to the documentation. 2014-04-22 19:20:35 -04:00
Tom Rothamel 19889c7457 Remove unused functions. 2014-04-22 19:08:27 -04:00
Tom Rothamel bc3ee8667c Rewrite tracebacks.
We now use the .report_traceback method whenever it's available to
produce nicer-looking tracebacks. (Previously, we only used it
for the simple tracebacks, and only for Contexts.)
2014-04-21 23:54:05 -04:00
Tom Rothamel d2c6f47299 Break up bootstrap.py.
The traceback code went into renpy.error, while the memory dump code
went into renpy/memory.py.
2014-04-21 22:18:59 -04:00
Tom Rothamel 16a4019a40 raise_at_location: A function that raises a traceback at a given location. 2014-04-20 13:38:32 -04:00
Tom Rothamel ec37eb9a84 sl2: Direct path for use.
This makes the ast of the used screen available to the using screen,
allowing for potential optimizations.
2014-04-20 13:13:57 -04:00
Tom Rothamel 96d4440960 sl2: SLScreen is now a SLBlock.
We also now properly handle parsing SLScreen keywords.
2014-04-20 12:38:15 -04:00
kyouryuukunn 738f939f2e Merge pull request #337 from kyouryuukunn/update_japanese_template
Update japanese template
2014-04-20 22:13:14 +09:00
kyouryuukunn cc4591848f autosave before load 2014-04-20 22:03:57 +09:00
Renoa 57afa2ca46 Update android.rpy 2014-04-20 15:02:49 +03:00
Tom Rothamel 7b3072983f Fix regression in times for children of transformed layers.
The regression was introduced by dd4d3410a6,
and shows up in the Sunrider tutorial battle, when the PACT ships
attack with missiles.

The problem was that we were adjusting the times improperly - using
AdjustTimes to make the adjustment. Instead, we want the MultiBox
containing the layer to make the adjustment (which it does when
layer_name is set). This is because the MultiBox handles start
and animation times that are not the time at which the layer
was shown.
2014-04-19 21:40:56 -04:00
Tom Rothamel b1ae62b45f Add environment variables to skip main_menu and splashscreen.
These are RENPY_SKIP_MAIN_MENU and RENPY_SKIP_SPLASHSCREEN.
2014-04-19 18:48:09 -04:00
Renoa dc80ec27e1 Update common.rpy 2014-04-19 19:41:36 +03:00
Renoa 17ef16b3c3 Update distribute.rpy 2014-04-19 19:31:11 +03:00
Renoa 7fdd823745 Update front_page.rpy 2014-04-19 19:30:56 +03:00
Renoa 1cfba7a745 Update preferences.rpy 2014-04-19 19:30:39 +03:00
Renoa 2942dd3390 Update new_project.rpy 2014-04-19 19:30:13 +03:00
Renoa 3afa5e5944 Update project.rpy 2014-04-19 19:29:49 +03:00
Renoa d7b463a445 Update updater.rpy 2014-04-19 19:29:17 +03:00
kyouryuukunn 123dd8d0c7 update japanese template 2014-04-19 20:16:41 +09:00
kyouryuukunn 98d66242c4 update japanese template 2014-04-19 20:09:17 +09:00
Tom Rothamel 205efcccdd Fix typo. 2014-04-18 23:53:03 -04:00
kyouryuukunn 23e7301b6d fix doc 2014-04-19 12:15:51 +09:00
Tom Rothamel 711f7bb608 sl2: Pass arguments to use_screen. 2014-04-18 22:55:09 -04:00
Tom Rothamel b4271b6b7b Deduplicate argument evaluation code. 2014-04-18 22:34:09 -04:00
Tom Rothamel d3b7a84bcd sl2: Initial implementation of use.
This doesn't support arguments yet, and passes everything through to
use_screen. But it does successfully let one include SL2 and SL1
screens inside an SL2 screen.
2014-04-17 23:11:13 -04:00
Renoa 278eb7f522 Create updater.rpy 2014-04-17 13:45:54 +03:00
Renoa 6349eff9b7 Create translations.rpy 2014-04-17 13:45:42 +03:00
Renoa 2518af39ca Create style.rpy 2014-04-17 13:45:28 +03:00
Renoa 85457996d4 Create project.rpy 2014-04-17 13:45:17 +03:00
Renoa 73ca7320b4 Create preferences.rpy 2014-04-17 13:45:05 +03:00
Renoa 8c3903cb04 Create new_project.rpy 2014-04-17 13:44:51 +03:00
Renoa f02bf4e826 Create navigation.rpy 2014-04-17 13:44:38 +03:00
Renoa f591a66dda Rename choose_theme to choose_theme.rpy 2014-04-17 13:44:17 +03:00
Renoa 5cde6f1eb4 Create interface.rpy 2014-04-17 13:43:50 +03:00
Renoa 24959e2e0a Create front_page.rpy 2014-04-17 13:43:37 +03:00
Renoa 9d2858f558 Create editor.rpy 2014-04-17 13:43:23 +03:00
Renoa cdd045f30d Create distribute_gui.rpy 2014-04-17 13:20:17 +03:00
Renoa 80a0031ab5 Create distribute.rpy 2014-04-17 13:20:01 +03:00
Renoa 9d01fe5d81 Create common.rpy 2014-04-17 13:19:39 +03:00
Renoa 198e7aaa43 Create choose_theme 2014-04-17 13:19:25 +03:00
Renoa 98d7e022fe Create android.rpy 2014-04-17 13:19:09 +03:00
Renoa 9091a0fea0 Create add_file.rpy 2014-04-17 13:18:42 +03:00
Renoa ad91211ca1 Create about.rpy 2014-04-17 13:18:25 +03:00
Renoa 083e69f826 Create script.rpy 2014-04-17 13:17:24 +03:00
Renoa 43124767b9 Create screens.rpy 2014-04-17 13:17:12 +03:00
Renoa 1cc4b21275 Create options.rpy 2014-04-17 13:16:59 +03:00
Renoa 63cf67e078 Create screens.rpy 2014-04-17 13:16:18 +03:00
Renoa 32ff178ae7 Create common.rpy
testing how to add Arabic translation to the templates in Renpy
2014-04-17 13:16:01 +03:00
Tom Rothamel 6b48d71a1e Implement renpy.queue_event.
This queues an event by name. For example, renpy.queue_event("dismiss")
will act like dismiss has been pressed.

This is intended to make it easier to interface Ren'Py with custom
controllers.
2014-04-16 20:20:14 -07:00
Tom Rothamel 77533e042f Renumber user events.
User event 32 seems too high, and we no longer need to reserve space
for PSS events.
2014-04-16 20:17:53 -07:00
Tom Rothamel 97ef93855e Uncomment screen2. 2014-04-16 20:17:15 -07:00
Tom Rothamel 42e9b0f81a Revert changes caused by 6.17 merge. 2014-04-15 20:41:24 -04:00
Tom Rothamel bc213c48fd Add renpy.clear_keymap_cache. 2014-04-15 20:38:47 -04:00
Tom Rothamel ced53fe72a Leave disabled file pacges.
This kicks in if we're on the auto or quick pages, and a creator
sets has_autosave or has_quicksave to false.
2014-04-14 21:31:54 -04:00
Tom Rothamel df7eef44ce Make imagemap_button inherit from hotspot, remove modern uses of imagemap_button. 2014-04-14 21:23:59 -04:00
Tom Rothamel c9f935d008 Docs. 2014-04-13 20:29:29 -07:00
Tom Rothamel 7937e7e103 Disable SL2. 2014-04-13 23:04:19 -04:00
Tom Rothamel 0b8045f7b6 Make autoreload configurable, and default it to off. 2014-04-13 23:02:25 -04:00
Tom Rothamel bc8ca388af Mark this as version 6.17. 2014-04-13 22:45:04 -04:00
Tom Rothamel 101b0c62d1 Merge pull request #321 from javimat/master
Update Spanish translation of the Template and the Launcher
2014-04-13 22:40:07 -04:00
Tom Rothamel ab70f0f11b Update to use newer RAPT. 2014-04-13 16:01:58 -04:00
Tom Rothamel cfd3331ede Fix problem with MoveTransition and multiple interactions.
The problem would manifest when we did something like
$ renpy.transition(move), and restarted the interaction. We had been
creating a MultiBox with a layers dict, which would adjust the times
for its children. When shown as part of the second interaction, the
times would be reset to 0, and the move would appear to restart.

By getting rid of the layers dict, we prevent this the adjustment
of times from occuring, and things work as expected.
2014-04-12 21:48:37 -07:00
Tom Rothamel db8dc43ab9 Remote ADB connect interface.
It's now possible to enter the address to connect to.
2014-04-11 23:38:37 -04:00
Tom Rothamel 9b571dc8ce Add support for connecting to remote ADB. 2014-04-11 17:11:46 -04:00
Tom Rothamel 2a3e691305 Make fit_first fit images bigger than the screen.
It's only used for imagemaps, and it makes sense for an imagemap to
be bigger than the screen. (For example, if you put it into a
viewport.)
2014-04-10 21:11:55 -04:00
Tom Rothamel 0ba7f0011a Add _bar and _vbar styles.
The _bar style being missing was a regression. Fixes #326. Fixes #327.
2014-04-09 22:06:08 -04:00
Tom Rothamel f8d051f2cd Pass all hyperlink URLs to the web browser, not just http URLs. 2014-04-08 11:46:46 -04:00
Tom Rothamel 1f877be8a3 Automatically use background thread for screenshots.
If we try to take a screenshot outside of the display thread, we
segfault. This ensures that can't happen.

Fixes #329.
2014-04-07 23:11:01 -04:00
Tom Rothamel 4ebde6fc38 sl2: Store transforms and transfer state. 2014-04-06 20:48:35 -04:00
Tom Rothamel e53c1673dc sl2: Pass locals to py_eval_bytecode. 2014-04-06 20:47:54 -04:00
Tom Rothamel c745bc47e3 Add replaces to timer. 2014-04-05 22:50:02 -07:00
Tom Rothamel c601a0ff2b sl2: Implement replaces for displayables. 2014-04-05 22:44:42 -07:00
Tom Rothamel 681efdf8fa Do not back up data on Android.
Since we won't reload it, there's not point. And android has some
arbitrary system-specific stuff that can't be pickled.
2014-04-05 01:17:28 -04:00
Tom Rothamel 4d8859ec79 Detect the Amazon Fire TV, and set the "firetv" screen
variant if we find one.
2014-04-05 01:16:58 -04:00
Tom Rothamel a3cbf14ede sl2: Implement the on statement. 2014-04-04 18:06:06 -04:00
kyouryuukunn 4f13cb73b0 fix selected status in musicroom 2014-04-04 19:41:58 +09:00
kyouryuukunn 61a37f225c If SensitiveIf is in a list of Actions, it is uesd to check sensitive 2014-04-04 19:31:46 +09:00
kyouryuukunn 379b340210 If SelectedIf is in a list of Actions, it is uesd to check selected 2014-04-04 19:23:07 +09:00
Tom Rothamel 5f3dba9725 Use hotspot as the style for hotspots.
This fixes a problem where we'd inherit padding from the button
style, which could cause the hotspots to show up in odd places.

This would only occur if ui.hotspot was called directly - so almost
never in actual code.
2014-04-03 21:54:32 -04:00
Tom Rothamel f16cc57d52 sl2: Add add. 2014-04-03 20:59:07 -04:00
Tom Rothamel 61cbc9e6c7 sl2: Implement child_or_fixed behavior. 2014-04-03 00:21:35 -04:00
Tom Rothamel 5867d4f7ac sl2: Add imagemaps.
These don't work, due to incorrect handling of displayables that
take one child.
2014-04-02 23:47:12 -04:00
Tom Rothamel cc92d83fd6 sl2: Evaluate keywords and children separately.
This is necessary for us to have imagemap statements. The imagemap
needs the keywords to be evaluated, and the imagemap needs to be
created before the keywords can be created.
2014-04-02 23:22:44 -04:00
duanemoody 298e4ae2de Add application category for OS X
The Applications folder in OS X is large and installers tend to expect apps to stay where they were placed (i.e. the root of /Applications). Since Lion, there's been application category metadata for View --> Arrange by Application Category but if the metadata's not in info.plist, the app gets sorted into "Other" at the bottom. 

https://developer.apple.com/library/Mac/releasenotes/General/SubmittingToMacAppStore/#//apple_ref/doc/uid/TP40010572-CH16-SW8 (this applies to all Mac apps, not just those installed through App Store).
2014-04-02 13:43:37 -07:00
Tom Rothamel 436f4f2c8b Document various NVL-mode config variables. 2014-04-01 23:11:48 -04:00
Tom Rothamel 4af52c43a4 Add layer selection to menu/choice and NVL.
Adds config.say_layer, config.menu_layer, and config.nvl_layer to
select layers for the various screens.
2014-04-01 22:51:50 -04:00
Tom Rothamel 984448ae4f Add a show_layer parameter to Character.
This makes it possible to choose the layer the say screen appears
on, which might be necessary for side images and so on.
2014-04-01 22:17:20 -04:00
Tom Rothamel 7cae393d72 Fix a style-related memory leak.
When unbuilding styles, we would deallocate the cache, but not XDECREF
the contents of the cache, leading to a crash. This fixes the problem.
2014-03-31 23:05:34 -04:00
Tom Rothamel 667676f55b Fix memory leaks on reload.
The big fix was to de-init the draw module before deallocating it,
which is what frees up textures. There are a lot of smaller fixes
here as well.
2014-03-30 16:13:12 -04:00
Tom Rothamel 2ff748c5e1 Re-initalize modules rather than reloading them entirely.
This prevents memory leaks through reloaded modules, and should
make reload faster. (It doesn't eliminate all memory leaks,
however.)
2014-03-29 23:52:33 -04:00
Tom Rothamel 65513fb8d7 Make the layout functions (Fixed, VBox, Hbox, and Grid) pickleable.
The Displayables were, but the constructor functions weren't.
This fixes that by turning the functions into classes.
2014-03-29 23:51:28 -04:00
Tom Rothamel 992d9ca419 Fix prediction of windows and bars.
The style rewrite prevented direct access to prefixed styles,
which caused prediction not to work. With this change, we
handle the prediction in cython, which has access to
prefixed and unprefixed styles.
2014-03-28 21:46:39 -04:00
Tom Rothamel bc02b71c76 Reset the styles before reloading. 2014-03-27 22:29:49 -07:00
javimat 01cccefcc1 Update common.rpy 2014-03-27 23:51:41 +01:00
javimat c2e71a4b31 Update new_project.rpy 2014-03-27 23:48:03 +01:00
javimat f86b91f29a Update common.rpy 2014-03-27 23:43:43 +01:00
javimat 7836e58608 Update common.rpy 2014-03-27 23:40:30 +01:00
javimat eddab9a802 Update screens.rpy
Simplifying comments (deleting the English ones).
Changing to the new style language.
2014-03-27 23:39:00 +01:00
Tom Rothamel f6fa2d391f sl2: Add the default statement. 2014-03-26 22:41:29 -04:00
Tom Rothamel e119633cc6 Implement the pass statement. 2014-03-25 23:51:59 -04:00
Tom Rothamel aa9a2461cc Add set_projects_directory and get_projects_directory commands.
These let users set the projects directory from the command line,
which is useful if they don't have python-tkinter installed.
2014-03-25 19:04:15 -04:00
Tom Rothamel 71555a229e sl2: Parse multi-line Python statements. 2014-03-24 23:31:20 -04:00
Tom Rothamel 3b009de99c sl2: Parse one-line python statements. 2014-03-24 23:15:19 -04:00
Tom Rothamel 92b00df7af sl2: Improve sl2.
Largely, got the code written yesterday working.
2014-03-24 22:19:17 -04:00
Tom Rothamel bbf671555f sl2: Untested implementation of the for statement. 2014-03-24 00:03:27 -04:00
Tom Rothamel 929a1e916e If a non-existent screen is loaded, replace its contents with Null.
This can happen with some game changes, especially when changing
config.developer = True to False. Rather than crashing in this
case, we display an empty screen.

Fixes #320.
2014-03-23 19:12:25 -04:00
Tom Rothamel e6e2761396 Process common keywords in SL2:
* style_group, with styles.
* id
* at
2014-03-22 22:12:30 -04:00
Tom Rothamel 1412429d23 Add textbutton and label to sldisplayables. 2014-03-21 17:52:35 -04:00
Tom Rothamel 6210907701 Cleanup various PyDev warnings. 2014-03-21 15:40:11 -04:00
Tom Rothamel d8c2d743bd Add more displayables to sl2. 2014-03-20 23:50:28 -04:00
Tom Rothamel 5181b90473 sl2: Implement the if statement.
As a new feature, the if statement can apply to keyword arguments
as well as other statements.
2014-03-20 01:26:52 -04:00
Tom Rothamel ed5b914c12 Share parser code between ScreenParser and DisplayableParser. 2014-03-19 22:27:11 -04:00
Tom Rothamel 9e9611be7d sl2: Finish what's needed to have a screen run SL2 code.
With this, we can display the simplest screens.
2014-03-18 23:17:11 -04:00
Tom Rothamel 967abe7bd2 sl2: Implement execute for SLBlock and SLDisplayable. 2014-03-17 20:47:09 -07:00
Tom Rothamel 0c3ce7955c sl2: Prepare SLBlocks.
This prepares keyword arguments and children.
2014-03-17 23:21:51 -04:00
Tom Rothamel 7c1a7465d5 sl2: Evaluate positional arguments.
Constant positional arguments are evaluated during a prepare phase,
while non-constant arguments are evaluated at runtime. (When a mix
of arguments is given, they are combined.)
2014-03-16 21:03:37 -07:00
Tom Rothamel ef894d3040 Note that libavresample-dev is now required. 2014-03-16 15:35:29 -04:00
Tom Rothamel 8c823cc638 sl2: Start creating an AST. 2014-03-15 23:14:58 -04:00
Tom Rothamel 0920d32457 Hook up more of the screen language parsing. 2014-03-14 23:19:54 -04:00
Tom Rothamel 5c4650bce1 Correct transition documentation. 2014-03-13 23:10:37 -04:00
Tom Rothamel 65f3e0cef9 Move sl2 into its own package, tie it to parser.
This introduces the "screen2" statement, which is a temporary way of
accessing the sl2 stuff until it's ready to take over.
2014-03-13 23:07:16 -04:00
Tom Rothamel 0835958d92 Quit if the player hits quit while we're executing a prior quit.
This is in alternative to the current behavior, which opens
multiple quit windows if the user clicks slowly.

Double-clicking quit still exits.
2014-03-12 22:18:15 -04:00
Tom Rothamel 4aae1808ed Prefer main_menu to renpy.context()._main_menu. 2014-03-11 11:09:19 -04:00
Tom Rothamel dd4d3410a6 Adjust times for children of tranformed layers.
If we don't do this, the children will be shown at the timebase
of the layer at_list, which cause huge problems if the children
themselves are being transformed.
2014-03-10 23:14:54 -04:00
Tom Rothamel 0212094b9d Make shift+R toggle autoreload.
There's also an indicator, although its look needs to be revised.
2014-03-09 20:59:43 -04:00
Tom Rothamel 1b69f5930c Protect the safe mode stuff with a try/except.
It does some wierd direct keyboard access stuff that might change
in future versions of windows or linux, so this seems like a
reasonable bit of paranoia.
2014-03-08 08:53:54 -05:00
Tom Rothamel 1be159692b On windows, use ctypes to check if we should enter safe mode.
Fixes #316. It looks like using pygame to detect keypresses on an
unmapped window is now broken, perhaps since the most recent
pygame upgrade.
2014-03-07 22:10:38 -05:00
Tom Rothamel be0c6e6262 Avoid reinitializing the pygame window on Ren'Py reload.
This provides for a smoother reload process, by avoiding the window
disappearing and reappearing, potentially changing place and causing
focus issues.
2014-03-06 23:20:22 -05:00
Tom Rothamel 0e7e9ccced Initial implementation of autoreload.
This is a feature that scans for changes in file existence and times.
If a file changes, this triggers a restart of Ren'Py, reloading the
script and game.
2014-03-05 22:16:40 -05:00
Tom Rothamel 06d9557e4d Rewrite missing images in terms of screens and styles.
This makes it possible to customize the missing image indicator,
which is useful if it conflicts with the background of the game.
2014-03-03 22:35:51 -05:00
Tom Rothamel dd150047a6 Word-like operators have to end at word boundaries.
This prevents us from parsing strings like "8 insensitive" as "8 in
sensitive", and then failing when we go to eval it.

Fixes http://lemmasoft.renai.us/forums/viewtopic.php?f=32&t=25510
2014-03-02 22:03:38 -05:00
Tom Rothamel 838c8862a5 Finish documenting the functions in renpy.exports. 2014-03-02 21:53:47 -05:00
Tom Rothamel de5c0a8d9c Keymap fixes.
* Add toggle_music back in, because creators depend on the most obscure
  parts of Ren'Py.
* Update documentation.
2014-03-01 16:45:22 -05:00
Tom Rothamel 362759fdfb Remove debug print. 2014-03-01 16:45:17 -05:00
Tom Rothamel aed9864f26 Add missing comma, fixes selected_hover_ and selected_insensitive prefixes. 2014-03-01 16:45:11 -05:00
Tom Rothamel 378d0cab7b Fix docs. 2014-03-01 10:52:35 -05:00
Tom Rothamel 11107dcbdd Always reset l.init, not only on exceptions. 2014-02-28 17:43:41 -05:00
Tom Rothamel bb711f187e Merge commit 'ecd1ccf'
Conflicts:
	renpy/__init__.py
2014-02-28 16:31:28 -05:00
Tom Rothamel ecd1ccf0e7 Minor doc fixes. 2014-02-28 16:25:14 -05:00
Tom Rothamel d89d4f4f94 Bump version. 2014-02-28 16:20:41 -05:00
Tom Rothamel cd2029e759 Add the "translate <language> style <style>:" statement.
This is a localized equivalent of the style statement.
2014-02-28 16:19:11 -05:00
Tom Rothamel c50e91e970 More error checking for projects directory. 2014-02-28 16:18:38 -05:00
Tom Rothamel d7482744e8 Fix renpy.input documentation.
Fixes #296.
2014-02-28 16:18:38 -05:00
Tom Rothamel 7cc5cfcbae Ignore arguments passed into RevertableObject.__new__.
Some versions of Python ignore them, others do not. We ignore them
ourselves to be on the safe side.
2014-02-28 16:18:38 -05:00
Tom Rothamel 918158fcae It listing directories fails, treat it as if the directory was empty. 2014-02-28 16:18:38 -05:00
Tom Rothamel 23e2f4f0a8 Document translate style. 2014-02-28 16:18:38 -05:00
Tom Rothamel 25a6ec4ce6 Update the Japanese launcher & tutorial to use translate style. 2014-02-28 16:18:38 -05:00
Tom Rothamel 96351b039c More error checking for projects directory. 2014-02-28 16:17:01 -05:00
Tom Rothamel bcfc7d1d89 Fix renpy.input documentation.
Fixes #296.
2014-02-27 21:22:47 -05:00
Tom Rothamel e33bb7a3ae Ignore arguments passed into RevertableObject.__new__.
Some versions of Python ignore them, others do not. We ignore them
ourselves to be on the safe side.
2014-02-27 19:52:07 -05:00
Tom Rothamel 924da674c6 It listing directories fails, treat it as if the directory was empty. 2014-02-26 23:10:43 -05:00
Tom Rothamel 8e58ce8617 Document translate style. 2014-02-26 22:43:36 -05:00
Tom Rothamel 6274355089 Update the Japanese launcher & tutorial to use translate style. 2014-02-26 22:13:17 -05:00
Tom Rothamel 13d74b8d56 Add the "translate <language> style <style>:" statement.
This is a localized equivalent of the style statement.
2014-02-26 22:12:35 -05:00
Tom Rothamel 8f1ec59948 Expand is_constant to encompass names. 2014-02-25 21:58:39 -05:00
Tom Rothamel fccef8c639 Re-update version. 2014-02-25 20:31:59 -05:00
Tom Rothamel 0c04e5e861 There's no need to add RAPT anymore. 2014-02-24 23:13:05 -05:00
Tom Rothamel 6f328c8984 Version 6.17.1. 2014-02-24 22:30:23 -05:00
Tom Rothamel 61d2ad2202 I18n fixes and translatable console.
Merge remote-tracking branch 'origin/system-translations' into maintenance/6.17
2014-02-24 22:23:10 -05:00
Tom Rothamel 93acff591f Use double colons to show code correctly.
Merge remote-tracking branch 'origin/doc-doublecolon' into maintenance/6.17
2014-02-24 22:22:34 -05:00
Tom Rothamel 314446cffd We don't have a key if local.properties is missing. 2014-02-24 22:21:08 -05:00
Koichi Akabe e5186a7d63 Update Japanese translation for console 2014-02-24 16:40:21 +09:00
Koichi Akabe aaba96b31e Make console translatable 2014-02-24 16:40:01 +09:00
Koichi Akabe ca1f9855fa Use __() to show translated texts of the position picker 2014-02-24 16:39:49 +09:00
Koichi Akabe 3c6eb040f8 use double colons to show codes correctly 2014-02-24 14:28:40 +09:00
Tom Rothamel 856a99c3f2 Merge branch 'maintenance/6.17' 2014-02-23 23:52:01 -05:00
Tom Rothamel 959434f404 Safely list directories outside the Ren'Py base directory.
Directories in the projects directory might contain filenames
that aren't representable in the system encoding. We now
ignore these directories, rather than throwing an exception.
2014-02-23 23:41:17 -05:00
Tom Rothamel 435ef3f5b6 Documentation updates. 2014-02-23 22:47:37 -05:00
Tom Rothamel e5d39cf4de Make single_track and shuffle exclusive of each other.
Merge remote-tracking branch 'kyouryuukunn/musicroom' into maintenance/6.17
2014-02-23 21:57:04 -05:00
Tom Rothamel c03fa98992 Merge branch 'maintenance/6.17' 2014-02-22 22:36:03 -05:00
Tom Rothamel 195d3eb8e2 Add documentation of show layer.
Merge remote-tracking branch 'kyouryuukunn/show_layer' into maintenance/6.17
2014-02-22 22:35:26 -05:00
kyouryuukunn f6a2e7ed1f Document about show layer 2014-02-23 12:16:02 +09:00
kyouryuukunn cb3bc2341f update japanese 2014-02-22 22:02:54 -05:00
kyouryuukunn dcc38c3ab6 update japanese 2014-02-22 22:02:43 -05:00
kyouryuukunn d37188abfe Merge pull request #305 from kyouryuukunn/update_japanese
Update Japanese translation
2014-02-23 11:59:40 +09:00
kyouryuukunn b97ec70769 update japanese 2014-02-23 11:55:26 +09:00
kyouryuukunn aaec19d784 update japanese 2014-02-23 11:53:21 +09:00
Tom Rothamel c44ef66bcb Ensure the projects directory is valid before using it.
See #304.
2014-02-22 18:34:31 -05:00
Tom Rothamel 104e46bb45 Ensure the projects directory is valid before using it.
See #304.
2014-02-22 18:33:45 -05:00
kyouryuukunn 4da70a637c Change single_track and shuffle exclusive 2014-02-22 16:00:36 +09:00
Tom Rothamel e10325aa7d Write function that determines if a python expression is constant.
This will be improved as incremental screen language work
continues, but this is a start.
2014-02-22 01:18:46 -05:00
Tom Rothamel c0f4395a53 Bump version. 2014-02-21 21:56:44 -05:00
Tom Rothamel fd6f59e39a Fix typos. 2014-02-20 23:41:12 -05:00
Tom Rothamel de69ac7843 Update changelog. 2014-02-19 02:02:25 -05:00
Tom Rothamel a6174993d1 Merge pull request #297 from renpy/fix-doc
fix doc error ("width" -> "height" in ysize description)
2014-02-18 22:58:46 -05:00
Koichi Akabe d263552a79 fix doc error ("width" -> "height" in ysize description) 2014-02-18 17:15:41 +09:00
Tom Rothamel e67f671fe6 Fsdecode tail output.
This is stdout for the android tools, which is likely to be encoded
using the local encoding, at least when filenames are involved.
2014-02-17 21:29:58 -05:00
Tom Rothamel bee097f3cd Document store variables. 2014-02-16 16:06:53 -05:00
Tom Rothamel 61c2fc4e49 Revert "Return to the main menu on right click from load, save, prefs, etc."
This reverts commit 5bff9be02c.
2014-02-15 22:38:55 -05:00
Tom Rothamel 6f7398e4ae Improve prediction of side images. 2014-02-15 01:11:22 -05:00
Tom Rothamel 5f1e49978b Properly update the prediction info.
This lets us predict more than one image.
2014-02-15 00:22:59 -05:00
Tom Rothamel 564a82c187 Do not call missing_show during image prediction. 2014-02-14 23:41:00 -05:00
Tom Rothamel ea2243ea86 Predict partial image specifications.
Fixes #293.
2014-02-14 00:49:59 -05:00
Tom Rothamel 4be828ede3 A character should only stop skipping if it causes an interaction.
Fixes #294.
2014-02-13 23:08:10 -05:00
Tom Rothamel 88e14a14d8 Pass the results of a UserStatement predict to the predicition code.
Fixes #292.
2014-02-12 21:52:22 -05:00
Tom Rothamel b583d53f61 Document window auto. 2014-02-11 19:14:27 -05:00
Tom Rothamel fa79703f09 Implement window auto. 2014-02-10 23:29:21 -05:00
Tom Rothamel e122d22ef8 Add config.statement_callbacks.
These are functions that are called at the start of each statement,
with the statement name.
2014-02-10 23:24:56 -05:00
Tom Rothamel 34c070d37b Factor the window statements out into their own file, and
move the guts of _window_show and _window_hide into
functions.
2014-02-10 20:14:37 -05:00
Tom Rothamel b9c5f2f988 Rename window_during_transitions to show_empty_window.
We were already using window_during_transitions for an obsolete
function, and the preference controls all versions of this, rather
than just during transitions.
2014-02-09 21:21:31 -05:00
Tom Rothamel adb4ab80db Merge pull request #290 from vbkaisetsu/template-ja-translation
update Japanese translation of template
2014-02-09 11:12:02 -05:00
Tom Rothamel b55e36853e Update and fix documentation. 2014-02-08 18:21:10 -05:00
Koichi Akabe 46c547a9b0 update Japanese translation of template 2014-02-08 16:43:21 +09:00
Tom Rothamel 6c753a4a09 Remove window auto, adjust semantics of window during transitions.
This is separating the two functions out, since window during
transitions is useful with window show/window hide, and the
auto function should probably trigger window show/window hide.
2014-02-08 00:08:52 -05:00
kyouryuukunn 88417761ee Add Preference window during transitions 2014-02-07 23:31:08 -05:00
Tom Rothamel 5bff9be02c Return to the main menu on right click from load, save, prefs, etc.
Alternative implementation of #289.
2014-02-06 23:31:21 -05:00
Tom Rothamel de4c50bb2a Update changelog. 2014-02-05 22:16:20 -05:00
Tom Rothamel 5895fbcced The focus_mask style property can now as an argument a callable.
If the callable returns true, the displayable should be focused.
This lets us avoid an RTT.
2014-02-05 22:12:33 -05:00
Tom Rothamel 5fc7f32b5a Add new keywords to screenlang and sphinx. 2014-02-05 22:09:34 -05:00
Tom Rothamel a30500d665 Fix spanish translation. 2014-02-05 06:08:26 -05:00
Tom Rothamel 9cd9e126a2 Merge pull request #287 from javimat/master
Update Spanish translation
2014-02-04 16:56:18 -08:00
Tom Rothamel 6d7da4f882 Report an error if an imagebutton can't find its idle image. 2014-02-04 19:53:46 -05:00
Tom Rothamel bffa96a344 Use the unexpanded size of text when checking for overflows.
Fixes #286.
2014-02-03 19:49:51 -05:00
javimat 393df20e44 Update common.rpy 2014-02-03 10:09:03 +01:00
javimat 6acf2605bb Update common.rpy 2014-02-03 10:06:42 +01:00
javimat bd1524c362 Update common.rpy 2014-02-03 09:57:58 +01:00
javimat d9db6cc96a Update project.rpy 2014-02-03 09:49:55 +01:00
javimat 1f004edc6a Update distribute.rpy 2014-02-03 09:49:25 +01:00
javimat d6b9ea81de Update common.rpy 2014-02-03 09:48:55 +01:00
javimat d869f67126 Update common.rpy 2014-02-03 09:48:13 +01:00
javimat 92630baa6e Update options.rpy 2014-02-03 09:46:06 +01:00
Tom Rothamel e8adc17543 Make the fonts used by A White Tulip customizable. 2014-02-02 15:11:09 -05:00
Tom Rothamel d72a03aeb4 Add xsize, ysize, and xysize style properties.
These allow users to directly set the size of resizable
displayables.

The names are chosen so they don't conflict with height, width, and
size, which are already in use.
2014-02-01 17:33:26 -05:00
Tom Rothamel f5e75a7c4c Set the default template to english.
This fixes a bug that occurs when no template is selected.
2014-01-31 16:50:33 -05:00
Tom Rothamel 2aa92d02d3 Backup launcher styles (in Russian translation). 2014-01-31 16:37:36 -05:00
Tom Rothamel b04e511767 Fix location of logo. 2014-01-31 16:33:47 -05:00
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
Tom Rothamel 1a19c95b60 Bump version to 6.17.0. 2013-11-30 12:13:15 -05:00
Tom Rothamel 2269a3a70c Remove unneeded warnings. 2013-11-29 16:19:09 -05:00
Tom Rothamel afa4d561c6 Bump version. 2013-11-29 15:45:31 -05:00
Tom Rothamel b0524459b6 Generate script_version.rpy. 2013-11-29 15:43:05 -05:00
Tom Rothamel 5142810101 Open the android.txt log file in an editor when an Android build fails. 2013-11-28 10:04:17 -05:00
Tom Rothamel 365544d62f Classify the new Android files. 2013-11-28 00:29:34 -05:00
Tom Rothamel 3e77dafbc7 Document the image files used in Android packaging. 2013-11-28 00:26:42 -05:00
Tom Rothamel ec45a88c61 Only write documentation if changed.
This might lead to a slight speedup in sphinx, which seems to cache
unchanged files.
2013-11-25 22:32:56 -05:00
Tom Rothamel 9c6b3ca4d0 Add menu docs. 2013-11-25 22:32:49 -05:00
Tom Rothamel d4eefdc3ab Document renpy.display_menu as a statement equivalent. 2013-11-25 22:24:30 -05:00
Tom Rothamel 2771c25f37 Clean up unused textures.
This limits how much texture memory Ren'Py can use. (Previously,
texture memory was limited, but to an impractically large size.)
2013-11-24 20:33:51 -05:00
Tom Rothamel 46137dd7cf Use a set of texture numbers, rather than a list.
This makes it easier to deallocate textures, an eventual goal.
2013-11-23 18:20:04 -05:00
Tom Rothamel 006efeb15f Document renpy.transition. 2013-11-23 00:19:40 -05:00
Tom Rothamel 3b18174c8c Fix typo. 2013-11-21 21:54:00 -05:00
Tom Rothamel e50f3147a9 Bump version to 6.16.2. 2013-11-21 21:38:08 -05:00
Tom Rothamel 145b33bd3d Update changelog for 6.16.2. 2013-11-21 21:30:40 -05:00
Tom Rothamel edc5b84082 Merge pull request #248 from javimat/master
Fixed pseudo-typo in Spanish options.rpy
2013-11-21 18:16:01 -08:00
javimat d99c52614c Spanish translation of the comments in screens.rpy 2013-11-21 17:03:41 +01:00
javimat 39e626cca3 Fix pseudo-typo options.rpy
The new Spanish grammar (2009-2011) doesn't allows a tilde in the adverb 'solo'.
2013-11-21 15:38:35 +01:00
javimat cf848e8d2f Merge pull request #2 from renpy/master
updating my fork
2013-11-21 06:29:58 -08:00
Tom Rothamel 0a6f6ae8d3 Merge pull request #247 from LuqueDaniel/master
Update Spanish translation.
2013-11-21 06:04:02 -08:00
Daniel Luque fde580d67d Update translation: templates/spanish/README.html. 2013-11-21 13:37:20 +01:00
Daniel Luque dde4c3fee3 Now templates/spanish/README.html uses utf-8.
Add label meta charset with utf-8.

Replaces "&oacute;" --> "ó"
Replaces "&aacute;" --> "á"
Replaces "&uacute;" --> "ú"
Replaces "&iacute;" --> "í"
2013-11-21 13:21:43 +01:00
Daniel Luque 461d1a2ef5 Fix typo. 2013-11-21 12:52:35 +01:00
Tom Rothamel 28ccb37b58 Merge pull request #245 from kyouryuukunn/fix_document
fix doc
2013-11-20 21:02:30 -08:00
kyouryuukunn e36908d9e5 fix doc 2013-11-21 13:58:10 +09:00
Tom Rothamel 63c94e7987 Allow interface.error() to work when label=None.
Fixes #230.
2013-11-20 23:47:32 -05:00
Tom Rothamel 41767642f4 Fix a weird case in parse error handling. 2013-11-20 23:31:50 -05:00
Tom Rothamel e33987183a Fix various minor problems with the quickstart doc.
Fixes #225.
2013-11-20 23:28:36 -05:00
Tom Rothamel 32c4029b4b Merge pull request #244 from javimat/master
Translate comments in Spanish template (and some typos)
2013-11-20 18:10:50 -08:00
javimat fec8125ae3 Fix Spanish comments on options.rpy 2013-11-21 02:19:16 +01:00
javimat c368a70d0b Translate comments on options.rpy 2013-11-21 02:14:40 +01:00
javimat 70a3a3c454 Fix typo 2013-11-21 01:14:02 +01:00
javimat 17d4933ff6 Translate comments on script.rpy 2013-11-21 01:08:24 +01:00
javimat 774cb588d1 Update screens.rpy 2013-11-21 01:04:50 +01:00
javimat 1e68f0e583 Fix typo: renpy.music.register_channel 2013-11-21 01:00:49 +01:00
javimat e911f5a2d0 More translation of the comments in options.rpy 2013-11-21 00:49:29 +01:00
javimat abd473a384 Traduciendo options.rpy 2013-11-21 00:09:34 +01:00
javimat 43143e69eb Update screens.rpy 2013-11-20 23:42:03 +01:00
javimat 43f6c19b1e Merge pull request #1 from renpy/master
Updating my fork
2013-11-20 14:35:26 -08:00
javimat 2e97d84c5b Update screens.rpy 2013-11-20 19:04:11 +01:00
javimat 6132dde743 Update options.rpy 2013-11-20 19:03:24 +01:00
javimat 613f7c0511 Update options.rpy 2013-11-20 18:53:52 +01:00
javimat 572c829179 Using PROJECT_NAME
Changed:
config.window_title = u"PROJECT_NAME"
config.name = "PROJECT_NAME"
in lines 38 and 45
2013-11-20 11:03:36 +01:00
javimat 533b969d5c Using PROJECT_NAME
Changed:
config.window_title = u"PROJECT_NAME"
config.name = "PROJECT_NAME"
in lines 26 and 30
2013-11-20 11:01:26 +01:00
javimat 177b0c0bde config.name = "PROJECT_NAME"
Changed:
config.window_title = u"PROJECT_NAME"
config.name = "PROJECT_NAME"
in lines 26 and 30
2013-11-20 10:59:22 +01:00
Tom Rothamel dde25cfcc7 Fix typo. 2013-11-19 23:13:37 -05:00
Daniel Luque 85e86fe406 Merge pull request #242 from LuqueDaniel/update-sp-translation
Update Spanish translation.
2013-11-19 05:31:43 -08:00
Daniel Luque abaf4056dd Replaced 'Abrir' and 'Grabar'. I think it's better to use 'Cargar' and 'Guardar 2013-11-19 14:19:45 +01:00
Daniel Luque 32a0e92b69 Replaced 'incluye' -> 'incluir': launcher/game/tl/spanish/preferences.rpy 2013-11-19 13:55:28 +01:00
Tom Rothamel 7d4a1d7532 Merge pull request #241 from javimat/patch-1
Update updater.rpy
2013-11-18 08:40:32 -08:00
javimat 9031bf8100 Update updater.rpy
Two typos corrected.
2013-11-18 17:39:10 +01:00
Tom Rothamel 8c4b21ad62 Merge pull request #239 from javimat/patch-1
Update distribute.rpy
2013-11-18 08:01:37 -08:00
Tom Rothamel 8e21344356 Merge pull request #240 from vbkaisetsu/launcher-ja
update Japanese translation of launcher
2013-11-18 08:01:22 -08:00
javimat b3620191d8 Update distribute.rpy 2013-11-18 13:14:42 +01:00
javimat 8ecdef81c9 Update distribute.rpy 2013-11-18 12:20:21 +01:00
Tom Rothamel 43db399352 Merge pull request #237 from LuqueDaniel/translation-no-jdk
Added Spanish translation.
2013-11-17 06:07:19 -08:00
Daniel Luque 798dd075ba Added translation for: launcher/game/android.rpy:13 2013-11-17 14:12:51 +01:00
Daniel Luque 6794e5fa36 Updated line number: launcher/game/tl/spanish/android.rpy 2013-11-17 14:01:26 +01:00
Koichi Akabe 799716565c update Japanese translation of launcher 2013-11-17 11:22:45 +09:00
Tom Rothamel de15d2045f Merge pull request #226 from javimat/master
Spanish template
2013-11-16 17:37:13 -08:00
Tom Rothamel 219767251c Merge pull request #227 from LuqueDaniel/master
Ren'Py Launcher translated into Spanish, based on Japanese translation.
2013-11-16 17:29:59 -08:00
Tom Rothamel 5272af0b06 Require a 32-bit JDK on windows. Warn the creator if it doesn't exist. 2013-11-16 19:40:15 -05:00
Tom Rothamel 2325691fcb Fix newest_slot when regexp=None.
Forgot to check for this case.
2013-11-16 00:43:47 -05:00
Tom Rothamel 2f072f4a26 Save improvements.
* Do not cycle saves if the user says no to quicksave.
* Rescan immediately after a save.
* Ensure scan_saved_game always returns a valid result.

Fixes #236, hopefully.
2013-11-16 00:40:42 -05:00
kyouryuukunn e57842386c fix doc 2013-11-14 14:37:33 +09:00
Tom Rothamel 09d682cd23 Merge pull request #229 from kyouryuukunn/get_mouse_pos
add renpy.get_mouse_pos()
2013-11-13 20:11:33 -08: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
Tom Rothamel b38551eef8 Fix fast skipping. 2013-11-12 18:49:31 -05:00
kyouryuukunn 79cf7df614 add renpy.get_mouse_pos() 2013-11-13 02:15:25 +09:00
Daniel Luque e2eecee1d8 Added translation for game/front_page.rpy:122 2013-11-12 13:11:37 +01:00
Daniel Luque 2d51144c43 Added translation for game/preferences.rpy:146 2013-11-12 13:08:19 +01:00
Daniel Luque d4565981b1 Fix typo /launcher/game/tl/spanish/updater.rpy 2013-11-12 12:55:13 +01:00
Daniel Luque e0ffeeea2a Fix typo /launcher/game/tl/spanish/translations.rpy 2013-11-12 12:49:36 +01:00
Daniel Luque a8e83dc58c Fix typo /launcher/game/tl/spanish/project.rpy 2013-11-12 12:47:13 +01:00
Daniel Luque ea6666185a Fix typo /launcher/game/tl/spanish/preferences.rpy 2013-11-12 12:41:43 +01:00
Daniel Luque efe70fad93 Fix typo /launcher/game/tl/spanish/new_project.rpy 2013-11-12 12:39:01 +01:00
Daniel Luque f4fec843e1 Fix typo /launcher/game/tl/spanish/navigation.rpy 2013-11-12 12:33:26 +01:00
Daniel Luque fadbe0e226 Fix typo /launcher/game/tl/spanish/interface.rpy 2013-11-12 12:30:39 +01:00
Daniel Luque 69068c8720 Fix typo /launcher/game/tl/spanish/editor.rpy 2013-11-12 12:23:30 +01:00
Daniel Luque f7960006cc Fix typo /launcher/game/tl/spanish/distribute_gui.rpy 2013-11-12 12:14:28 +01:00
Daniel Luque fb214d9ab8 Translation changed /launcher/game/tl/spanish/android.rpy 2013-11-12 12:07:48 +01:00
Daniel Luque d5d68632e7 Fix typo /launcher/game/tl/spanish/android.rpy 2013-11-12 12:03:08 +01:00
Daniel Luque b5ec036687 Fix typo /launcher/game/tl/spanish/add_file.rpy 2013-11-12 11:31:55 +01:00
Tom Rothamel 3e1a5c18a9 Make string translatable. 2013-11-11 22:56:15 -05:00
Tom Rothamel b480580399 Templates can now be seen in the launcher.
This means that it will be possible to use "Generate Translations" to
update a template when Ren'Py changes.
2013-11-11 22:50:22 -05:00
Tom Rothamel 2822624e85 Decode TODO lines.
This allows for non-ASCII TODO lines.
2013-11-11 21:37:21 -05:00
javimat 205019a769 Create README.html 2013-11-11 15:18:22 +01:00
javimat 3d935e164d Create project.json 2013-11-11 15:17:46 +01:00
javimat 915fc5d6d8 Create script.rpy 2013-11-11 15:17:11 +01:00
javimat 3b60108c7a Create screens.rpy 2013-11-11 15:16:30 +01:00
javimat c624331af5 Create options.rpy 2013-11-11 15:15:56 +01:00
javimat 1e096ec479 Create screens.rpy 2013-11-11 15:14:54 +01:00
javimat d9ba99962c Create common.rpy 2013-11-11 15:13:47 +01:00
Daniel Luque 6e3cd02fdc Ren'Py Launcher translated into Spanish, based on Japanese translation. 2013-11-11 15:08:32 +01:00
Tom Rothamel 98520d6d74 Various changes to make nightly builds possible. 2013-11-10 23:57:33 -05:00
Tom Rothamel 5085b1300b Fsencode the path to the update directory.
This should help make the updater work on non-ASCII systems.
2013-11-09 22:12:41 -05:00
Tom Rothamel 88275fa716 Use correct variable to access preferences.
Fixes a bug when config.default_language is set.
2013-11-09 14:53:53 -05:00
Tom Rothamel ce752343ca Document that video playback is supported on Android. 2013-11-09 12:36:39 -05:00
Tom Rothamel f74fb6ab29 Merge pull request #224 from DragoonHP/patch-1
Fix Doc
2013-11-09 06:36:28 -08:00
DragoonHP 7b185e022a Fix Doc 2013-11-09 10:47:39 +05:30
Tom Rothamel f9523a63f3 Use renpy.sh to generate documentation includes. 2013-11-08 20:51:36 -05:00
Tom Rothamel 524d9a77a2 Change the command line we use to run Ren'Py on Linux/Mac.
We remove one -O from the python command line. This prevents python
from removing docstrings, which means we can now use renpy.sh to
generate the documentation includes.
2013-11-08 20:49:22 -05:00
Tom Rothamel 7362261469 Ensure the environment contains only encoded strings.
Fixes #222.
2013-11-08 20:42:46 -05: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
Tom Rothamel f95ff022d4 Allow the title of the input prompt to be translated.
Fixes #221.
2013-11-07 18:02:25 -05:00
Tom Rothamel 25661cf69e Bump version to 6.16.1. 2013-11-07 17:41:45 -05:00
Tom Rothamel c2cb614750 Flag a string as translatable.
This doesn't have any actual effect, but makes the code read
better. That's because "Test" is already translated in a bunch
of other places.
2013-11-06 21:50:10 -05:00
Tom Rothamel e326c8d66e Document rare problems that can be worked around. 2013-11-06 21:30:22 -05:00
Tom Rothamel 030edbd5d8 Check in generated file. 2013-11-05 23:04:55 -05:00
Tom Rothamel 4bab0874b7 Document some functions. 2013-11-05 23:04:24 -05:00
Tom Rothamel 26b5b3a315 Update generated documentation. 2013-11-04 22:33:56 -05:00
Tom Rothamel bc94ee0cfa Use the build mechanism to build android distributions.
This allows creators to use build.classify to exclude files from
an Android distribution, or specify that files are Android-only.
2013-11-04 22:13:12 -05:00
Tom Rothamel a7aba0642b Do not fail if a module import can't be decoded as utf-8. 2013-11-03 21:04:26 -05:00
Tom Rothamel 956b9aff4a Merge pull request #218 from kyouryuukunn/fix_doc4
Fix doc4
2013-11-03 16:23:38 -08:00
kyouryuukunn 25bea3444f fix doc 2013-11-04 08:55:01 +09:00
kyouryuukunn 71ea4caeb9 fix doc 2013-11-04 08:46:33 +09:00
Tom Rothamel 9d354bfcf9 Merge pull request #216 from kyouryuukunn/fix_doc4
fix doc
2013-11-03 15:41:20 -08:00
kyouryuukunn b548b851ce fix doc 2013-11-04 08:37:20 +09:00
Tom Rothamel 6d2faf0d02 Fix typo.
Thanks to xavimat for the report.
2013-11-03 10:19:59 -05:00
Tom Rothamel 154c9f9d4a Merge pull request #214 from vbkaisetsu/fix-typo
fix typo
2013-11-03 07:11:15 -08:00
Koichi Akabe 579701cd30 fix typo 2013-11-03 23:53:33 +09:00
Tom Rothamel aacbd640e0 Support for building an android-suitable distribution.
This is the first step in using the build system to select the files
that will be included in an Android package.
2013-11-03 09:12:51 -05:00
Tom Rothamel 01e8296661 Add android package build information. 2013-11-02 23:45:19 -04:00
Tom Rothamel 32f2fc8126 Properly generate options.rpy for the japanese template.
The japanese template includes the build stuff, which also needs
to be updated when it's used to create a game.
2013-11-02 22:46:10 -04:00
Tom Rothamel 076e342f65 Fix a deadlock.
When the auto-save thread kicked off at the end of the game, it could
sit there waiting for a screenshot that would never be taken. This
fixes that, both by taking the screenshot and adding timeouts
that should prevent eternal pauses.
2013-11-02 21:59:24 -04:00
Tom Rothamel b186a703e2 Deal with symlinks leading to renpy.sh. 2013-11-01 18:11:08 -04:00
Tom Rothamel c9bfd1e377 Merge pull request #212 from vbkaisetsu/fix-typo-n-style
fix typos and style
2013-11-01 11:33:12 -07:00
Koichi Akabe 3365a073cb fix typos and style 2013-11-01 14:10:29 +09:00
Tom Rothamel 33e615bbf2 More use of templates directory. 2013-10-31 23:22:57 -04:00
Tom Rothamel a1adafa600 Merge pull request #211 from kyouryuukunn/update_translation2
update translation
2013-10-31 20:16:39 -07:00
kyouryuukunn 153d435571 update translation 2013-11-01 12:11:10 +09:00
Tom Rothamel 6a8ad2e80c Update the changelog to reflect the new translations. 2013-10-31 23:05:34 -04:00
Tom Rothamel 1395aba079 Minor editing of Japanese template. 2013-10-31 22:51:03 -04:00
Tom Rothamel 54e89492f3 Change the template selection message. 2013-10-31 22:32:22 -04:00
Tom Rothamel a69bb2edfa Fix after_checkout.sh. 2013-10-31 22:17:58 -04:00
Tom Rothamel b4b5a5fa59 Update console.bat, which provides a quick hacky way to run Ren'Py
in the windows console.
2013-10-31 22:15:17 -04:00
Tom Rothamel 389f3de5f4 Update .gitignore. 2013-10-31 22:14:59 -04:00
Tom Rothamel d457b345d7 Remove unused code from distribute.py. 2013-10-31 22:11:08 -04:00
Tom Rothamel ace21dca93 Generate the correct file. 2013-10-31 22:07:48 -04:00
Tom Rothamel 6d72e96bc2 Move the templates into the templates directory. 2013-10-31 22:03:40 -04:00
Tom Rothamel f4f6cd1215 Merge pull request #209 from kyouryuukunn/add_template-jp
add template-jp
2013-10-31 17:56:32 -07:00
Tom Rothamel 7de6e764a5 Merge pull request #208 from kyouryuukunn/update_translation
Update japanese translation
2013-10-31 17:56:15 -07:00
kyouryuukunn 4c9a56de23 Also translate screens.rpy 2013-11-01 09:27:43 +09:00
kyouryuukunn e54a18e4ad fix Japanese translation 2013-11-01 08:24:37 +09:00
kyouryuukunn 4183e60fc7 fix Japanese translation 2013-11-01 08:22:07 +09:00
kyouryuukunn b25d19509c use None language 2013-10-31 23:29:58 +09:00
kyouryuukunn d6c1444432 fix README.html in template-jp 2013-10-31 23:23:17 +09:00
kyouryuukunn edd1222e0e Update japanese translation 2013-10-31 22:08:59 +09:00
kyouryuukunn c0106e8bee add template-jp 2013-10-31 21:50:03 +09:00
Tom Rothamel 99be725ede Copy MTLc3m into the launcher directory.
It's possible to have the launcher without the tutorial or vice versa,
and some Linux distros package Ren'Py in this way. Copying the font
file ensures we work in this case.

This will increase the size of the zip file, but probably not of
the 7z or tar.bz2.
2013-10-31 07:54:44 -04:00
Tom Rothamel b0d04c3eac Remove executable bit from non-executable files. 2013-10-31 07:42:16 -04:00
Tom Rothamel b463732c42 Merge pull request #206 from kyouryuukunn/allow_translate_lancher
add the japanese translation for launcher
2013-10-31 04:39:41 -07:00
kyouryuukunn 5827121db5 fix 2013-10-31 17:04:19 +09:00
kyouryuukunn 7994a28363 remove #TODO from translation files 2013-10-31 16:56:04 +09:00
kyouryuukunn f6a9cb92b2 add make_style_backup in japanese/style.rpy 2013-10-31 13:10:01 +09:00
Tom Rothamel 446a6a640f Add the make_style_backup function, which needs to be
called from translations.

This ensures that we preserve the translation styles when
updating the theme.
2013-10-30 23:04:11 -04:00
Tom Rothamel 570a85e472 Change the default default_afm_time.
This makes the default behavior the one that's been used in all
quick_menu based games.
2013-10-30 21:53:32 -04:00
Tom Rothamel f1f6c84758 Merge pull request #204 from kyouryuukunn/change_options
Change options.rpy.
2013-10-30 17:44:51 -07:00
Tom Rothamel 3acf232631 Merge pull request #205 from vbkaisetsu/free-font
Replace mikachan with Motoya L cedar.

Fixes #186.
2013-10-30 16:43:07 -07:00
Tom Rothamel 0a2a2b35fe Merge pull request #200 from kyouryuukunn/enable_translation
Enable translation of  editor information in the launcher.
2013-10-29 19:51:36 -07:00
Tom Rothamel 0eedc523bb Allow the None language to have translations generated.
When we get "None" as the name of the language to generate translation
for, we generate it for the None language. We only generate string
translations, as that's the only thing that makes sense to translate
in the None language.

Fixes #203.
2013-10-29 22:37:42 -04:00
Koichi Akabe 5f59f4e126 remove mikachan license 2013-10-29 20:56:59 +09:00
kyouryuukunn 9d6f1e5110 add some transition configs to options.rpy 2013-10-29 20:39:59 +09:00
kyouryuukunn fc653f265c move default_afm_time and default_afm_enable from screens.rpy to options.rpy 2013-10-29 20:33:46 +09:00
Koichi Akabe 0f32739675 replace mikachan and vl-gothic with motoya 2013-10-29 19:11:05 +09:00
kyouryuukunn a333bcdc44 add the japanese translation for lancher 2013-10-29 18:14:59 +09:00
Tom Rothamel 3c3be23f1f Fix typo. 2013-10-28 23:52:33 -04:00
Tom Rothamel 6b91fb9847 Fix incorrect variable name. 2013-10-28 10:58:27 -04:00
Tom Rothamel 2219e4aebf Add missing comma. 2013-10-27 22:19:01 -04:00
Tom Rothamel 97b9c02aa8 Explicity document translate None.
This can be used to translate the interface when a game is
not originally written in English.
2013-10-27 22:07:39 -04:00
Tom Rothamel 864c959b4d List the new documentation pages, so people can find them. 2013-10-27 21:56:48 -04:00
Tom Rothamel 1a873b2d6a Re-organize file access functions. 2013-10-27 21:48:05 -04:00
Tom Rothamel e3d20823ae Document character callbacks.
Hey, that gets rid of the last long-standing warning in the
documentation build process. Bully!
2013-10-27 21:35:18 -04:00
Tom Rothamel 069b679e7d Move some things around in documentation. 2013-10-27 21:09:43 -04:00
Tom Rothamel 82b28baf87 Document conditional statements. 2013-10-27 21:03:52 -04:00
Tom Rothamel ffc150e569 Document the python statements. 2013-10-27 20:22:59 -04:00
Tom Rothamel 7bb1b85b66 Actually fix the doc warnings. 2013-10-27 20:22:21 -04:00
Tom Rothamel 827f597e07 Fix various doc errors/warnings. 2013-10-27 19:01:45 -04:00
Tom Rothamel b3f5e0c964 Generate an index of reserved names. 2013-10-27 18:45:10 -04:00
Tom Rothamel 3dec76ecf4 Remove linux-isms from doc build scripts. 2013-10-27 18:03:36 -04:00
Tom Rothamel 897caf7abc Edit environment variable documentation. 2013-10-27 18:00:12 -04:00
Tom Rothamel 0cac58e4a0 Edit keymap documentation. 2013-10-27 17:48:06 -04:00
Tom Rothamel cce422709b Check in source.
* Check in generated inc files.
* Fix permissions on .rst files.
2013-10-27 17:24:46 -04:00
Tom Rothamel b4d68fdb85 Document creator-defined statements.
Starting with the previous documentation, edited it, and
moved the various functions used into the public Ren'Py
API.
2013-10-27 17:18:29 -04:00
Tom Rothamel 1acf4e1243 Merge pull request #189 from kyouryuukunn/add_doc3
Add doc3
2013-10-27 08:22:23 -07:00
Tom Rothamel bb53094f66 Merge pull request #193 from kyouryuukunn/fix_message
Fix missing wxPython message.
2013-10-26 17:01:39 -07:00
Tom Rothamel 3d840f5c6d Properly deliver the error message when no build packages are selected.
Fixes #197.
2013-10-26 19:59:53 -04:00
Tom Rothamel db332a1f0f Merge pull request #191 from kyouryuukunn/allow_translate_voice_sustain
Allow the translation of "Voice Sustain".
2013-10-26 09:50:22 -07:00
Tom Rothamel 443a9001f5 Merge pull request #198 from vbkaisetsu/fix-doc
fix doc that doesn't contain needed line break
2013-10-26 09:49:06 -07:00
Tom Rothamel b7f9ad1808 Merge pull request #196 from xiongchiamiov/port-after-checkout
Port after_checkout.sh to non-Linux Unixes
2013-10-26 09:47:55 -07:00
Koichi Akabe 5aa7658cdf fix doc that doesn't contain needed line break 2013-10-26 22:21:01 +09:00
James Pearson 5dd2fae7a9 Port after_checkout.sh to non-Linux Unixes
`after_checkout.sh` has been using `readlink(1)` to get an absolute path (with
no symlinks) to the renpy root directory.  Unfortunately, `readlink -f` is a
GNU extension, and thus unavailable on the BSDs, including OS X.

There are[0] a number of options for those systems.  While an exec out to
Python seems like overkill (and is, in fact, a bit slow on my system), the
delay is small enough to not be a problem in a one-time script like this.
Additionally, it seemed silly to include a dozen-line shell function just for
this one usage.  Plus, we know for certain the user has Python, because
otherwise they couldn't run Ren'Py. ;)

I included the parens around `print` just to make sure it works with both
Python 2.x and 3.x.  I doubt this matters, but I figured I might as well.

If we stop caring about resolving symlinks, this entire line can be replaced
with `$PWD##*`. [1]

[0]: http://stackoverflow.com/q/1055671/120999
[1]: http://stackoverflow.com/a/1371283/120999
2013-10-25 22:51:48 -07:00
kyouryuukunn 3a5e571aea add doc about showing a window during a transition 2013-10-26 13:19:45 +09:00
Tom Rothamel 5ee03ed977 Reset _voice.tlid at each interaction.
This prevents voice sustain from carrying over through restarts,
as well as other potential minor problems.
2013-10-25 22:53:23 -04:00
Tom Rothamel 6710463318 Make installing the SDK conditional on RAPT being installed. 2013-10-25 21:15:41 -04:00
Tom Rothamel 893d36d4a3 Build RAPT as part of the Ren'Py release process.
This helps prevent me from accidentally forgetting to make a
RAPT release when Ren'Py code is updated.
2013-10-25 20:54:45 -04:00
Tom Rothamel 8f8b7e1fd9 Lock disk access. 2013-10-24 22:05:16 -04:00
Tom Rothamel e46c78fb36 Allow config.auto_voice to be a function.
This allows the patter to be changed when a translation is
being used, for example.
2013-10-24 21:39:08 -04:00
kyouryuukunn 5fd25efe0b allow_translate_lancher 2013-10-25 08:24:44 +09:00
kyouryuukunn 4d2f567bc4 enable translation of lancher 2013-10-24 22:01:23 +09:00
kyouryuukunn 0aa5016758 fix message 2013-10-24 20:25:19 +09:00
kyouryuukunn aac6291147 fix 2013-10-24 15:16:53 +09:00
Tom Rothamel 3cd4c18d6a Document text rendering change. 2013-10-23 23:10:19 -04:00
Tom Rothamel fe4bad7c11 Add mikachan license. 2013-10-23 22:55:55 -04:00
Tom Rothamel 251dbb2dee Mention the Japanese translation in the changelog. 2013-10-23 22:42:40 -04:00
Tom Rothamel 2ed6b14dc2 Remove files that are no longer needed. 2013-10-23 22:42:17 -04:00
Tom Rothamel a5162ac666 Fix question when overwriting a save. 2013-10-23 22:37:24 -04:00
Tom Rothamel 2a0adb3dbf Deal with {#comment} text tags. 2013-10-23 22:03:08 -04:00
kyouryuukunn 7edfe2cca8 add doc some statements equivalents 2013-10-24 01:13:02 +09:00
kyouryuukunn 757ecb37b4 add doc some pages 2013-10-24 01:12:37 +09:00
kyouryuukunn 0ebcd4a7f3 add doc about after_warp and some functions 2013-10-24 01:12:11 +09:00
kyouryuukunn ef1e6b0676 add the doc the page about creator defined statements 2013-10-24 01:10:10 +09:00
kyouryuukunn db94d03b64 move the window statement to displaying_images 2013-10-24 01:09:10 +09:00
kyouryuukunn 87b994b67a add the doc the page about developer tools and some functions 2013-10-24 01:08:40 +09:00
kyouryuukunn e5064f0794 add the doc the page about key maps 2013-10-24 00:55:22 +09:00
kyouryuukunn 6751172cfe add the doc the page about environment variables 2013-10-24 00:54:56 +09:00
Tom Rothamel 6c0d7802d9 Fix bad rst.x 2013-10-22 22:47:35 -04:00
Tom Rothamel ab7fd52fbd Fix syntax highlighting. 2013-10-22 22:45:44 -04:00
Tom Rothamel c6cb66dc61 Check in the generated docs. 2013-10-22 22:29:48 -04:00
Tom Rothamel 4b5ff75412 Document MultiPersistent. 2013-10-22 22:27:53 -04:00
Tom Rothamel 6dd5724be1 Split persistent out into its own rst file. 2013-10-22 22:11:13 -04:00
Tom Rothamel 32f3bbb67d Edit the label documentation. 2013-10-22 19:58:39 -04:00
Tom Rothamel 51cca16196 Merge pull request #188 from kyouryuukunn/add_doc3
More documentation from kyouryuukunn
2013-10-22 16:31:37 -07:00
kyouryuukunn 1fa87f753e add doc about init statement 2013-10-23 01:12:22 +09:00
kyouryuukunn 48cc2ae4cf add doc about special labels 2013-10-23 01:07:26 +09:00
kyouryuukunn e463c886cc add the doc about pause statement 2013-10-23 00:04:30 +09:00
kyouryuukunn 2efb7058f8 fix doc 2013-10-22 23:22:04 +09:00
kyouryuukunn 1c582ab21a add the doc persistent data 2013-10-22 23:14:33 +09:00
kyouryuukunn 4f30e7ac85 fix movie 2013-10-22 22:59:01 +09:00
kyouryuukunn 0e223e4c7a move renpy.call from other to statement_equivalents 2013-10-22 22:52:12 +09:00
kyouryuukunn b431d32825 move renpy.rollback from other to rollback 2013-10-22 22:49:15 +09:00
kyouryuukunn 8f41a8be99 add the doc the page about label 2013-10-22 22:47:27 +09:00
Tom Rothamel e9b260aae9 Merge pull request #187 from vbkaisetsu/fix-doc
fix reverted documentation errors
2013-10-22 06:41:39 -07:00
Koichi Akabe 2505af9985 fix reverted documentation errors
3fde29f reverted b074038 and 835fe5d because prior commits fixed auto generated files.
This commit fixes original rpy files.
2013-10-22 22:36:54 +09:00
kyouryuukunn 18fff449f3 add the doc the define statement 2013-10-22 21:51:43 +09:00
kyouryuukunn cc437eb47c add doc about base and game directorys 2013-10-22 20:45:51 +09:00
kyouryuukunn 14cd7e71b4 fix doc 2013-10-22 20:15:58 +09:00
kyouryuukunn 03499adffc add the doc the movie page 2013-10-22 20:12:26 +09:00
kyouryuukunn c738e39268 fix doc 2013-10-22 18:25:41 +09:00
Tom Rothamel 922af0d651 Testcase for vertical text.
This includes a pattern showing the center of the screen, and
vertical text starting at the center of the screen.
2013-10-22 00:50:13 -04:00
Tom Rothamel bfe91ab358 Center input prompts. 2013-10-22 00:47:12 -04:00
Tom Rothamel 0cfe13e214 Fix detection of RAPT when a .zip file exists in the Ren'Py directory. 2013-10-22 00:12:35 -04:00
Tom Rothamel 1246258f73 Use new screens for template. 2013-10-22 00:12:22 -04:00
Tom Rothamel 9655ef6a0d Merge pull request #184 from kyouryuukunn/fix_doc
fix doc
2013-10-21 20:22:17 -07:00
Tom Rothamel 3fde29fecd Edit audio.rst, and generate docs. 2013-10-21 23:09:42 -04:00
Tom Rothamel 04d5f374ef Merge pull request #185 from kyouryuukunn/add_doc2
Add documentation for audio statements.
2013-10-21 18:34:35 -07:00
Tom Rothamel acf0207f12 Re-init importer after a shift+R reload. 2013-10-21 21:09:25 -04:00
kyouryuukunn 2ebc6fb26e add index.rst audio page 2013-10-21 23:26:11 +09:00
kyouryuukunn 1c1c70e951 add doc audio page 2013-10-21 23:23:10 +09:00
kyouryuukunn 3ff3054f5d add doc about extend 2013-10-21 21:53:01 +09:00
kyouryuukunn eee003c184 fix doc 2013-10-21 21:49:42 +09:00
Tom Rothamel 661a884566 Encode the environment before using it.
This allows us to launch on windows.
2013-10-20 20:20:26 -04:00
Tom Rothamel e35860c235 Merge pull request #181 from kyouryuukunn/add_doc
Add doc about centered, vcentered, the play statement and the window statement
2013-10-20 13:38:37 -07:00
Tom Rothamel abfbebe996 Add disclaimer about vertical text. 2013-10-20 16:38:11 -04:00
Tom Rothamel 075555c294 Merge branch 'devel' of github.com:renpy/renpy into devel 2013-10-20 16:22:23 -04:00
Tom Rothamel 30eb973810 Add the renpy.is_seen function. 2013-10-20 16:15:36 -04:00
Tom Rothamel e60d332de6 Merge pull request #180 from kyouryuukunn/enable_translate
enable translate about screenshot
2013-10-20 13:12:05 -07:00
Tom Rothamel 835fe5db03 Merge pull request #182 from kyouryuukunn/fix_doc3
fix document
2013-10-20 13:11:34 -07:00
Tom Rothamel 9705ff7837 Merge pull request #183 from vbkaisetsu/tutorial-translation
update Japanese translation for tutorial game
2013-10-19 22:42:40 -07:00
Koichi Akabe 56aea76e25 update Japanese translation for tutorial game 2013-10-20 14:38:00 +09:00
Tom Rothamel f90ce46577 Use the (horizontal) lineskip as the advance value for vertical text.
This is an attempt at improving #179.
2013-10-20 00:51:46 -04:00
Tom Rothamel 5355f87e1d Deal with fonts with odd bounding-boxes.
Some truetype fonts have bounding boxes that contain the origin. (This
may be becuase of font design, auto-hinthing, or anti-aliasing.) We
deal with these fonts by rendering all the available pixels, even
those to the left of the origin.

This may make the actual area drawn to the screen bigger than the
displayable itself, so we deal with that when necessary.

Fixes #34.
2013-10-19 23:50:51 -04:00
kyouryuukunn fd3d21229b fix document 2013-10-20 03:03:31 +09:00
kyouryuukunn 1c819fec4d fix document 2013-10-20 02:44:44 +09:00
kyouryuukunn 1256909852 add doc about say statement with transition 2013-10-20 02:32:53 +09:00
kyouryuukunn cf933f2b37 add doc about window show hide 2013-10-20 02:14:55 +09:00
kyouryuukunn f3031a3cab add doc about the play statement 2013-10-20 02:13:18 +09:00
kyouryuukunn ddf5e82bd5 enable translate about screenshot 2013-10-19 11:04:38 +09:00
Tom Rothamel 95184394a4 Bump version to 6.16.0, and give it the name "In the Arena". 2013-10-18 21:27:23 -04:00
kyouryuukunn 8fbea7d329 add doc about centered and vcentered 2013-10-19 10:22:08 +09:00
Tom Rothamel 7fd9de354f Merge pull request #178 from kyouryuukunn/fix_document2
Fix documentation.
2013-10-18 17:27:37 -07:00
Tom Rothamel 70f5d97aef Document some bugfixes.
(I don't think it's worth going through and including them all.)
2013-10-17 23:35:12 -04:00
Tom Rothamel 1e8813e668 Document non-bugfix changes. 2013-10-17 23:23:21 -04:00
kyouryuukunn b07403855c fix document 2013-10-17 16:37:17 +09:00
Tom Rothamel 3ca12ea1d6 Start work on changelog. 2013-10-16 22:54:34 -04:00
Tom Rothamel 5ce0347e54 Merge pull request #176 from kyouryuukunn/fix_document
fix documentation about register_style_preference
2013-10-16 07:59:35 -07:00
kyouryuukunn ec2104d656 fix document about register_style_preference 2013-10-16 16:42:54 +09:00
Tom Rothamel e686b1228a Stop a playing movie while returning to the main menu. 2013-10-15 22:51:51 -04:00
Tom Rothamel 2667268f0d Merge pull request #173 from vbkaisetsu/rm-doc-ja-info-in-ja
remove doc-ja info in Japanese documentation
2013-10-15 19:48:32 -07:00
Tom Rothamel d3e5341c2d Fix problems with shift+R reloading. 2013-10-15 22:45:40 -04:00
Tom Rothamel 878aae6686 Use subtitle layout for the yes/no label text.
This prevents us from having widows when it's placed on two lines.
2013-10-15 22:36:54 -04:00
Tom Rothamel 2df74bb052 Make the rollback action sensitive iff Ren'Py can rollback. 2013-10-15 22:36:23 -04:00
Tom Rothamel 66f73ab014 Rearrange quick menu.
* Make the order more consistent.
* Add rollback ("Back")
* We don't need to make F.Skip so easy to disable - it's no worse
  than normal skip when skip unseen is off.
2013-10-15 22:24:30 -04:00
Tom Rothamel 8b7ccada49 Fast skip's get_sensitive should respect skip_unseen. 2013-10-15 22:22:16 -04:00
Tom Rothamel 27845de14b Require confirmation for fast skipping. Add to quick menu. 2013-10-15 22:16:19 -04:00
Tom Rothamel d59b550e04 Add the ability to ask for confirmation beofre skipping. 2013-10-15 20:29:42 -04:00
Tom Rothamel 4f26fd98a0 Tweak the test for slow skipping.
(config.skipping = True can also be used to turn on slow skipping.)
2013-10-15 20:05:03 -04:00
kyouryuukunn e3fe09a1ae distinguish fast and skip about get_selected() 2013-10-15 21:25:22 +09:00
Koichi Akabe 657b072ffa remove doc-ja info in Japanese documentation
Japanese doc information shouldn't be shown in Japanese, and it should be untranslatable text.
This commit adds two tags: language_LANGUAGE and gettext to support it.
2013-10-15 19:47:57 +09:00
Tom Rothamel def9865849 Store st properly in musicroom.
This prevents us from constantly resetting the last_playing
value, which caused many problems.
2013-10-14 21:55:38 -04:00
Tom Rothamel 98cff70eaf Fix typo. 2013-10-14 00:14:31 -04:00
Tom Rothamel 0c4eb467fe Make run.sh build in a different directory.
This prevents run.sh from conflicting with the official build.
2013-10-14 00:08:02 -04:00
Tom Rothamel 3e6ed73769 Add build.destination.
This lets us select the directory Ren'Py will build distributions
into.
2013-10-13 23:54:07 -04:00
Tom Rothamel 6c29701b0d Add a stop_action to the music room. 2013-10-13 20:25:08 -04:00
Tom Rothamel 273dbf780e If we can't get the date of a file, use now. 2013-10-13 20:20:02 -04:00
Tom Rothamel 35831b0ba7 MusicRoom support single track, loop, and shuffle options.
Also, add some testcases for MusicRoom.
2013-10-13 15:47:55 -04:00
Tom Rothamel 275f56a384 Yet another fix. 2013-10-13 01:43:39 -04:00
Tom Rothamel dbb6551d20 Today is not my night. (Fix previous commit.)0 2013-10-13 01:38:21 -04:00
Tom Rothamel 6d74eecc5c Also handle bad times. 2013-10-13 01:33:27 -04:00
Tom Rothamel eae4fd3f1b Add an error message if we can't stat a file going into a zip package. 2013-10-13 01:20:29 -04:00
Tom Rothamel 687b3ad1cd Merge pull request #163 from kyouryuukunn/hide_voice_preferences
Hide voice preferences if has_voice is false.
2013-10-12 08:45:57 -07:00
Tom Rothamel def04ec41c Right-click (the game_menu keys) answers no to a yes/no question
See the discussion at #166.
2013-10-11 23:04:13 -04:00
Tom Rothamel cdbc67f3d5 Do not save when renpy.store.main_menu is true.
We're using renpy.store.main_menu as the flag to tell us we're in
the main menu.
2013-10-11 00:43:08 -04:00
Tom Rothamel 2fd4f04bd8 Remove now-obsolete code. 2013-10-11 00:42:53 -04:00
Tom Rothamel 2edbd375fd Preserver store.main_menu when we enter a sub-menu from the main menu. 2013-10-11 00:42:14 -04:00
Tom Rothamel d685c3963a Fix code analysis problems. 2013-10-11 00:41:25 -04:00
Tom Rothamel 4218e2d950 Replace g. with gallery. in the _gallery screen.
Caught by kyouryuukunn here: https://github.com/renpy/renpy/pull/169#issuecomment-26032735
2013-10-10 23:14:50 -04:00
Tom Rothamel f96a6eee04 Regenerate documentation; Add link to Japanese documentation. 2013-10-10 10:42:09 -04:00
Tom Rothamel 12650ae9f7 Rewrite the gallery to allow us to advance forwards and backwards,
including advancing between buttons.
2013-10-10 00:37:55 -04:00
Tom Rothamel 9dee75e243 Merge pull request #168 from kyouryuukunn/gallery2
add gallery Previous,Next,Close,EnablePreview actions
2013-10-08 15:08:30 -07:00
Tom Rothamel e9a2579a64 Document Expansion APKs. 2013-10-08 17:57:10 -04:00
kyouryuukunn 7ca20972af change design of "_gallery" 2013-10-08 18:57:57 +09:00
Tom Rothamel 3b6c187ad1 Add support for placing google play info into the game script,
so it can be edited into the android code.

Also, various minor improvements.
2013-10-07 23:59:50 -04:00
Tom Rothamel c4e50aa700 More android documentation. 2013-10-07 21:55:07 -04:00
kyouryuukunn 4736b75cc7 change EnablePreview to ToggleSlideshow 2013-10-08 00:01:17 +09:00
kyouryuukunn 775a007a41 use "gallery" screen in place of "_gallery" if exist 2013-10-07 23:56:28 +09:00
kyouryuukunn ae64c83d01 add gallery Previous,Next,Close,EnablePreview actions 2013-10-07 22:06:00 +09:00
Tom Rothamel 723622b7f5 Expand LGPL correctly.
Fixes #167.
2013-10-07 01:27:18 -04:00
Tom Rothamel 7903ee1235 Update the Android documentation. 2013-10-07 01:16:20 -04:00
Tom Rothamel da6629c210 Move default preferences to their own section; document new defaults. 2013-10-06 22:12:51 -04:00
Tom Rothamel a994adfed7 Bars switch to the selected_hover when they're activated. 2013-10-06 10:55:57 -04:00
kyouryuukunn 66fc4eb85e also hide voice preferences in tutorial 2013-10-06 12:13:24 +09:00
Tom Rothamel 04d4a113ac Merge branch 'fix_and_unify_autosave' of github.com:kyouryuukunn/renpy into devel
This puts the checks as to if we can autosave into loadsave, rather than
scattering them in various places in the code.
2013-10-05 22:59:41 -04:00
kyouryuukunn fd6417bc3c hide voice preferences if has_voice is False 2013-10-06 11:49:59 +09:00
Tom Rothamel 74eee18415 Merge pull request #162 from vbkaisetsu/credit-indent
take care of indents in credits
2013-10-05 19:49:29 -07:00
Tom Rothamel d5d27062d7 Merge branch 'common_quit_process' of github.com:kyouryuukunn/renpy into devel
This always calls _quit (and quit if it exists) on quit, and it calls
_confirm_quit when the close button is clicked.
2013-10-05 21:44:59 -04:00
Tom Rothamel 4983e581ba Set config.has_voice to False by default.
At least until more than a few games have voices.
2013-10-05 21:02:53 -04:00
Tom Rothamel ab37f35cf8 Change the defaults for wait_for_voice and voice_sustain. 2013-10-05 20:54:29 -04:00
Tom Rothamel 4a4fbb9b3f Merge branch 'preferences.voice_sustain' of github.com:kyouryuukunn/renpy into devel 2013-10-05 20:37:24 -04:00
Tom Rothamel 9b2617e48c Merge pull request #161 from kyouryuukunn/rename_wait_voice
rename preferences("wait voice") to preferences("wait for voice")
2013-10-05 14:23:42 -07:00
kyouryuukunn 80c2d4cee2 rename preferences("wait voice") to preferences("wait for voice") 2013-10-06 03:03:38 +09:00
Tom Rothamel 6255511d02 Change the English name of wait_voice to "Wait for Voice." 2013-10-02 20:38:02 -04:00
Tom Rothamel e61ccaa6c8 Merge branch 'preferences.wait_voice' of github.com:kyouryuukunn/renpy into devel
Addds the wait_voice preference, which lets the user decide if auto-forward
mode will wait for voice to finish before advancing.
2013-10-02 20:31:11 -04:00
Tom Rothamel a2f31d5798 Use the relauch code to relaunch Ren'Py after a directx upgrade.
Fixes #159.
2013-10-01 23:19:03 -04:00
Tom Rothamel 29f22d1e79 Check in generated documentation. 2013-10-01 23:15:17 -04:00
Koichi Akabe fe78160055 take care for indents in credits 2013-10-02 10:20:41 +09:00
Tom Rothamel ba5d433dd1 Tweak the format of the translation documentation. 2013-10-01 19:59:04 -04:00
Tom Rothamel 3516bfc3c5 Merge pull request #158 from vbkaisetsu/doc-credits
add credits for documentation
2013-10-01 16:41:07 -07:00
Tom Rothamel 17fa9b6a14 Merge pull request #160 from kyouryuukunn/fix_document_slideaway
Fix documentation.
2013-10-01 16:36:55 -07:00
kyouryuukunn d0a8ab1976 fix_document 2013-10-01 19:29:09 +09:00
Tom Rothamel 051ca25fe7 Changes to persistence.
Automatically saving persistent data may be too slow (and might cause
a laptop's hard drive to spin up), so we now save it at shutdown or
when renpy.save_persistent is called.

We also allow creators to register a merge function that's called when
loading updated persistence data from disk.
2013-10-01 00:32:31 -04:00
Tom Rothamel 3e097905e3 Merge persistent data.
If a persistent updates while this code is running, we merge in
the data from that file, and restart the interaction.
2013-09-30 01:20:21 -04:00
Koichi Akabe d516731d24 set ??? as translator if translator-credits is not set 2013-09-29 14:30:34 +09:00
Koichi Akabe 2ddd430484 add credits for documentation 2013-09-29 13:57:54 +09:00
Tom Rothamel 099c8a53d3 Add NullAction.
This is used to make a button responsive to hover and unhover,
even if it doesn't have an action.
2013-09-28 23:43:58 -04:00
Tom Rothamel dcbf0d05e5 Merge pull request #156 from kyouryuukunn/fix_music_room
Fix music room.
2013-09-27 19:42:31 -07:00
kyouryuukunn dd70a48e3f fix_music_room 2013-09-28 10:16:06 +09:00
Tom Rothamel fe954a9e33 Export renpy.display.behavior.run as run_action, and make the music
room use it.
2013-09-27 18:05:58 -04:00
Tom Rothamel 5f5791a8e3 Add an action argument to MusicRoom.add, giving a list of actions
to be run when the music plays.
2013-09-27 18:00:14 -04:00
Tom Rothamel 1c90ce4dea Defer persistent loads. 2013-09-26 23:57:45 -04:00
kyouryuukunn 8bbd3a0000 add MusicRoom.add action keyword argument 2013-09-27 00:00:40 +09:00
Tom Rothamel 72e430ef49 Add persistent data to save locations; use for saving persistent.
Also, safely save normal save data.
2013-09-26 00:27:29 -04:00
Tom Rothamel 1c017a7589 Minor changes. 2013-09-24 23:20:53 -04:00
Tom Rothamel b9836c3eaa Move the preferences object into preferences.py. 2013-09-24 22:07:01 -04:00
kyouryuukunn 479f45f46f add preferences.voice_sustain 2013-09-25 10:53:36 +09:00
kyouryuukunn e3204944f6 add preferences.wait_voice 2013-09-25 10:41:57 +09:00
Tom Rothamel debcd2043b Merge branch 'master' into devel 2013-09-23 23:50:02 -04:00
Tom Rothamel b57ceed621 Deal with VIDEORESIZE events after mode changes on windows. 2013-09-23 23:48:43 -04:00
Tom Rothamel e6e0e80527 Deal better with text strings of insane lengths.
We now only display the first 8192 pixels of the text, but that's
better than crashing.

Fixes #141.
2013-09-23 21:24:47 -04:00
Tom Rothamel 3c0b350a4f Allow fast skipping to begin in the main menu.
Merges branch 'fast_skip_by_preference' of github.com:kyouryuukunn/renpy into devel
2013-09-23 19:43:43 -04:00
Tom Rothamel b9a065d48a Add a default for Transform.child_size.
Fixes #112.
2013-09-23 19:36:20 -04:00
kyouryuukunn c00e5abf80 set quit_action to ui.gamemenu(_quit_prompt) if more than v6.15.7 2013-09-23 11:56:00 +09:00
kyouryuukunn 2b3e06bf6d add quit label as the common quit process 2013-09-23 11:54:25 +09:00
Tom Rothamel 293b165aef After_rollback isn't a function. 2013-09-22 20:51:59 -04:00
Tom Rothamel 3dbbb3129c Merge branch 'master' into devel 2013-09-22 19:46:19 -04:00
Tom Rothamel 7b5378fcf1 Merge branch 'fix_screenshot' of github.com:kyouryuukunn/renpy into devel 2013-09-22 19:44:15 -04:00
Tom Rothamel 0e9d90e761 Merge pull request #131 from vbkaisetsu/fix-doc-errors
Fix documentation and jp translation errors.
2013-09-22 16:43:05 -07:00
Tom Rothamel d6acab6bd4 Merge pull request #149 from antoinentx/patch-1
Allow accent in the PATH of Ren'Py directory
2013-09-22 16:20:30 -07:00
Tom Rothamel b6096f6e95 Merge pull request #122 from kyouryuukunn/do_autosave_in_menu
Force autosave on menus and input.
2013-09-22 16:19:34 -07:00
Tom Rothamel 84f2da4a27 Add FileNewest, a function that is True for the newest file slot. 2013-09-21 23:32:03 -04:00
Tom Rothamel 3f6dfcb08e Rewrite the file actions.
The file actions now use the new save slot api, and there's a new
SaveJson function that can returns JSON information from a save
file.
2013-09-21 15:27:31 -04:00
Tom Rothamel f68e38b011 Add a new slot-based API over the new save slot stuff. 2013-09-21 14:35:53 -04:00
Tom Rothamel 7bb92310b5 Write json into save files.
This provides a way to associate arbitrary information with Ren'Py
save files. (For example, we could store which character's route
we're on, or scoring information.)

This introduces config.save_json_callbacks, which contains callback
functions that add information to the json callbacks.
2013-09-21 13:34:57 -04:00
Tom Rothamel ebab397625 Merge branch 'master' of github.com:renpy/renpy into devel 2013-09-20 23:20:43 -04:00
Tom Rothamel 776c0c2eb0 Merge pull request #136 from kyouryuukunn/has_quicksave
Change the default for config.has_quicksave to True.
2013-09-20 20:18:38 -07:00
kyouryuukunn c4bf9c07ca do autosave in menu and input 2013-09-20 18:17:48 +09:00
kyouryuukunn 8d8703bec6 set has_quicksave to False for old vertion 2013-09-20 11:42:53 +09:00
kyouryuukunn cdfb2a162e config.has_quicksave defaults to True 2013-09-20 11:42:53 +09:00
kyouryuukunn 842116e037 don't take_screenshot menu 2013-09-20 11:42:49 +09:00
kyouryuukunn 12403dab26 don't autosave during replay 2013-09-20 11:42:46 +09:00
kyouryuukunn 0dcb0e9fad unify checks for autosave about if in main menu or not 2013-09-20 11:42:46 +09:00
kyouryuukunn 450740318c fix autosave_frequency 2013-09-20 11:42:44 +09:00
kyouryuukunn 455940abda can also fast_skip by menu. 2013-09-20 11:42:41 +09:00
Tom Rothamel 38e2d1aaa9 Merge branch 'master' into devel 2013-09-19 21:35:36 -04:00
Tom Rothamel 8b640426a2 Merge pull request #137 from kyouryuukunn/toggle_page
add FilePageNext and FilePagePrevious a toggle function
2013-09-19 18:34:07 -07:00
Tom Rothamel 19a8c5512e Remove spurious variable from the namespace. 2013-09-18 23:12:12 -04:00
Tom Rothamel 9c50bce587 Remove os from the global namespace. 2013-09-18 23:06:01 -04:00
Tom Rothamel 3f06c505ce Document automatic voice. 2013-09-18 00:08:15 -04:00
Tom Rothamel 04e5b93f91 Normalize spacing. 2013-09-17 23:45:07 -04:00
Tom Rothamel 052ed5c8e3 Add the _auto_voice screen, which displays the file that the auto
voice system is trying to play.
2013-09-17 23:42:30 -04:00
Tom Rothamel 881a1a684f Implement config.auto_voice.
This uses the translation ids to look for a voice file, and
if found, plays the appropriate voice file.
2013-09-17 23:22:56 -04:00
Tom Rothamel 5bb41aa035 Add config.default_language, a non-sticky way to change the language
the game uses.
2013-09-16 23:34:49 -04:00
Tom Rothamel 62c69c8357 Fast skipping skips over renpy.pause.
Also, modified Skip(fast=True) to be enabled even if we haven't
read through the current scene.
2013-09-16 23:23:53 -04:00
Tom Rothamel 93c4da6216 Restart the interaction when a save cache slot changes.
This means that the load/save screens will live update when
a savefile appears or disappears.
2013-09-16 22:32:33 -04:00
Tom Rothamel 40cedc59cb Implement the scan thread for FileLocation.
The scan thread will scan the directory, getting mtimes. If a file
has changed its mtime (or appeared or disappeared), we clear out
the cached slot.
2013-09-16 22:15:54 -04:00
Tom Rothamel 3e44420023 Add a thread for scanning save locations. 2013-09-16 00:11:45 -04:00
Tom Rothamel 16aacb8fef Move the savelocation stuff into its own file. 2013-09-15 19:22:29 -04:00
Tom Rothamel 96a6d8cf3f unlink, rename, and cycle_saves now use the new location system. 2013-09-15 01:03:11 -04:00
Tom Rothamel 4e2d68bb4a Use the location system for load and can_load. 2013-09-15 00:09:24 -04:00
Tom Rothamel b3c96949d9 Make save scanning use locations.
This involves routing save slot listing and mtime/extra_info/screenshot
creation through the location system.
2013-09-14 23:45:22 -04:00
Tom Rothamel ac421dd971 Properly deal with percent-subtitutions in extend.
Fixes #150.
2013-09-13 23:27:58 -04:00
Tom Rothamel 97d7cf4f91 Test if a save location is active.
If we're installed to Program Files on Windows, the game-specific save
location is disabled since we can't write to it.
2013-09-12 23:51:30 -04:00
antoinentx cdfe0a5e9a Allow accent in the PATH of Ren'Py directory
Before the change, you get an uncaught exception when there is an accent in the Path. With that change, it works.
2013-09-12 18:11:09 +02:00
Tom Rothamel 170286d6ce Deal with python compile errors that contain non-ascii characters. 2013-09-11 23:28:11 -04:00
Tom Rothamel 5efa00294c No longer require the key exist for SetDict. 2013-09-11 21:02:13 -04:00
Tom Rothamel 1b47b4b420 Merge branch 'devel' of github.com:renpy/renpy into devel 2013-09-11 19:20:29 -04:00
Tom Rothamel 2868b5c12e Fix analysis problems caused by Persistent move. 2013-09-10 21:14:32 -04:00
Tom Rothamel 4cd7fbf7be Save to multiple locations.
The new MultiLocation lets us save to multiple locations. We now save
both to the user's save directory and a game-local save directory.

Also, refactored the save location in FileLocation into its own
method.
2013-09-10 18:24:42 -04:00
Tom Rothamel 1ed8555b4e Introduce new save location system.
While only used for saves at the moment, this system will eventually
let us use multiple locations.

This also introduces the SaveRecord object, which is where save data
is stored before we write it to disk.
2013-09-10 01:19:21 -04:00
Tom Rothamel a7655a6809 Remove the .pot files from source control.
These are generated files, so we probably don't want to put them
in git.
2013-09-08 23:13:19 -04:00
Tom Rothamel cd64333364 Allow the auto-save thread to free-run.
Now that we're almost always running on a multi-core device, there's
little reason not to just run the auto-save thread whenever we want.

This also will make some of the new save stuff simpler.
2013-09-08 23:11:40 -04:00
Tom Rothamel 4de7b7c504 Ensure Persistent exists in game, for backwards compatibility. 2013-09-08 02:46:50 -04:00
Tom Rothamel df4634bb6a Unicode-safety for extracted text. 2013-09-08 01:50:25 -04:00
Tom Rothamel fa338784d9 Add dialogue extraction GUI. 2013-09-08 01:25:14 -04:00
Tom Rothamel ca501350e1 Exclude extracted dialogue from builds. 2013-09-08 01:11:27 -04:00
Tom Rothamel db597d3a2b Add the dialogue command, which uses the translation system to
dump the game's dialogue to a file.
2013-09-08 01:07:46 -04:00
Tom Rothamel 49b3ba9e34 Add the _clear method to Persistent, providing a way to clear the
persistent data from within the game.

Also, move Persistent into persistent.py.
2013-09-07 23:48:48 -04:00
Tom Rothamel d7bdbe0420 Move things over to persistent.py
I'll be moving the Persistent class in there shortly.
2013-09-07 23:12:37 -04:00
Tom Rothamel 86f9c2e0fb Merge pull request #145 from vbkaisetsu/sphinx-gettext
Add documentation translation support.
2013-09-06 06:36:35 -07:00
Tom Rothamel c7d4b3e45a Merge pull request #143 from kyouryuukunn/fix_document2
Fix documentation.
2013-09-05 22:21:22 -07:00
Tom Rothamel 1bbe821474 Move MultiPersistent into its own file.
This cleans up loadsave for the new load/save system.
2013-09-06 00:10:11 -04:00
Tom Rothamel f9d46b15c8 Hotbars should be replaced.
Fix by Elmiwisa, from http://lemmasoft.renai.us/forums/viewtopic.php?f=32&t=23081.
2013-09-04 21:39:48 -04:00
kyouryuukunn 8d80e6399a fix document 2013-09-04 14:49:11 +09:00
kyouryuukunn e2ec6a57ff fix document 2013-09-04 14:39:26 +09:00
kyouryuukunn 661466df50 change 'toggle' to 'wrap' 2013-08-30 17:19:59 +09:00
kyouryuukunn 2d45112fc4 add FilePageNext and FilePagePrevious a toggle function 2013-08-30 17:19:58 +09:00
Tom Rothamel bf4b6c6dcd Merge pull request #134 from kyouryuukunn/fix_spell_miss
Use exit_yesno_prompt when exiting a yesno_prompt layout.
2013-08-29 20:42:49 -07:00
Tom Rothamel 170aa7fd79 Merge pull request #138 from kyouryuukunn/fix_spellmiss2
Fix duplicate code for Preference("skip", ...)
2013-08-29 20:41:58 -07:00
Tom Rothamel 825ad67c6e Merge pull request #140 from kyouryuukunn/fix_document
Fix documentation of Stop action.

It was the same as Play.
2013-08-29 20:40:32 -07:00
kyouryuukunn cfd2c66ea4 fix the document of Stop action 2013-08-30 00:40:29 +09:00
Tom Rothamel 323258443f Remove debug print. 2013-08-28 23:34:22 -04:00
Tom Rothamel e7c45601de Various android-related changes.
Get things running on OS X, and deal with missing java.
2013-08-28 23:06:47 -04:00
kyouryuukunn 61a18e8a0d fix spellmiss 2013-08-28 19:18:43 +09:00
Koichi Akabe 2c5b292888 update translation template and add missing files 2013-08-27 22:28:34 +09:00
Koichi Akabe 8a7538338f merge with trunk 2013-08-27 22:23:46 +09:00
Koichi Akabe c088bd776e fix spelling errors and invalid line breaking 2013-08-27 21:56:25 +09:00
Tom Rothamel 7a2232ee46 Remove debugging prints. 2013-08-27 01:39:05 -04:00
Tom Rothamel d52067a8d2 Run expensive operations (unpacks, file copies, and tars) in a
background thread.
2013-08-27 01:33:27 -04:00
Tom Rothamel 821344d0f2 Deal with empty strings, remove print. 2013-08-26 23:51:38 -04:00
Tom Rothamel 2536f989c7 Fixes to get working on Windows. 2013-08-26 23:15:27 -04:00
Tom Rothamel 828cb7dc3b Lexer.advance should return True and False.
This is documented in 000statements.rpy.
2013-08-24 10:35:32 -04:00
Tom Rothamel eac8b86fcf Use the text color for console output. 2013-08-24 00:51:41 -04:00
Tom Rothamel ef13f95cc2 Android improvements.
* Status feedback.
* Tooltips.
* Easy way to edit DownloaderService.java.
2013-08-23 00:02:10 -04:00
Tom Rothamel 3fa528cca1 Deal with \r when tailing output. 2013-08-22 01:07:17 -04:00
Tom Rothamel 585d2185bc The android install_sdk command works. 2013-08-22 00:59:39 -04:00
kyouryuukunn 817c43ed75 fix the spell miss in involke_yesno_prompt 2013-08-21 17:59:11 +09:00
Tom Rothamel ba75191d37 Downloader progress & android integration. 2013-08-21 00:12:32 -04:00
Tom Rothamel df8dfa0ddb Add a threaded downloader class.
This class supports getting progress and cancellation.
2013-08-20 23:55:36 -04:00
Tom Rothamel 093269ebcd Let the user cancel expensive operations. 2013-08-20 00:54:06 -04:00
Tom Rothamel 556ab591f9 Add a refresh button. 2013-08-19 23:50:14 -04:00
Tom Rothamel a91727c886 Minor code cleanups. 2013-08-19 22:58:16 -04:00
Tom Rothamel ff567918b1 Documentation inc changes (mostly whitespace-related). 2013-08-19 00:15:37 -04:00
Tom Rothamel e4f16f0d4e Documentation changes. 2013-08-19 00:15:24 -04:00
Tom Rothamel 98f3488520 Display text output while running android build commands. 2013-08-19 00:14:59 -04:00
Koichi Akabe ac7830ff50 update translation template 2013-08-09 20:43:31 +09:00
Koichi Akabe 12d60b81b8 merge with trunk 2013-08-09 20:36:48 +09:00
Koichi Akabe 8744787348 fix documentation errors
fix Japanese translation
2013-08-09 07:43:37 +09:00
Tom Rothamel fb37b423bd Add the ability to tail a file to the launcher.
Start work on running android processes.
2013-08-06 23:45:21 -04:00
Tom Rothamel 5e171a3ac9 Add _with_none to renpy.call_screen. 2013-08-04 20:44:23 -04:00
Tom Rothamel f8ffb1641f Create a GUI interface for Android.
Right now, we're able to configure an android build through the
launcher.
2013-07-29 10:56:52 -04:00
Tom Rothamel eb86123a47 Add interface.choice, which allow the launcher to ask a question. 2013-07-28 23:25:39 -04:00
Tom Rothamel cd1e6e7766 Ensure _main_menu is always set on the context. 2013-07-23 23:39:15 -04:00
Tom Rothamel 2fa5056ffd Cache compiled conditions for ConditionSwitch.
Previously, were re-compiling the expressions each time the
ConditionSwitch ran, which was leading to performance problem
when there was an absurdly large number of conditions.
2013-07-22 09:06:40 -04:00
Tom Rothamel ebe6b092a7 Allow _Config to be loaded.
This prevents SetVariable(config, "something", True) from causing a
problem. (This code is still not a good idea.)
2013-07-21 23:56:54 -04:00
Tom Rothamel 78a37292cc Add tooltips to describe the emulators. 2013-07-21 14:55:19 -04:00
Tom Rothamel 749a83d28b Basic android launcher screen, including the ability to launch
"emulators".
2013-07-21 14:41:44 -04:00
Tom Rothamel 91a8aa22b7 Fix autosave. 2013-07-20 12:40:10 -04:00
Tom Rothamel f7084cc07b Merge pull request #113 from kyouryuukunn/improve_autosave
Improve autosave
2013-07-18 18:56:00 -07:00
kyouryuukunn fa900941d5 Also check autosave() 2013-07-17 17:22:37 +09:00
kyouryuukunn 4da5cea54c Don't check when return the main menu 2013-07-17 17:11:35 +09:00
kyouryuukunn d83ab22d45 don't do the autosave in the main menu 2013-07-17 17:11:35 +09:00
kyouryuukunn c1229f65a1 Also do the autosave when return to the main menu 2013-07-17 17:11:34 +09:00
Tom Rothamel 8b8bf8d6aa Merge pull request #117 from kyouryuukunn/sensitive_of_skip
disable Skip if skip_unseen is false and in unseen
2013-07-16 18:21:05 -07:00
Tom Rothamel 08200cb5e8 Merge pull request #119 from kyouryuukunn/improve_fast_skip
Make fast-skipping stop when encountering unseen text, if skip_unseen is False.
2013-07-16 18:20:36 -07:00
Tom Rothamel bce5bb7d14 Display an indicator showing the TV-unsafe area. 2013-07-14 21:52:47 -04:00
kyouryuukunn f07fed4804 disable Skip if skip_unseen is false and in unseen 2013-07-15 10:39:43 +09:00
Tom Rothamel 8112bd6af4 Code to emulate a TV-based device.
Right now, this tries to emulate an OUYA console.
2013-07-14 20:27:06 -04:00
Tom Rothamel e0443512e6 Implement the touch-screen emulator.
This more-or-less emulates an android device.
2013-07-14 19:55:28 -04:00
Tom Rothamel cbfe972ace Start work on interface emulator. 2013-07-14 19:03:33 -04:00
kyouryuukunn e078700af9 stop fastskip in unseen 2013-07-15 03:08:08 +09:00
Tom Rothamel 0c74863be9 Remove spurious whitespace. 2013-07-14 12:00:15 -04:00
Tom Rothamel 2779280b83 Make ADVCharacter.__str__ handle dynamic characters. 2013-07-14 11:36:16 -04:00
Tom Rothamel 176c86a73e Merge pull request #120 from ckoepp/master
Added __str__ to ADVCharacter class
2013-07-14 08:32:57 -07:00
Christian Koepp 694c2d9e85 added __str__ to ADVCharacter class 2013-07-14 09:57:26 +02:00
Tom Rothamel 7fd7dba118 Fix rollback in Android movie playback. 2013-07-14 01:29:58 -04:00
Tom Rothamel b998b4c967 Add video playback for Android. 2013-07-14 01:06:29 -04:00
Tom Rothamel 206eb4d2cb Update docs. 2013-07-12 22:59:26 -04:00
Tom Rothamel bbee178ff9 Merge pull request #115 from kyouryuukunn/add_funcs_to_MusicRoom
Add funcs to music room
2013-07-12 19:54:27 -07:00
Tom Rothamel 67775552b5 Improve the gallery get_fraction function. 2013-07-12 22:50:23 -04:00
Tom Rothamel 54f02890cb Merge pull request #114 from kyouryuukunn/add_gallery_fraction
add Gallery get_fraction
2013-07-12 19:35:03 -07:00
Tom Rothamel b7bce5efd2 OUYA detection, and a new set of variants, based on Android screen sizes. 2013-07-07 19:47:49 -04:00
Tom Rothamel 8f13c8e37a Fix renpy.list_files when accessing an android APK.
Fixes #116.
2013-07-07 15:49:50 -04:00
kyouryuukunn eccc452d80 add MusicRoom TogglePlay 2013-06-29 12:43:48 +09:00
kyouryuukunn 7a1c36f8db add MusicRoom random play 2013-06-29 12:42:23 +09:00
kyouryuukunn 654095786e add Gallery get_fraction 2013-06-29 10:52:57 +09:00
Koichi Akabe 73d36d34c8 update translation templates 2013-04-21 18:31:44 +09:00
Koichi Akabe 4126b0574a merge with trunk 2013-04-21 18:15:26 +09:00
Koichi Akabe e2bc9aa6d0 update translation templates 2013-03-08 20:05:53 +09:00
Koichi Akabe 670721ac52 merge with trunk 2013-03-08 20:02:42 +09:00
Koichi Akabe e195ea5221 update translation template 2013-02-28 22:41:41 +09:00
Koichi Akabe ea1ebb4bba merge with trunk 2013-02-28 22:40:44 +09:00
Koichi Akabe 6a60039aac update translation template 2013-02-25 09:07:56 +09:00
Koichi Akabe 96485ec8d0 merge with trunk 2013-02-25 09:05:30 +09:00
Koichi Akabe 2b9621e7cf add translation template 2013-02-21 10:01:56 +09:00
Koichi Akabe 747bf2c3c1 add gettext target to support documentation translation 2013-02-21 09:56:19 +09:00
721 changed files with 74335 additions and 18389 deletions
+9 -9
View File
@@ -5,17 +5,19 @@
*.pyo
*~
*.bak
*.bak
saves
tmp
cache
log.txt
errors.txt
traceback.txt
/errors.txt
/traceback.txt
styles.txt
/android
/build
/dist
/dists
@@ -23,12 +25,8 @@ styles.txt
/jedit
/lint.txt
/renpy.code
/testing*
/*testing*
/screenshot*
/Microsoft.VC90.CRT.manifest
/console.exe
/msvcr90.dll
/python27.dll
/renpy.exe
/lib
/lib.old
@@ -38,7 +36,7 @@ styles.txt
/.project
/.settings
/LICENSE.txt
/template/README.html
/templates/english/README.html
/the_question/README.html
/tutorial/README.html
/renpy/angle/*.pyx
@@ -48,7 +46,9 @@ styles.txt
/module/gen
/editra
/launcher/game/theme
/launcher/game/script_version.rpy
dl
renpy/vc_version.py
.externalToolBuilders
rapt
+123 -28
View File
@@ -4,46 +4,142 @@ 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
========
Ren'Py development takes place on two branches, ``master`` and
``devel``, as well as the occasional feature branch.
Getting Started
===============
Master
-----
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.
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.
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.
After checking out master, run::
Nightly Build
-------------
./after_checkout.sh <path-to-renpy>
Nightly builds can be downloaded from:
to link in the libraries from the most recent Ren'Py. (On Windows, you
will need to run this under msys or cygwin.)
http://nightly.renpy.org
Ren'Py can then be run by running renpy.exe, renpy.sh, or renpy.app as
appropriate.
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::
Devel
-----
./after_checkout.sh <path-to-nightly>
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::
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.
export RENPY_DEPS_INSTALL=/usr::/usr/lib/x86_64-linux-gnu/
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.
Finally, change into the modules directory, and run::
The ``doc`` symlink will dangle until documentation is built, as described
below.
python setup.py install
Compiling the Modules
----------------------
Ren'Py can then be run by using python to run renpy.py.
Building the modules requires you have the many dependencies installed on
your system. On Ubuntu and Debian, these dependencies can be installed with
the command::
apt-get install python-dev python-pygame libavcodec-dev libavformat-dev \
libavresample-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)
Translating
===========
For best practices when it comes to translating the launcher and template
game, please read:
http://lemmasoft.renai.us/forums/viewtopic.php?p=321603#p321603
Contributing
@@ -51,5 +147,4 @@ 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.
+21 -2
View File
@@ -3,6 +3,7 @@
import argparse
import os
import subprocess
import sys
from renpy import version_tuple #@UnresolvedImport
@@ -31,7 +32,25 @@ elif args.experimental:
else:
links = [ ]
tag = False
def check_dirty():
if args.no_tag:
return
if subprocess.check_call([ "git", "diff", "--quiet", "HEAD" ]):
print "Directory not checked in: {}".format(os.getcwd())
sys.exit(1)
os.chdir("/home/tom/ab/renpy")
check_dirty()
os.chdir("/home/tom/ab/renpy/android")
check_dirty()
if not args.no_tag:
subprocess.check_call([ "git", "tag", "-a", "rapt-" + version, "-m", "Tagging RAPT release." ])
os.chdir("/home/tom/ab/renpy/dl")
for i in links:
@@ -41,7 +60,7 @@ for i in links:
os.chdir("/home/tom/ab/renpy")
if tag and not args.no_tag:
if tag and not args.no_tag:
cmd = [ "git", "tag", "-a", version, "-m", "Ren'Py " + version ]
subprocess.check_call(cmd)
+3 -4
View File
@@ -1,16 +1,15 @@
#!/bin/bash
ROOT="$(dirname $(readlink -f $0))"
ROOT="$(dirname $(python -c "import os;print(os.path.realpath('$0'))"))"
ln -s "$ROOT/help.html" "$ROOT/tutorial/README.html"
ln -s "$ROOT/help.html" "$ROOT/the_question/README.html"
ln -s "$ROOT/help.html" "$ROOT/template/README.html"
ln -s "$ROOT/help.html" "$ROOT/templates/english/README.html"
ln -s "$ROOT/sphinx/source/license.rst" "$ROOT/LICENSE.txt"
ln -s "$ROOT/sphinx/build/html" "$ROOT/doc"
if [ "$1" != "" ]; then
ln -s "$1/lib" "$ROOT/lib"
ln -s "$1/renpy.app" "$ROOT"
ln -s "$1/renpy.exe" "$ROOT"
fi
fi
+1 -1
View File
@@ -1,4 +1,4 @@
# This file sets up the normal python modules. It's used to help eclipse
# This file sets up the normal python modules. It's used to help eclipse
# do type detection, by providing an importable version of the cython code.
from distutils.core import setup
+2
View File
@@ -0,0 +1,2 @@
lib\windows-i686\python.exe -OO renpy.py
pause
+109 -158
View File
@@ -1,84 +1,17 @@
#!/home/tom/bin/renpython -OO
# Builds a distributions of Ren'Py.
#!/home/tom/bin/renpython -O
# Builds a distribution of Ren'Py.
import sys
import os
import zipfile
import tarfile
import zlib
import compileall
import shutil
import subprocess
import time
import argparse
import glob
CWD = os.getcwdu()
ROOT = os.path.dirname(os.path.abspath(__file__))
zlib.Z_DEFAULT_COMPRESSION = 9
# Gets the data for the given file.
def data(fn):
rv = file(fn, "rb").read()
if fn.startswith("renpy.app"):
return rv
if fn.endswith(".rpy") or fn.endswith(".rpym") or fn.endswith(".py") or fn.endswith(".txt"):
rv = rv.replace("\n", "\r\n")
rv = rv.replace("\r\r\n", "\r\n")
return rv
def tarup(filename, prefix, files):
tf = tarfile.open(filename, "w:bz2")
tf.dereference = True
sys.stdout.write(filename)
sys.stdout.flush()
for fn in files:
sys.stdout.write(".")
sys.stdout.flush()
tf.add(fn, prefix + "/" + fn, False)
sys.stdout.write("\n")
tf.close()
# Creates a zip file.
def zipup(filename, prefix, files):
zf = zipfile.ZipFile(filename, "w")
sys.stdout.write(filename)
sys.stdout.flush()
for fn in files:
sys.stdout.write(".")
sys.stdout.flush()
zi = zipfile.ZipInfo(prefix + "/" + fn)
st = os.stat(fn)
zi.date_time = time.gmtime(st.st_mtime)[:6]
zi.compress_type = zipfile.ZIP_DEFLATED
zi.create_system = 3
zi.external_attr = long(st.st_mode) << 16
zf.writestr(zi, data(fn))
zf.close()
sys.stdout.write("\n")
sys.stdout.flush()
def copy_tutorial_file(src, dest):
"""
Copies a file from src to dst. Lines between "# tutorial-only" and
@@ -87,10 +20,10 @@ def copy_tutorial_file(src, dest):
sf = open(src, "rb")
df = open(dest, "wb")
# True if we want to copy the line.
copy = True
for l in sf:
if "# tutorial-only" in l:
copy = False
@@ -99,49 +32,20 @@ def copy_tutorial_file(src, dest):
else:
if copy:
df.write(l)
sf.close()
df.close()
def tree(root):
rv = [ ]
for dirname, dirs, filenames in os.walk(root):
if "saves" in dirs:
dirs.remove("saves")
if ".svn" in dirs:
dirs.remove(".svn")
if ".doctrees" in dirs:
dirs.remove(".doctrees")
for f in filenames:
if f[-1] == '~' or f[0] == '.':
continue
if f.endswith(".bak") or f.endswith(".pyc"):
continue
if f == "semantic.cache":
continue
if "libSDL_mixer" in f or "mixer_music" in f:
continue
rv.append(dirname + "/" + f)
return rv
def main():
if not sys.flags.optimize:
raise Exception("Not running with python optimization.")
ap = argparse.ArgumentParser()
ap.add_argument("version")
ap.add_argument("--fast", action="store_true")
args = ap.parse_args()
# Revision updating is done early, so we can do it even if the rest
@@ -156,75 +60,121 @@ 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
with open("renpy/vc_version.py", "w") as f:
f.write("vc_version = {}".format(vc_version))
reload(sys.modules['renpy.vc_version']) #@UndefinedVariable
try:
reload(sys.modules['renpy.vc_version']) #@UndefinedVariable
except:
import renpy.vc_version # @UnusedImport
reload(sys.modules['renpy'])
# Check that the versions match.
full_version = ".".join(str(i) for i in renpy.version_tuple) #@UndefinedVariable
if args.version != "experimental" and not full_version.startswith(args.version):
raise Exception("The command-line and Ren'Py versions do not match.")
if args.version != "renpy-experimental" \
and not args.version.startswith("renpy-nightly-") \
and not full_version.startswith(args.version):
print "Version {} ({})".format(args.version, full_version)
# Copy over the screens, to keep them up to date.
copy_tutorial_file("tutorial/game/screens.rpy", "template/game/screens.rpy")
# Compile all the python files.
compileall.compile_dir("renpy/", ddir="renpy/", force=1, quiet=1)
# Compile the various games
if not args.fast:
for i in [ 'tutorial', 'launcher', 'template', 'the_question' ]:
print "Compiling", i
subprocess.check_call(["./renpy.sh", i, "compile" ])
raise Exception("The command-line and Ren'Py versions do not match.")
# The destination directory.
destination = os.path.join("dl", args.version)
print "Version {} ({})".format(args.version, full_version)
# Perhaps autobuild.
if "RENPY_BUILD_ALL" in os.environ:
print("Autobuild...")
subprocess.check_call(["scripts/autobuild.sh"])
# Copy over the screens, to keep them up to date.
copy_tutorial_file("tutorial/game/screens.rpy", "templates/english/game/screens.rpy")
# Compile all the python files.
compileall.compile_dir("renpy/", ddir="renpy/", force=1, quiet=1)
# Generate launcher/game/script_version.rpy
with open("launcher/game/script_version.rpy", "w") as f:
f.write("init -999 python:\n")
f.write(" config.script_version = {!r}\n".format(renpy.version_tuple[:3])) # @UndefinedVariable
# Compile the various games.
if not args.fast:
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)
if args.fast:
cmd = [
"./renpy.sh",
"launcher",
"distribute",
"launcher",
"./renpy.sh",
"launcher",
"distribute",
"launcher",
"--package",
"sdk",
"--destination",
"--destination",
destination,
"--no-update",
]
else:
cmd = [
"./renpy.sh",
"launcher",
"distribute",
"launcher",
"--destination",
"./renpy.sh",
"launcher",
"distribute",
"launcher",
"--destination",
destination,
]
print
subprocess.check_call(cmd)
# Sign the update.
if not args.fast:
subprocess.check_call([
"scripts/sign_update.py",
"/home/tom/ab/keys/renpy_private.pem",
subprocess.check_call([
"scripts/sign_update.py",
"/home/tom/ab/keys/renpy_private.pem",
os.path.join(destination, "updates.json"),
])
@@ -232,55 +182,56 @@ 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"))
with open("7z.sfx", "rb") as f:
sfx = f.read()
os.chdir(destination)
if os.path.exists(sdk):
shutil.rmtree(sdk)
subprocess.check_call([ "unzip", "-q", sdk + ".zip" ])
if os.path.exists(sdk + ".7z"):
os.unlink(sdk + ".7z")
sys.stdout.write("Creating -sdk.7z")
p = subprocess.Popen([ "7z", "a", sdk +".7z", sdk], stdout=subprocess.PIPE)
for i, _l in enumerate(p.stdout):
if i % 10 != 0:
continue
sys.stdout.write(".")
sys.stdout.flush()
if p.wait() != 0:
raise Exception("7z failed")
with open(sdk + ".7z", "rb") as f:
data = f.read()
with open(sdk + ".7z.exe", "wb") as f:
f.write(sfx)
f.write(data)
os.unlink(sdk + ".7z")
shutil.rmtree(sdk)
else:
os.chdir(destination)
if os.path.exists(sdk + ".7z.exe"):
os.unlink(sdk + ".7z.exe")
print
print "Did you run me with renpython -OO?"
print "Did you update renpy.py and launcher/script_version.rpy?"
print
if __name__ == "__main__":
main()
+83 -79
View File
@@ -42,86 +42,90 @@ display: none;
<p><a name="Basic_Help" id="Basic_Help"></a></p>
<h2><span class="editsection">[<a href="/w/index.php?title=renpy/Help&amp;action=edit&amp;section=1" title="Edit section: Basic Help">edit</a>]</span> <span class="mw-headline">Basic Help</span></h2>
<p>To advance through the game, <tt>left-click</tt> or press the <tt>space</tt> or <tt>enter</tt> keys. When at a menu, <tt>left-click</tt> to make a choice, or use the arrow keys to select a choice and <tt>enter</tt> to activate it.</p>
<p><a name="Game_Menu" id="Game_Menu"></a></p>
<h3><span class="editsection">[<a href="/w/index.php?title=renpy/Help&amp;action=edit&amp;section=2" title="Edit section: Game Menu">edit</a>]</span> <span class="mw-headline">Game Menu</span></h3>
<p>When playing a game, <tt>right-click</tt> or press the <tt>escape</tt> key to enter the game menu. The game menu gives the following choices:</p>
<dl>
<dt>Return</dt>
<dd>Returns to the game.</dd>
<dt>Save Game</dt>
<dd>Allows you to save a game by clicking on a save slot.</dd>
<dt>Load Game</dt>
<dd>Allows you to load a game by clicking on a save slot. Clicking on "Auto" accesses the automatic save slots.</dd>
<dt>Preferences</dt>
<p><a name="Basic_Help" id="Basic_Help"></a></p>
<h2><span class="editsection">[<a href="/w/index.php?title=renpy/Help&amp;action=edit&amp;section=1" title="Edit section: Basic Help">edit</a>]</span> <span class="mw-headline">Basic Help</span></h2>
<p>To advance through the game, <tt>left-click</tt> or press the <tt>space</tt> or <tt>enter</tt> keys. When at a menu, <tt>left-click</tt> to make a choice, or use the arrow keys to select a choice and <tt>enter</tt> to activate it.</p>
<p><a name="Game_Menu" id="Game_Menu"></a></p>
<h3><span class="editsection">[<a href="/w/index.php?title=renpy/Help&amp;action=edit&amp;section=2" title="Edit section: Game Menu">edit</a>]</span> <span class="mw-headline">Game Menu</span></h3>
<p>When playing a game, <tt>right-click</tt> or press the <tt>escape</tt> key to enter the game menu. The game menu gives the following choices:</p>
<dl>
<dt>Return</dt>
<dd>Returns to the game.</dd>
<dt>Save Game</dt>
<dd>Allows you to save a game by clicking on a save slot.</dd>
<dt>Load Game</dt>
<dd>Allows you to load a game by clicking on a save slot. Clicking on "Auto" accesses the automatic save slots.</dd>
<dt>Preferences</dt>
<dd>Changes the game preferences (options/configuration):
<dl>
<dt>Display</dt>
<dd>Switches between fullscreen and windowed mode.</dd>
<dt>Transitions</dt>
<dd>Controls the display of transitions between game screens.</dd>
<dt>Text Speed</dt>
<dd>Controls the rate at which text displays. The further to the right this slider is, the faster the text will display. All the way to the right causes text to be shown instantly.</dd>
<dt>Joystick</dt>
<dd>Lets you control the game using a joystick.</dd>
<dt>Skip</dt>
<dd>Chooses between skipping messages that have been already seen (in any play through the game), and skipping all messages.</dd>
<dt>Begin Skipping</dt>
<dd>Returns to the game, while skipping.</dd>
<dt>After Choices</dt>
<dd>Controls if skipping stops upon reaching a menu.</dd>
<dt>Auto-Forward Time</dt>
<dd>Controls automatic advance. The further to the left this slider is, the shorter the amount of time before the game advances. All the way to the right means text will never auto-forward.</dd>
<dt>Music, Sound, and Voice Volume</dt>
<dd>Controls the volume of the Music, Sound effect, and Voice channels, respectively. The further to the right these are, the louder the volume.</dd>
</dl>
</dd>
</dl>
<dl>
<dt>Main Menu</dt>
<dd>Returns to the main menu, ending the current game.</dd>
<dt>Help</dt>
<dd>Shows this help screen.</dd>
<dt>Quit</dt>
<dd>Exits the game; the game will be closed and ended.</dd>
</dl>
<p><a name="Key_and_Mouse_Bindings" id="Key_and_Mouse_Bindings"></a></p>
<h3><span class="editsection">[<a href="/w/index.php?title=renpy/Help&amp;action=edit&amp;section=3" title="Edit section: Key and Mouse Bindings">edit</a>]</span> <span class="mw-headline">Key and Mouse Bindings</span></h3>
<dl>
<dt>Left-click, Enter</dt>
<dd>Advances through the game, activates menu choices, buttons, and sliders.</dd>
<dt>Space</dt>
<dd>Advances through the game, but does not activate choices.</dd>
<dt>Arrow Keys</dt>
<dd>Selects menu choices, buttons, and sliders.</dd>
<dt>Ctrl</dt>
<dd>Causes skipping to occur while the ctrl key is held down.</dd>
<dt>Tab</dt>
<dd>Toggles skipping, causing it to occur until tab is pressed again.</dd>
<dt>Mousewheel-Up, PageUp</dt>
<dd>Causes rollback to occur. Rollback reverses the game back in time, showing prior text and even allowing menu choices to be changed.</dd>
<dt>Mousewheel-Down, PageDown</dt>
<dd>Causes rollforward to occur, cancelling out a previous rollback.</dd>
<dt>Right-click, Escape</dt>
<dd>Enters the game menu. When in the game menu, returns to the game.</dd>
<dt>Middle-click, H</dt>
<dd>Hides the text window and other transient displays.</dd>
<dt>F</dt>
<dd>Toggles fullscreen mode</dd>
<dt>S</dt>
<dd>Takes a screenshot, saving it in a file named screenshotxxxx.png, where xxxx is a serial number.</dd>
<dt>Alt-M, Command-H</dt>
<dd>Hides (iconifies) the window.</dd>
<dt>Alt-F4, Command-Q</dt>
<dd>Quits the game.</dd>
<dt>Delete</dt>
<dd>When a save slot is selected, deletes that save slot.</dd>
</dl>
<p><a name="Legal_Notice" id="Legal_Notice"></a></p>
<h2><span class="editsection">[<a href="/w/index.php?title=renpy/Help&amp;action=edit&amp;section=4" title="Edit section: Legal Notice">edit</a>]</span> <span class="mw-headline">Legal Notice</span></h2>
<p>This game uses source code from a number of open source projects. For a list, and a location where the source code can be downloaded from, please view the LICENSE.txt file in the renpy directory, or visit <a href="http://www.renpy.org/wiki/renpy/License" class="external free" title="http://www.renpy.org/wiki/renpy/License" rel="nofollow">http://www.renpy.org/wiki/renpy/License</a> .</p>
<dl>
<dt>Display</dt>
<dd>Switches between fullscreen and windowed mode.</dd>
<dt>Transitions</dt>
<dd>Controls the display of transitions between game screens.</dd>
<dt>Text Speed</dt>
<dd>Controls the rate at which text displays. The further to the right this slider is, the faster the text will display. All the way to the right causes text to be shown instantly.</dd>
<dt>Joystick</dt>
<dd>Lets you control the game using a joystick.</dd>
<dt>Skip</dt>
<dd>Chooses between skipping messages that have been already seen (in any play through the game), and skipping all messages.</dd>
<dt>Begin Skipping</dt>
<dd>Returns to the game, while skipping.</dd>
<dt>After Choices</dt>
<dd>Controls if skipping stops upon reaching a menu.</dd>
<dt>Auto-Forward Time</dt>
<dd>Controls automatic advance. The further to the left this slider is, the shorter the amount of time before the game advances. All the way to the right means text will never auto-forward.</dd>
<dt>Music, Sound, and Voice Volume</dt>
<dd>Controls the volume of the Music, Sound effect, and Voice channels, respectively. The further to the right these are, the louder the volume.</dd>
</dl>
</dd>
</dl>
<dl>
<dt>Main Menu</dt>
<dd>Returns to the main menu, ending the current game.</dd>
<dt>Help</dt>
<dd>Shows this help screen.</dd>
<dt>Quit</dt>
<dd>Exits the game; the game will be closed and ended.</dd>
</dl>
<p><a name="Key_and_Mouse_Bindings" id="Key_and_Mouse_Bindings"></a></p>
<h3><span class="editsection">[<a href="/w/index.php?title=renpy/Help&amp;action=edit&amp;section=3" title="Edit section: Key and Mouse Bindings">edit</a>]</span> <span class="mw-headline">Key and Mouse Bindings</span></h3>
<dl>
<dt>Left-click, Enter</dt>
<dd>Advances through the game, activates menu choices, buttons, and sliders.</dd>
<dt>Space</dt>
<dd>Advances through the game, but does not activate choices.</dd>
<dt>Arrow Keys</dt>
<dd>Selects menu choices, buttons, and sliders.</dd>
<dt>Ctrl</dt>
<dd>Causes skipping to occur while the ctrl key is held down.</dd>
<dt>Tab</dt>
<dd>Toggles skipping, causing it to occur until tab is pressed again.</dd>
<dt>Mousewheel-Up, PageUp</dt>
<dd>Causes rollback to occur. Rollback reverses the game back in time, showing prior text and even allowing menu choices to be changed.</dd>
<dt>Mousewheel-Down, PageDown</dt>
<dd>Causes rollforward to occur, cancelling out a previous rollback.</dd>
<dt>Right-click, Escape</dt>
<dd>Enters the game menu. When in the game menu, returns to the game.</dd>
<dt>Middle-click, H</dt>
<dd>Hides the text window and other transient displays.</dd>
<dt>F</dt>
<dd>Toggles fullscreen mode</dd>
<dt>S</dt>
<dd>Takes a screenshot, saving it in a file named screenshotxxxx.png, where xxxx is a serial number.</dd>
<dt>Alt-M, Command-H</dt>
<dd>Hides (iconifies) the window.</dd>
<dt>Alt-F4, Command-Q</dt>
<dd>Quits the game.</dd>
<dt>Delete</dt>
<dd>When a save slot is selected, deletes that save slot.</dd>
<dt>v</dt>
<dd>Toggles self-voicing mode, which reads text to the user using an os-supplied
speech synthesizer. For more information, please read the <a href="http://www.renpy.org/dev-doc/html/self_voicing.html">self-voicing</a>
documentation.</dd>
</dl>
<p><a name="Legal_Notice" id="Legal_Notice"></a></p>
<h2><span class="editsection">[<a href="/w/index.php?title=renpy/Help&amp;action=edit&amp;section=4" title="Edit section: Legal Notice">edit</a>]</span> <span class="mw-headline">Legal Notice</span></h2>
<p>This game uses source code from a number of open source projects. For a list, and a location where the source code can be downloaded from, please view the LICENSE.txt file in the renpy directory, or visit <a href="http://www.renpy.org/wiki/renpy/License" class="external free" title="http://www.renpy.org/wiki/renpy/License" rel="nofollow">http://www.renpy.org/wiki/renpy/License</a> .</p>
</body>
+29 -11
View File
@@ -1,27 +1,45 @@
# 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
# Checks for various abilities that might be taken away from us by
# redistributors.
init 1 python in ability:
from store import config
import store
import store.updater as updater
import os
EXECUTABLES = [ "renpy.exe", "renpy.app", "renpy.sh" ]
# can_distribute - True if we can distribute
# can_distribute - True if we can distribute
for i in EXECUTABLES:
if not os.path.exists(os.path.join(config.renpy_base, i)):
can_distribute = False
else:
can_distribute = True
# can_update - True if we can update.
can_update = updater.can_update() or (store.UPDATE_SIMULATE is not None)
+29 -11
View File
@@ -1,31 +1,49 @@
# 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:
$ version = renpy.version()
frame:
style_group "l"
style "l_root"
window:
xfill True
has vbox xfill True
add "logo.png" xalign 0.5 yoffset -5
add "images/logo.png" xalign 0.5 yoffset -5
null height 15
text _("[version!q]") xalign 0.5 bold True
null height 20
textbutton _("View license") action interface.OpenLicense() xalign 0.5
textbutton _("Back") action Jump("front_page") style "l_left_button"
label about:
call screen about
+30 -9
View File
@@ -1,36 +1,57 @@
# 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:
import os
import codecs
filename = interface.input(_("FILENAME"), _("Enter the name of the script file to create."), filename="withslash", cancel=Jump("navigation"))
if "." in filename and not filename.endswith(".rpy"):
interface.error(_("The filename must have the .rpy extension."), label="navigation")
elif "." not in filename:
filename += ".rpy"
path = os.path.join(project.current.gamedir, filename)
dir = os.path.dirname(path)
if os.path.exists(path):
interface.error(_("The file already exists."), label="navigation")
contents = u"\uFEFF"
contents += _("# 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")
contents += "\n"
try:
os.makedirs(dir)
except:
pass
contents = u"\uFEFF"
contents += _("# 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")
with open(path, "wb") as f:
f.write(contents.encode("utf-8"))
jump navigation_refresh
+674
View File
@@ -0,0 +1,674 @@
# 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_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_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.")
OK_TEXT = _("Choose \"Build\" to build the current project, or attach an Android device and choose \"Build & Install\" to build and install it on the device.")
PHONE_TEXT = _("Attempts to emulate an Android phone.\n\nTouch input is emulated through the mouse, but only when the button is held down. Escape is mapped to the menu button, and PageUp is mapped to the back button.")
TABLET_TEXT = _("Attempts to emulate an Android tablet.\n\nTouch input is emulated through the mouse, but only when the button is held down. Escape is mapped to the menu button, and PageUp is mapped to the back button.")
OUYA_TEXT = _("Attempts to emulate a televison-based Android console, like the OUYA or Fire TV.\n\nController input is mapped to the arrow keys, Enter is mapped to the select button, Escape is mapped to the menu button, and PageUp is mapped to the back button.")
INSTALL_SDK_TEXT = _("Downloads and installs the Android SDK and supporting packages. Optionally, generates the keys required to sign the package.")
CONFIGURE_TEXT = _("Configures the package name, version, and other information about this project.")
PLAY_KEYS_TEXT = _("Opens the file containing the Google Play keys in the editor.\n\nThis is only needed if the application is using an expansion APK. Read the documentation for more details.")
BUILD_TEXT = _("Builds the Android package.")
BUILD_AND_INSTALL_TEXT = _("Builds the Android package, and installs it on an Android device connected to your computer.")
CONNECT_TEXT = _("Connects to an Android device running ADB in TCP/IP mode.")
DISCONNECT_TEXT = _("Disconnects from an Android device running ADB in TCP/IP mode.")
import subprocess
import re
import os
import json
def find_rapt():
global RAPT_PATH
candidates = [ ]
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()
import threading
if RAPT_PATH:
import rapt
import rapt.build
import rapt.configure
import rapt.install_sdk
import rapt.plat
import rapt.interface
else:
rapt = None
def AndroidState():
"""
Determines the state of the android install, and returns it.
"""
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(rapt.plat.path("android-sdk/extras/google/play_licensing")):
return ANDROID_NO_SDK
if not os.path.exists(rapt.plat.path("android.keystore")):
return ANDROID_NO_KEY
if not os.path.exists(rapt.plat.path("local.properties")):
return ANDROID_NO_KEY
if not os.path.exists(os.path.join(project.current.path, ".android.json")):
return ANDROID_NO_CONFIG
return ANDROID_OK
def AndroidStateText(state):
"""
Returns text corresponding to the state.
"""
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:
return NO_KEY_TEXT
if state == ANDROID_NO_CONFIG:
return NO_CONFIG_TEXT
if state == ANDROID_OK:
return OK_TEXT
def AndroidIfState(state, needed, action):
"""
If `state` is `needed` or better, `action` is returned. Otherwise,
returns None, disabling the button.
"""
if state >= needed:
return action
else:
return None
class AndroidInterface(object):
def __init__(self):
self.process = None
self.filename = project.current.temp_filename("android.txt")
self.info_msg = ""
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)
def yesno_choice(self, prompt, default=None):
choices = [ (True, "Yes"), (False, "No") ]
return interface.choice(prompt, choices, default)
def terms(self, url, prompt):
submessage = _("{a=%s}%s{/a}") % (url, url)
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):
if empty is None:
empty = ''
while True:
rv = interface.input(_("QUESTION"), prompt, default=empty, cancel=Jump("android"))
rv = rv.strip()
if rv:
return rv
def choice(self, prompt, choices, default):
return interface.choice(prompt, choices, default, cancel=Jump("android"))
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.
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 run_yes_thread(self):
import time
try:
while self.run_yes:
self.process.stdin.write('y\n')
self.process.stdin.flush()
time.sleep(.2)
except:
import traceback
traceback.print_exc()
def call(self, cmd, cancel=False, use_path=False, yes=False):
print
print " ".join(cmd)
self.cmd = cmd
f = open(self.filename, "a")
f.write("\n\n\n")
if cancel:
cancel_action = self.cancel
else:
cancel_action = None
startupinfo = None
if renpy.windows:
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
self.yes_thread = None
try:
interface.processing(self.info_msg, show_screen=True, cancel=cancel_action)
kwargs = { }
if yes:
kwargs["stdin"] = subprocess.PIPE
try:
self.process = subprocess.Popen(cmd, cwd=RAPT_PATH, stdout=f, stderr=f, startupinfo=startupinfo, **kwargs)
except:
import traceback
traceback.print_exc(file=f)
raise
if yes:
import threading
self.run_yes = True
self.yes_thread = threading.Thread(target=self.run_yes_thread)
self.yes_thread.daemon = True
self.yes_thread.start()
renpy.call_screen("android_process", interface=self)
finally:
f.close()
interface.hide_screen()
if yes and self.yes_thread:
self.run_yes = False
self.yes_thread.join()
self.process = None
self.yes_thread = None
def check_process(self):
rv = self.process.poll()
if rv is not None:
if rv:
raise subprocess.CalledProcessError(rv, self.cmd)
else:
return True
def download(self, url, dest):
try:
d = Downloader(url, dest)
cancel_action = [ d.cancel, Jump("android") ]
interface.processing(self.info_msg, show_screen=True, cancel=cancel_action, bar_value=DownloaderValue(d))
ui.timer(.1, action=d.check, repeat=True)
ui.interact()
finally:
interface.hide_screen()
def background(self, f):
try:
t = threading.Thread(target=f)
t.start()
interface.processing(self.info_msg, show_screen=True)
while t.is_alive():
renpy.pause(0)
t.join(0.25)
finally:
interface.hide_screen()
def cancel(self):
if self.process:
self.process.terminate()
renpy.jump("android")
class AndroidBuild(Action):
"""
Activates an Android build process.
"""
def __init__(self, label):
self.label = label
def __call__(self):
renpy.jump(self.label)
class LaunchEmulator(Action):
def __init__(self, emulator, variants):
self.emulator = emulator
self.variants = variants
def __call__(self):
env = {
"RENPY_EMULATOR" : self.emulator,
"RENPY_VARIANT" : self.variants,
}
p = project.current
p.launch(env=env)
def update_android_json(p, gui):
"""
Updates .android.json to include the google play information.
`p`
The project to update json for.
"""
p.update_dump(True, gui=gui)
build = p.dump["build"]
filename = os.path.join(p.path, ".android.json")
with open(filename, "r") as f:
android_json = json.load(f)
if "google_play_key" in build:
android_json["google_play_key"] = build["google_play_key"]
else:
android_json.pop("google_play_key", None)
if "google_play_salt" in build:
if len(build["google_play_salt"]) != 20:
raise Exception("build.google_play_salt must be exactly 20 bytes long.")
android_json["google_play_salt"] = ", ".join(str(i) for i in build["google_play_salt"])
else:
android_json.pop("google_play_salt", None)
with open(filename, "w") as f:
json.dump(android_json, f)
def android_build(command, p=None, gui=True):
"""
This actually builds the package.
"""
if p is None:
p = project.current
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(p,
reporter=reporter,
packages=[ 'android' ],
build_update=False,
noarchive=True,
packagedest=dist,
report_success=False,
)
with interface.nolinks():
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 not isinstance(v, str):
os.environ[k] = renpy.fsencode(v)
screen android_process(interface):
zorder 100
default ft = FileTail(interface.filename)
text "[ft.text!q]":
size 14
color TEXT
font "Roboto-Light.ttf"
xpos 75
ypos 350
timer .1 action interface.check_process repeat True
timer .2 action ft.update repeat True
screen android:
default tt = Tooltip(None)
$ state = AndroidState()
frame:
style_group "l"
style "l_root"
window:
has vbox
label _("Android: [project.current.name!q]")
add HALF_SPACER
hbox:
# Left side.
frame:
style "l_indent"
xmaximum ONEHALF
xfill True
has vbox
add SEPARATOR2
frame:
style "l_indent"
has vbox
text _("Emulation:")
add HALF_SPACER
frame style "l_indent":
has vbox
textbutton _("Phone"):
action LaunchEmulator("touch", "small phone touch android")
hovered tt.Action(PHONE_TEXT)
textbutton _("Tablet"):
action LaunchEmulator("touch", "medium tablet touch android")
hovered tt.Action(TABLET_TEXT)
textbutton _("Television / OUYA"):
action LaunchEmulator("tv", "small tv ouya android")
hovered tt.Action(OUYA_TEXT)
add SPACER
add SEPARATOR2
frame:
style "l_indent"
has vbox
text _("Build:")
add HALF_SPACER
frame style "l_indent":
has vbox
textbutton _("Install SDK & Create Keys"):
action AndroidIfState(state, ANDROID_NO_SDK, Jump("android_installsdk"))
hovered tt.Action(INSTALL_SDK_TEXT)
textbutton _("Configure"):
action AndroidIfState(state, ANDROID_NO_CONFIG, Jump("android_configure"))
hovered tt.Action(CONFIGURE_TEXT)
textbutton _("Build Package"):
action AndroidIfState(state, ANDROID_OK, AndroidBuild("android_build"))
hovered tt.Action(BUILD_TEXT)
textbutton _("Build & Install"):
action AndroidIfState(state, ANDROID_OK, AndroidBuild("android_build_and_install"))
hovered tt.Action(BUILD_AND_INSTALL_TEXT)
add SPACER
add SEPARATOR2
frame:
style "l_indent"
has vbox
text _("Other:")
add HALF_SPACER
frame style "l_indent":
has vbox
textbutton _("Remote ADB Connect"):
action AndroidIfState(state, ANDROID_OK, Jump("android_connect"))
hovered tt.Action(CONNECT_TEXT)
textbutton _("Remote ADB Disconnect"):
action AndroidIfState(state, ANDROID_OK, Jump("android_disconnect"))
hovered tt.Action(DISCONNECT_TEXT)
# Right side.
frame:
style "l_indent"
xmaximum ONEHALF
xfill True
has vbox
add SEPARATOR2
frame:
style "l_indent"
has vbox
add SPACER
if tt.value:
text tt.value
else:
text AndroidStateText(state)
textbutton _("Back") action Jump("front_page") style "l_left_button"
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
label android_installsdk:
python:
with interface.nolinks():
rapt.install_sdk.install_sdk(AndroidInterface())
jump android
label android_configure:
python:
rapt.configure.configure(AndroidInterface(), project.current.path)
jump android
label android_build:
$ android_build([ 'release' ])
jump android
label android_build_and_install:
$ android_build([ 'release', 'install' ])
jump android
label android_connect:
python hide:
if persistent.connect_address is not None:
address = persistent.connect_address
else:
address = ""
while True:
address = interface.input(
_("Remote ADB Address"),
_("Please enter the IP address and port number to connect to, in the form \"192.168.1.143:5555\". Consult your device's documentation to determine if it supports remote ADB, and if so, the address and port to use."),
default=address,
cancel=Jump("android"),
)
address = address.strip()
try:
host, port = address.split(":")
except:
interface.error(_("Invalid remote ADB address"), _("The address must contain one exactly one ':'."), label=None)
continue
if " " in host:
interface.error(_("Invalid remote ADB address"), _("The host may not contain whitespace."), label=None)
continue
try:
int(port)
except:
interface.error(_("Invalid remote ADB address"), _("The port must be a number."), label=None)
continue
break
persistent.connect_address = address
rapt_interface = AndroidInterface()
rapt.build.connect(rapt_interface, address)
jump android
label android_disconnect:
python hide:
rapt_interface = AndroidInterface()
rapt.build.disconnect(rapt_interface)
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)
+26 -8
View File
@@ -1,8 +1,26 @@
# 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
# associated index file. These files are really easy to
# reverse-engineer, but are probably better than nothing.
init python in archiver:
@@ -23,16 +41,16 @@ init python in archiver:
# The archive file.
self.f = open(filename, "wb")
# The index to the file.
self.index = _dict()
# A fixed key minimizes difference between archive versions.
self.key = 0x42424242
padding = "RPA-3.0 XXXXXXXXXXXXXXXX XXXXXXXX\n"
self.f.write(padding)
def add(self, name, path):
"""
Adds a file to the archive.
@@ -55,7 +73,7 @@ init python in archiver:
self.index[name].append((offset ^ self.key, dlen ^ self.key, ""))
def close(self):
indexoff = self.f.tell()
self.f.write(dumps(self.index, HIGHEST_PROTOCOL).encode("zlib"))
@@ -64,4 +82,4 @@ init python in archiver:
self.f.write("RPA-3.0 %016x %08x\n" % (indexoff, self.key))
self.f.close()
+60 -39
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.
@@ -16,7 +37,7 @@ class BinFile(object):
self.a[addr+1] = (value >> 8) & 0xff
self.a[addr+2] = (value >> 16) & 0xff
self.a[addr+3] = (value >> 24) & 0xff
def u32(self):
addr = self.addr
rv = self.a[addr]
@@ -46,7 +67,7 @@ class BinFile(object):
rv += unichr(self.u16())
return rv
def seek(self, addr):
self.addr = addr
@@ -55,7 +76,7 @@ class BinFile(object):
def substring(self, start, len): #@ReservedAssignment
return self.a[start:start+len].tostring()
def __init__(self, data):
self.a = array.array('B')
self.a.fromstring(data)
@@ -66,7 +87,7 @@ class BinFile(object):
# The virtual address of the resource segment.
resource_virtual = 0
# This parses a data block out of the resources.
def parse_data(bf, offset):
bf.seek(offset)
@@ -95,7 +116,7 @@ def parse_directory(bf, offset):
n_id = bf.u16()
entries = [ ]
for _i in range(n_named + n_id):
entries.append((bf.u32(), bf.u32()))
@@ -113,8 +134,8 @@ def parse_directory(bf, offset):
value = parse_data(bf, value)
rv[name] = value
return rv
return rv
##############################################################################
@@ -124,7 +145,7 @@ def show_resources(d, prefix):
if not isinstance(d, dict):
print prefix, "Codepage", d[0], "length", len(d[1])
return
for k in d:
print prefix, k
show_resources(d[k], prefix + " ")
@@ -141,7 +162,7 @@ class Packer(object):
self.entries = ""
self.entries_offset = 0
head = self.pack_dict(d, 0)
self.data = ""
@@ -151,44 +172,44 @@ class Packer(object):
self.entries_offset = len(head)
return self.pack_dict(d, 0) + self.entries + self.data
def pack_name(self, s):
rv = self.data_offset + len(self.data)
l = len(s)
s = s.encode("utf-16le")
self.data += struct.pack("<H", l) + s + "\0\0"
return rv
def pack_tuple(self, t):
codepage, data = t
rv = len(self.entries) + self.entries_offset
rv = len(self.entries) + self.entries_offset
if len(self.data) % 2:
self.data += "P"
daddr = len(self.data) + self.data_offset
self.entries += struct.pack("<IIII", daddr + resource_virtual, len(data), codepage, 0)
self.data += data
# if len(self.data) % 1 == 1:
# self.data += 'P'
return rv
def pack_dict(self, d, offset):
name_entries = sorted((a, b) for a, b in d.iteritems() if isinstance(a, unicode))
id_entries = sorted((a, b) for a, b in d.iteritems() if isinstance(a, int))
rv = struct.pack("<IIHHHH", 0, 0, 4, 0, len(name_entries), len(id_entries))
offset += len(rv) + (len(name_entries) + len(id_entries)) * 8
rest = ""
for (name, value) in name_entries + id_entries:
if isinstance(name, unicode):
name = 0x80000000 | self.pack_name(name)
@@ -200,11 +221,11 @@ class Packer(object):
rest += packed
else:
addr = self.pack_tuple(value)
rv += struct.pack("<II", name, addr)
return rv + rest
##############################################################################
# This loads in an icon file, and returns a dictionary that is suitable for
# use in the resources of an exe file.
@@ -219,8 +240,8 @@ def load_icon(fn):
rv = { }
rv[3] = { }
group = struct.pack("HHH", 0, 1, count)
group = struct.pack("HHH", 0, 1, count)
for i in range(count):
width = f.u8()
height = f.u8()
@@ -235,17 +256,17 @@ def load_icon(fn):
f.seek(offset + 16)
if not f.u32():
f.set_u32(offset + 20, 0)
rv[3][i + 1] = { 0 : (1252, f.substring(offset, size)) }
group += struct.pack("BBBBHHIH", width, height, colors, reserved,
planes, bpp, size, i + 1)
f.seek(addr)
rv[14] = { 1 : { 0 : (1252, group) } }
return rv
@@ -269,25 +290,25 @@ def change_icons(oldexe, icofn):
physize = rsrc_section.SizeOfRawData
virsize = rsrc_section.Misc_VirtualSize
f = file(oldexe, "rb")
f.seek(base)
data = f.read(physize)
f.close()
bf = BinFile(data)
resources = parse_directory(bf, 0)
# show_resources(resources, "")
resources.update(load_icon(icofn))
# show_resources(resources, "")
rsrc = Packer().pack(resources)
alignment = pe.OPTIONAL_HEADER.SectionAlignment
# print "Alignment is", alignment
if len(rsrc) % alignment:
pad = alignment - (len(rsrc) % alignment)
padding = "RENPYVNE" * (pad / 8 + 1)
@@ -295,34 +316,34 @@ def change_icons(oldexe, icofn):
rsrc += padding
newsize = len(rsrc)
rsrc_section.Misc_VirtualSize += newsize - virsize
rsrc_section.Misc_PhysicalAddress += newsize - virsize
rsrc_section.Misc += newsize - virsize
rsrc_section.SizeOfRawData += newsize - physize
pe.OPTIONAL_HEADER.SizeOfInitializedData += newsize - physize
pe.OPTIONAL_HEADER.SizeOfInitializedData += newsize - physize
# Resource size.
pe.OPTIONAL_HEADER.DATA_DIRECTORY[2].Size += newsize - virsize
# Compute the total size of the image.
total_size = 0
for i in pe.sections:
sec_size = i.Misc_VirtualSize
sec_size = sec_size - (sec_size % alignment) + alignment
total_size += sec_size
pe.OPTIONAL_HEADER.SizeOfImage = total_size
return pe.write()[:base] + rsrc
return pe.write()[:base] + rsrc
if __name__ == "__main__":
f = file(sys.argv[3], "wb")
f.write(change_icons(sys.argv[1], sys.argv[2]))
f.close()
+107 -73
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
@@ -11,121 +29,132 @@ init python:
"""
Gets a list of all of the theme names we know about.
"""
names = list(theme_data.THEME.keys())
names.sort(key=lambda a : a.lower())
return names
def scheme_names(theme):
"""
Gets a list of the color scheme names corresponding to the given
theme.
"""
names = list(theme_data.THEME[theme].keys())
names.sort(key=lambda a : a.lower())
return names
def theme_yinitial():
names = theme_names()
if len(names) < 2:
return 0
return 1.0 * names.index(current_theme) / (len(names) - 1)
def scheme_yinitial():
names = scheme_names(current_theme)
if len(names) < 2:
return 0
return 1.0 * names.index(current_scheme) / (len(names) - 1)
def pick_theme(theme, scheme):
"""
Returns a theme and scheme that are similar to `theme` and `scheme`.
Returns a theme and scheme that are similar to `theme` and `scheme`.
If the theme is known, picks it, otherwise picks a random theme. If
the scheme is known for that theme, picks it, otherwise picks a
the scheme is known for that theme, picks it, otherwise picks a
random scheme that is known for the current theme.
"""
if theme not in theme_data.THEME:
theme = random.choice(list(theme_data.THEME))
schemes = theme_data.THEME[theme]
if scheme not in schemes:
if theme in schemes:
scheme = theme
else:
scheme = random.choice(list(schemes))
return theme, scheme
def implement_theme(theme, scheme):
"""
Implement the current theme.
This function uses non-public APIs.
"""
global showing_theme, showing_scheme
if theme == showing_theme and scheme == showing_scheme:
return
renpy.style.restore(style_backup)
exec theme_data.THEME[theme][scheme] in globals()
renpy.style.rebuild()
# Rebuild the style cache.
renpy.style.rebuild(False)
# Bust the render cache, so we re-evaluate the styles.
renpy.display.interface.kill_textures()
showing_theme = theme
showing_scheme = scheme
renpy.restart_interaction()
showing_theme = None
showing_scheme = None
class SetTheme(Action):
def __init__(self, theme):
self.theme = theme
def __call__(self):
global current_theme
global current_scheme
global current_scheme
current_theme, current_scheme = pick_theme(self.theme, current_scheme)
implement_theme(current_theme, current_scheme)
renpy.restart_interaction()
def get_selected(self):
return current_theme == self.theme
class SetScheme(Action):
def __init__(self, scheme):
self.scheme = scheme
def __call__(self):
global current_theme
global current_scheme
global current_scheme
current_theme, current_scheme = pick_theme(current_theme, self.scheme)
implement_theme(current_theme, current_scheme)
renpy.restart_interaction()
def get_selected(self):
return current_scheme == self.scheme
class PreviewTheme(Action):
def __init__(self, theme, scheme):
self.theme = theme
self.scheme = scheme
def __call__(self):
theme, scheme = pick_theme(self.theme, self.scheme)
implement_theme(theme, scheme)
def unhovered(self):
if (showing_theme == self.theme and showing_scheme == self.scheme):
implement_theme(current_theme, current_scheme)
@@ -135,11 +164,11 @@ init python:
##########################################################################
# Code to update options.rpy
def list_logical_lines(filename):
"""
This reads in filename, and turns it into a list of logical
lines.
lines.
"""
f = codecs.open(filename, "rb", "utf-8")
@@ -227,7 +256,7 @@ init python:
continue
continue
line += c
pos += 1
@@ -239,7 +268,7 @@ init python:
def switch_theme():
"""
Switches the theme of the current project to the current theme
Switches the theme of the current project to the current theme
and color scheme. (As set in current_theme and current_scheme.)
"""
@@ -258,7 +287,7 @@ init python:
if (not changed) and m and (m.group(1) in theme_data.THEME_FUNCTIONS):
l = " " + theme_code
changed = True
out.write(l + "\n")
if changed:
@@ -272,7 +301,7 @@ init python:
else:
os.unlink(filename + ".new")
interface.error(_("Could not change the theme. Perhaps options.rpy was changed too much."))
# Now give the theme's screen-ops function a chance to make any
# necessary changes to the screens.rpy file
@@ -289,13 +318,13 @@ init python:
for l in lines:
out.write(l + "\n")
changed = True
if changed:
try:
os.unlink(filename + ".bak")
except:
pass
os.rename(filename, filename + ".bak")
os.rename(filename + ".new", filename)
@@ -307,13 +336,20 @@ init python:
pass
pass
def make_style_backup():
"""
Call this to back up the styles. This should be called in a
translate python block in each translation.
"""
init 100 python:
style_backup = renpy.style.backup()
global style_backup
style_backup = renpy.style.backup()
translate None python:
make_style_backup()
screen theme_demo:
window:
style "gm_root"
xpadding 5
@@ -324,16 +360,16 @@ screen theme_demo:
style_group "prefs"
vbox:
frame:
style_group "pref"
has vbox
label _("Display")
textbutton _("Window") action SelectedIf(True)
textbutton _("Fullscreen") action ui.returns(None)
textbutton _("Planetarium") action None
frame:
style_group "pref"
@@ -368,16 +404,16 @@ screen choose_theme:
frame:
style_group "l"
style "l_root"
window:
has vbox
label _("Choose Theme")
hbox:
yfill True
# Theme selector.
frame:
style "l_indent"
@@ -385,47 +421,47 @@ screen choose_theme:
xmaximum 225
has vbox
label _("Theme") style "l_label_small"
viewport:
scrollbars "vertical"
yinitial theme_yinitial()
mousewheel True
has vbox
for i in theme_names():
textbutton "[i]":
action SetTheme(i)
hovered PreviewTheme(i, current_scheme)
style "l_list2"
style "l_list2"
# Color scheme selector.
frame:
style "l_indent"
bottom_margin HALF_SPACER_HEIGHT
xmaximum 225
has vbox
label _("Color Scheme") style "l_label_small"
viewport:
scrollbars "vertical"
mousewheel True
yinitial scheme_yinitial()
has vbox
for i in scheme_names(current_theme):
textbutton "[i]":
textbutton "[i]":
action SetScheme(i)
hovered PreviewTheme(current_theme, i)
style "l_list2"
style "l_list2"
# Preview
frame:
style "l_default"
@@ -437,19 +473,19 @@ screen choose_theme:
yfill True
xmargin 20
bottom_margin 6
use theme_demo
textbutton _("Back") action Jump("front_page") style "l_left_button"
textbutton _("Continue") action Return(True) style "l_right_button"
label choose_theme_callable:
python:
current_theme, current_scheme = pick_theme(None, None)
implement_theme(current_theme, current_scheme)
implement_theme(current_theme, current_scheme)
call screen choose_theme
python hide:
@@ -457,9 +493,7 @@ label choose_theme_callable:
switch_theme()
return
label choose_theme:
call choose_theme_callable
jump front_page
File diff suppressed because it is too large Load Diff
+71 -58
View File
@@ -1,70 +1,88 @@
# 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):
def __init__(self, name):
self.name = name
def get_selected(self):
return self.name in project.current.data['packages']
return self.name in project.current.data['packages']
def __call__(self):
packages = project.current.data['packages']
if self.name in packages:
packages.remove(self.name)
else:
packages.append(self.name)
project.current.save_data()
renpy.restart_interaction()
class DataToggle(Action):
def __init__(self, field):
self.field = field
def get_selected(self):
return project.current.data[self.field]
def __call__(self):
project.current.data[self.field] = not project.current.data[self.field]
project.current.save_data()
renpy.restart_interaction()
DEFAULT_BUILD_INFO = """
## This section contains information about how to build your project into
## This section contains information about how to build your project into
## distribution files.
init python:
## The name that's used for directories and archive files. For example, if
## this is 'mygame-1.0', the windows distribution will be in the
## directory 'mygame-1.0-win', in the 'mygame-1.0-win.zip' file.
build.directory_name = "PROJECTNAME-1.0"
## The name that's uses for executables - the program that users will run
## to start the game. For example, if this is 'mygame', then on Windows,
## users can click 'mygame.exe' to start the game.
build.executable_name = "PROJECTNAME"
## If True, Ren'Py will include update information into packages. This
## allows the updater to run.
build.include_update = False
## File patterns:
##
##
## The following functions take file patterns. File patterns are case-
## insensitive, and matched against the path relative to the base
## directory, with and without a leading /. If multiple patterns match,
## the first is used.
##
##
##
## In a pattern:
##
## /
## /
## Is the directory separator.
## *
## Matches all characters, except the directory separator.
@@ -87,9 +105,9 @@ init python:
build.classify('**/.**', None)
build.classify('**/#**', None)
build.classify('**/thumbs.db', None)
## To archive files, classify them as 'archive'.
# build.classify('game/**.png', 'archive')
# build.classify('game/**.jpg', 'archive')
@@ -100,7 +118,7 @@ init python:
build.documentation('*.txt')
"""
# A screen that displays a file or directory name, and
# A screen that displays a file or directory name, and
# lets the user change it,
#
# title
@@ -108,17 +126,17 @@ init python:
# value
# The value of the field.
screen distribute_name:
add SEPARATOR2
frame:
style "l_indent"
has vbox
text title
add HALF_SPACER
frame:
style "l_indent"
text "[value!q]"
@@ -127,27 +145,27 @@ screen distribute_name:
screen build_distributions:
frame:
style_group "l"
style "l_root"
window:
has vbox
label _("Build Distributions: [project.current.name!q]")
add HALF_SPACER
hbox:
# Left side.
frame:
style "l_indent"
xmaximum ONEHALF
xfill True
has vbox
use distribute_name(
@@ -159,23 +177,23 @@ screen build_distributions:
value=project.current.dump["build"]["executable_name"])
add SEPARATOR2
frame:
style "l_indent"
has vbox
text _("Actions:")
add HALF_SPACER
frame style "l_indent":
has vbox
textbutton _("Edit options.rpy") action editor.Edit("game/options.rpy", check=True)
textbutton _("Refresh") action Jump("build_distributions")
# Right side.
frame:
style "l_indent"
@@ -185,23 +203,22 @@ screen build_distributions:
has vbox
add SEPARATOR2
frame:
style "l_indent"
has vbox
text _("Build Packages:")
add HALF_SPACER
$ packages = project.current.dump["build"]["packages"]
for pkg in packages:
$ description = pkg["description"]
textbutton "[description!q]" action PackageToggle(pkg["name"]) style "l_checkbox"
if not pkg["hidden"]:
$ description = pkg["description"]
textbutton "[description!q]" action PackageToggle(pkg["name"]) style "l_checkbox"
add SPACER
if project.current.dump["build"]["include_update"]:
@@ -214,34 +231,30 @@ screen build_distributions:
label build_update_dump:
python:
project.current.update_dump(True)
if project.current.dump.get("error", False):
interface.error(_("Errors were detected when running the project. Please ensure the project runs without errors before building distributions."))
return
label build_distributions:
call build_update_dump
if not project.current.dump["build"]["directory_name"]:
jump build_missing
call screen build_distributions
label build_missing:
python hide:
interface.yesno(_("Your project does not contain build information. Would you like to add build information to the end of options.rpy?"), yes=Return(True), no=Jump("front_page"))
build_info = DEFAULT_BUILD_INFO.replace("PROJECTNAME", project.current.name)
with open(os.path.join(project.current.path, "game", "options.rpy"), "a") as f:
f.write(build_info)
jump build_distributions
+150
View File
@@ -0,0 +1,150 @@
# 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
import os
import threading
import time
class Downloader(object):
def __init__(self, url, dest):
"""
Downloads `url` to `dest`, providing progress reports
as necessary.
"""
self.url = url
# The destination file, and the destination temp file.
self.dest = dest
self.tmp = dest + ".tmp"
# Open the tmpfile.
self.safe_unlink(self.tmp)
self.tmpfile = open(self.tmp, "wb")
# Set by the thread to indicate progress (ranges from 0.0 to 1.0).
self.progress = 0.0
# This is set to true by cancel() to indicate the download should be cancelled.
self.cancelled = False
# Set on succes or failure.
self.success = False
self.failure = None
try:
# Open the URL.
self.urlfile = urllib2.urlopen(url)
t = threading.Thread(target=self.thread)
t.daemon = True
t.start()
except Exception as e:
self.failure = str(e)
def thread(self):
try:
count = 0
if "content-length" in self.urlfile.headers:
length = int(self.urlfile.headers["content-length"])
else:
length = 0
while not self.cancelled:
data = self.urlfile.read(65536)
if not data:
break
count += len(data)
self.tmpfile.write(data)
if length > 0:
self.progress = 1.0 * count / length
self.tmpfile.close()
if self.cancelled:
return
if length and count != length:
self.failure = "Download length does not match content length."
return
self.safe_unlink(self.dest)
os.rename(self.tmp, self.dest)
self.success = True
except Exception as e:
self.failure = str(e)
def safe_unlink(self, fn):
if os.path.exists(fn):
os.unlink(fn)
def cancel(self):
"""
Cancels the download.
"""
self.cancelled = True
def check(self):
"""
Returns True if the download is finished, False if it was cancelled,
None if it's ongoing, and raises an Exception if the download has failed.
"""
if self.success:
return True
if self.cancelled:
return False
if self.failure:
raise Exception("Downloading {} to {} failed: {}".format(self.url, self.dest, self.failure))
return None
class DownloaderValue(BarValue):
"""
A BarValue that reports the progress of a background download.
"""
def __init__(self, d):
self.downloader = d
def get_adjustment(self):
self.adjustment = ui.adjustment(value=0.0, range=1.0, adjustable=False)
return self.adjustment
def periodic(self, st):
self.adjustment.change(self.downloader.progress)
return .25
+178 -101
View File
@@ -1,41 +1,60 @@
# 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.
#
# This contains code for scanning for editors, and for allowing the user to
# select an editor.
init python in editor:
init 1 python in editor:
from store import Action, renpy, config, persistent
import store.project as project
import store.updater as updater
import store.interface as interface
import store.util as util
import store
import glob
import re
import traceback
import os
import os.path
# Should we set up the editor?
set_editor = "RENPY_EDIT_PY" not in os.environ
# A map from editor name to EditorInfo object.
editors = { }
class EditorInfo(object):
def __init__(self, filename):
# The path to the editor info file.
self.filename = filename
# The name of the editor.
self.name = os.path.basename(filename)[:-len(".edit.py")]
# The time the editor file was last modified. We use this
# to decide if we should update the editors mat when we
# to decide if we should update the editors mat when we
# have multiple versions of an editor in contention.
self.mtime = os.path.getmtime(filename)
@@ -46,13 +65,13 @@ init python in editor:
"""
ei = EditorInfo(filename)
if ei.name in editors:
if editors[ei.name].mtime >= ei.mtime:
return
editors[ei.name] = ei
def scan_all():
"""
Finds all *.edit.py files, and uses them to populate the list
@@ -60,13 +79,24 @@ init python in editor:
"""
editors.clear()
for d in [ config.renpy_base, persistent.projects_directory ]:
if d is None:
continue
for filename in glob.glob(d + "/*/*.edit.py"):
scan_editor(filename)
if not os.path.isdir(d):
continue
for i in util.listdir(d):
i = os.path.join(d, i)
if not os.path.isdir(d):
continue
for j in util.listdir(i):
j = os.path.join(i, j)
if j.endswith(".edit.py"):
scan_editor(j)
########################################################################
@@ -78,42 +108,42 @@ init python in editor:
class FancyEditorInfo(object):
"""
Represents an editor in the selection screen. A FEI knows if the
Represents an editor in the selection screen. A FEI knows if the
editor is installed or not.
"""
def __init__(self, priority, name, description=None, dlc=None, dldescription=None, error_message=None):
# The priority of the editor. Lower priorities will come later
# in the list.
self.priority = priority
# The name of the editor.
self.name = name
# Is the editor installed?
self.installed = name in editors
# The dlc needed to install the editor.
self.dlc = dlc
# A description of the editor.
self.description = description
# A description of the download.
self.dldescription = dldescription
# An error message to display if the editor failed to start.
self.error_message = error_message
def fancy_scan_editors():
"""
Creates the list of FancyEditorInfo objects.
"""
global fancy_editors
scan_all()
fei = fancy_editors = [ ]
# Editra.
@@ -134,36 +164,36 @@ init python in editor:
dlc = "editra-linux"
installed = os.path.exists(os.path.join(config.basedir, "editra/Editra"))
description = EDL
error_message = _("The may have occured because wxPython is not installed on this system.")
error_message = _("This may have occured because wxPython is not installed on this system.")
e = FancyEditorInfo(
1,
"Editra",
"Editra",
description,
dlc,
_("Up to 22 MB download required."),
error_message)
e.installed = e.installed or installed
fei.append(e)
# jEdit
fei.append(FancyEditorInfo(
2,
"jEdit",
"A mature editor that requires Java.",
_("A mature editor that requires Java."),
"jedit",
_("1.8 MB download required."),
_("This may have occured because Java is not installed on this system."),
))
fei.append(FancyEditorInfo(
3,
"System Editor",
"Invokes the editor your operating system has associated with .rpy files.",
_("Invokes the editor your operating system has associated with .rpy files."),
None))
for k in editors:
if k in [ "Editra", "jEdit", "System Editor", "None" ]:
continue
@@ -173,13 +203,13 @@ init python in editor:
k,
None,
None))
fei.append(FancyEditorInfo(
5,
"None",
"Prevents Ren'Py from opening a text editor.",
_("Prevents Ren'Py from opening a text editor."),
None))
fei.sort(key=lambda e : (e.priority, e.name.lower()))
# If we're in a linux distro or something, assume all editors work.
@@ -190,40 +220,40 @@ init python in editor:
def fancy_activate_editor(default=False):
"""
Activates the editor in persistent.editor, if it's installed.
`default`
"""
global error_message
fancy_scan_editors()
if default and not set_editor:
renpy.editor.init()
return
for i in fancy_editors:
if i.name == persistent.editor:
if i.installed and i.name in editors:
ei = editors[i.name]
os.environ["RENPY_EDIT_PY"] = renpy.fsencode(os.path.abspath(ei.filename))
error_message = i.error_message
break
else:
persistent.editor = None
os.environ.pop("RENPY_EDIT_PY", None)
renpy.editor.init()
def fancy_select_editor(name):
"""
Selects the editor with the given name, installing it if it
doesn't already exist.
doesn't already exist.
"""
for fe in fancy_editors:
if fe.name == name:
break
@@ -231,91 +261,93 @@ init python in editor:
return
if not fe.installed:
# We don't check the status of this because fancy_activate_editor
# will fail if the editor is not installed.
store.add_dlc(fe.dlc)
persistent.editor = fe.name
fancy_activate_editor()
return persistent.editor is not None
# Call fancy_activate_editor on startup.
fancy_activate_editor(True)
class SelectEditor(Action):
def __init__(self, name):
self.name = name
def get_selected(self):
return persistent.editor == self.name
def __call__(self):
return fancy_select_editor(self.name)
def check_editor():
"""
Checks to see if an editor is set. If one isn't asks the user to
select one.
Returns True if the editor is set and editing can proceed, and
Checks to see if an editor is set. If one isn't asks the user to
select one.
Returns True if the editor is set and editing can proceed, and
False otherwise.
"""
if not set_editor:
return True
if persistent.editor:
return True
return renpy.invoke_in_new_context(renpy.call_screen, "editor")
##########################################################################
# Editing actions.
class Edit(Action):
alt = "Edit [text]."
def __init__(self, filename, line=None, check=False):
"""
An action that opens the given line of the given file in a
text editor.
text editor.
`filename`
The filename to open.
`line`
The line in the file to jump to.
`check`
If true, we will check to see if the file exists, and gray
out the box if it does not.
"""
self.filename = filename
self.line = line
self.check = check
def get_sensitive(self):
if not self.check:
return True
fn = project.current.unelide_filename(self.filename)
return os.path.exists(fn)
def __call__(self):
if not self.get_sensitive():
return
if not check_editor():
return
fn = project.current.unelide_filename(self.filename)
try:
e = renpy.editor.editor
e.begin()
@@ -325,23 +357,70 @@ init python in editor:
except Exception, e:
exception = traceback.format_exception_only(type(e), e)[-1][:-1]
renpy.invoke_in_new_context(interface.error, _("An exception occured while launching the text editor:\n[exception!q]"), error_message, exception=exception)
class EditAbsolute(Action):
def __init__(self, filename, line=None, check=False):
"""
An action that lets us edit an absolutely-specified filename.
`filename`
The filename to open.
`line`
The line in the file to jump to.
`check`
If true, we will check to see if the file exists, and gray
out the box if it does not.
"""
self.filename = filename
self.line = line
self.check = check
def get_sensitive(self):
if not self.check:
return True
return os.path.exists(self.filename)
def __call__(self):
if not self.get_sensitive():
return
if not check_editor():
return
try:
e = renpy.editor.editor
e.begin()
e.open(self.filename, line=self.line)
e.end()
except Exception, e:
exception = traceback.format_exception_only(type(e), e)[-1][:-1]
renpy.invoke_in_new_context(interface.error, _("An exception occured while launching the text editor:\n[exception!q]"), error_message, exception=exception)
class EditAll(Action):
"""
Opens all scripts that are part of the current project in a web browser.
"""
alt = "Edit [text]."
def __init__(self):
return
def __call__(self):
if not check_editor():
return
scripts = project.current.script_files()
scripts = project.current.script_files()
scripts = [ i for i in scripts if not i.startswith("game/tl/") ]
scripts.sort(key=lambda fn : fn.lower())
@@ -349,12 +428,12 @@ init python in editor:
if fn in scripts:
scripts.remove(fn)
scripts.insert(0, fn)
try:
e = renpy.editor.editor
e.begin()
for fn in scripts:
fn = project.current.unelide_filename(fn)
e.open(fn)
@@ -366,56 +445,54 @@ init python in editor:
renpy.invoke_in_new_context(interface.error, _("An exception occured while launching the text editor:\n[exception!q]"), error_message, exception=exception)
screen editor:
frame:
style_group "l"
style "l_root"
window:
has vbox
label _("Select Editor")
add HALF_SPACER
hbox:
frame:
style "l_indent"
xfill True
viewport:
scrollbars "vertical"
mousewheel True
has vbox
text _("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.") style "l_small_text"
for fe in editor.fancy_editors:
add SPACER
textbutton fe.name action editor.SelectEditor(fe.name)
add HALF_SPACER
frame:
style "l_indent"
has vbox
if fe.description:
text fe.description style "l_small_text"
if not fe.installed:
add HALF_SPACER
text fe.dldescription style "l_small_text"
textbutton _("Cancel") action Return(False) style "l_left_button"
label editor_preference:
call screen editor
jump preferences
+139 -74
View File
@@ -1,10 +1,28 @@
# 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()
init python:
import os
import subprocess
@@ -13,113 +31,150 @@ init python:
Opens `directory` in a file browser. `directory` is relative to
the project root.
"""
alt = _("Open [text] directory.")
def __init__(self, directory, absolute=False):
if absolute:
self.directory = directory
else:
self.directory = os.path.join(project.current.path, directory)
def get_sensitive(self):
return os.path.exists(self.directory)
def __call__(self):
directory = renpy.fsencode(self.directory)
if renpy.windows:
os.startfile(directory)
elif renpy.macintosh:
subprocess.Popen([ "open", directory ])
else:
subprocess.Popen([ "xdg-open", 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 ])
except:
pass
# Used for testing.
def Relaunch():
renpy.quit(relaunch=True)
screen front_page:
frame:
alt ""
style_group "l"
style "l_root"
has hbox
# Projects list section - on left.
frame:
style "l_projects"
xmaximum 300
right_margin 2
top_padding 20
bottom_padding 26
side "t c b":
window style "l_label":
text "PROJECTS:" style "l_label_text" size 36 yoffset 10
has hbox:
xfill True
text "PROJECTS:" style "l_label_text" size 36 yoffset 10
textbutton _("refresh"):
xalign 1.0
yalign 1.0
yoffset 5
style "l_small_button"
action project.Rescan()
right_margin HALF_INDENT
side "c r":
viewport:
yadjustment PROJECT_ADJUSTMENT
mousewheel True
use front_page_project_list
vbar:
style "l_vscrollbar"
adjustment PROJECT_ADJUSTMENT
vbox:
add HALF_SPACER
add SEPARATOR
add HALF_SPACER
textbutton _("+ Create New Project"):
left_margin (HALF_INDENT)
action Jump("new_project")
hbox:
xfill True
textbutton _("+ Create New Project"):
left_margin (HALF_INDENT)
action Jump("new_project")
# Project section - on right.
if project.current is not None:
use front_page_project
if project.current is not None:
textbutton _("Launch Project") action project.Launch() style "l_right_button"
# This is used by front_page to display the list of known projects on the screen.
screen front_page_project_list:
$ projects = project.manager.projects
$ templates = project.manager.templates
vbox:
if templates and persistent.show_templates:
for p in templates:
textbutton _("[p.name!q] (template)"):
action project.Select(p)
alt _("Select project [text].")
style "l_list"
null height 12
if projects:
for p in projects:
textbutton "[p.name!q]":
action project.Select(p)
alt _("Select project [text].")
style "l_list"
null height 12
textbutton _("Tutorial") action project.Select("tutorial") style "l_list"
textbutton _("The Question") action project.Select("the_question") style "l_list"
# This is used for the right side of the screen, which is where the project-specific
null height 12
textbutton _("Tutorial") action project.Select("tutorial") style "l_list" alt _("Select project [text].")
textbutton _("The Question") action project.Select("the_question") style "l_list" alt _("Select project [text].")
# This is used for the right side of the screen, which is where the project-specific
# buttons are.
screen front_page_project:
$ p = project.current
window:
has vbox
frame style "l_label":
@@ -130,10 +185,10 @@ screen front_page_project:
grid 2 1:
xfill True
spacing HALF_INDENT
vbox:
label _("Open Directory") style "l_label_small"
label _("Open Directory") style "l_label_small"
frame style "l_indent":
has vbox
@@ -142,30 +197,30 @@ screen front_page_project:
textbutton _("base") action OpenDirectory(".")
# textbutton _("images") action OpenDirectory("game/images") style "l_list"
# textbutton _("save") action None style "l_list"
vbox:
label _("Edit File") style "l_label_small"
frame style "l_indent":
has vbox
textbutton "script.rpy" action editor.Edit("game/script.rpy", check=True)
textbutton "options.rpy" action editor.Edit("game/options.rpy", check=True)
textbutton "screens.rpy" action editor.Edit("game/screens.rpy", check=True)
textbutton _("All script files") action editor.EditAll()
add SPACER
add SEPARATOR
add SPACER
frame style "l_indent":
has vbox
textbutton _("Navigate Script") text_size 30 action Jump("navigation")
add SPACER
grid 2 1:
xfill True
spacing HALF_INDENT
@@ -176,7 +231,8 @@ screen front_page_project:
textbutton _("Check Script (Lint)") action Jump("lint")
textbutton _("Change Theme") action Jump("choose_theme")
textbutton _("Delete Persistent") action Jump("rmpersistent")
textbutton _("Force Recompile") action Jump("force_recompile")
# textbutton "Relaunch" action Relaunch
frame style "l_indent":
@@ -185,27 +241,29 @@ screen front_page_project:
if ability.can_distribute:
textbutton _("Build Distributions") action Jump("build_distributions")
textbutton _("Android") action Jump("android")
textbutton _("Generate Translations") action Jump("translate")
textbutton _("Extract Dialogue") action Jump("extract_dialogue")
label main_menu:
return
label start:
show screen bottom_info
label front_page:
call screen front_page
call screen front_page
jump front_page
label lint:
python hide:
interface.processing(_("Checking script for potential problems..."))
lint_fn = project.current.temp_filename("lint.txt")
project.current.launch([ 'lint', lint_fn ], wait=True)
e = renpy.editor.editor
e.begin(True)
e.open(lint_fn)
@@ -214,10 +272,17 @@ label lint:
jump front_page
label rmpersistent:
python hide:
interface.processing(_("Deleting persistent data..."))
project.current.launch([ 'rmpersistent' ], wait=True)
jump front_page
label force_recompile:
python hide:
interface.processing(_("Recompiling all rpy files into rpyc files..."))
project.current.launch([ 'compile' ], wait=True)
jump front_page

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

+209 -119
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.
@@ -9,15 +27,15 @@ init python in interface:
import os.path
import contextlib
RENPY_URL = "http://www.renpy.org"
RENPY_GAMES_URL = "http://games.renpy.org"
RENPY_GAMES_URL = "http://games.renpy.org"
DOC_PATH = os.path.join(config.renpy_base, "doc/index.html")
DOC_URL = "http://www.renpy.org/doc/html/"
LICENSE_PATH = os.path.join(config.renpy_base, "doc/license.html")
LICENSE_URL = "http://www.renpy.org/doc/html/license.html"
if os.path.exists(DOC_PATH):
DOC_LOCAL_URL = "file:///" + DOC_PATH
else:
@@ -27,12 +45,12 @@ init python in interface:
LICENSE_LOCAL_URL = "file:///" + LICENSE_PATH
else:
LICENSE_LOCAL_URL = None
def OpenDocumentation():
"""
An action that opens the documentation.
"""
if DOC_LOCAL_URL is not None:
return OpenURL(DOC_LOCAL_URL)
else:
@@ -42,97 +60,122 @@ init python in interface:
"""
An action that opens the license.
"""
if LICENSE_LOCAL_URL is not None:
return OpenURL(LICENSE_LOCAL_URL)
else:
return OpenURL(LICENSE_URL)
# Should we display the bottom links?
links = True
@contextlib.contextmanager
def nolinks():
global links
links = False
try:
yield
finally:
links = True
# This displays the bottom of the screen. If the tooltip is not None, this displays the
# tooltip. Otherwise, it displays a list of links (to various websites, and to the
# tooltip. Otherwise, it displays a list of links (to various websites, and to the
# preferences and update screen), or is just blank.
screen bottom_info:
zorder 100
if interface.links:
frame:
style_group "l"
style "l_default"
left_margin (10 + INDENT)
right_margin (10 + INDENT)
xfill True
ypos 536
yanchor 0.0
hbox:
xfill True
hbox:
spacing INDENT
textbutton _("Documentation") style "l_link" action interface.OpenDocumentation()
textbutton _("Ren'Py Website") style "l_link" action OpenURL(interface.RENPY_URL)
textbutton _("Ren'Py Games List") style "l_link" action OpenURL(interface.RENPY_GAMES_URL)
textbutton _("About") style "l_link" action Jump("about")
hbox:
spacing INDENT
xalign 1.0
if ability.can_update:
textbutton _("update") action Jump("update") style "l_link"
textbutton _("preferences") style "l_link" action Jump("preferences")
textbutton _("quit") style "l_link" action Quit(confirm=False)
screen common:
default complete = None
default total = None
default yes = None
default no = None
default choices = None
default cancel = None
default bar_value = None
frame:
style "l_root"
frame:
style_group "l_info"
has vbox
text message:
text_align 0.5
xalign 0.5
layout "subtitle"
if complete is not None:
add SPACER
frame:
style "l_progress_frame"
bar:
range total
value complete
style "l_progress_bar"
if bar_value is not None:
add SPACER
frame:
style "l_progress_frame"
bar:
value bar_value
style "l_progress_bar"
if choices:
add SPACER
for v, l in choices:
textbutton l action SetScreenVariable("selected", v)
if selected is not None:
$ continue_ = Return(selected)
else:
$ continue_ = None
if submessage:
add SPACER
@@ -143,21 +186,23 @@ screen common:
if yes:
add SPACER
hbox:
xalign 0.5
textbutton _("Yes") style "l_button" action yes
null width 160
textbutton _("No") style "l_button" action no
label title text_color title_color style "l_info_label"
if back:
textbutton _("Back") action Return(False) style "l_left_button"
textbutton _("Back") action back style "l_left_button"
elif cancel:
textbutton _("Cancel") action cancel style "l_left_button"
if continue_:
textbutton _("Continue") action Return(True) style "l_right_button"
textbutton _("Continue") action continue_ style "l_right_button"
screen launcher_input:
@@ -167,142 +212,168 @@ screen launcher_input:
frame:
style_group "l_info"
has vbox
text message
text message:
text_align 0.5
xalign 0.5
layout "subtitle"
add SPACER
input style "l_default" size 24 xalign 0.5 default default color INPUT_COLOR
input style "l_default" size 24 xalign 0.5 default default color INPUT_COLOR
if filename:
add SPACER
text _("Due to package format limitations, non-ASCII file and directory names are not allowed.")
label _("[title]") style "l_info_label" text_color QUESTION_COLOR
label title style "l_info_label" text_color QUESTION_COLOR
if cancel:
textbutton _("Cancel") action cancel style "l_left_button"
init python in interface:
import traceback
def common(title, title_color, message, submessage=None, back=False, continue_=False, pause0=False, **kwargs):
from store import Jump
def common(title, title_color, message, submessage=None, back=None, continue_=None, pause0=False, show_screen=False, **kwargs):
"""
Displays the info, interaction, and processing screens.
`title`
The title of the screen.
`message`
The main message that is displayed when the screen is.
`submessage`
If not None, a message that is displayed below the main message.
`back`
If True, a back button will be present. If it's clicked, False will
be returned.
If not None, a back button will be present. `back` is the action that
is called when the button is clicked.
`cancel`
If not None, a cancel button will be present. `cancel` is the action
that is called when the button is clicked.
`continue_`
If True, a continue button will be present. If it's clicked, True
will be returned.
If True, a continue button will be present. `continue_` gives the action
that is called when that button is clicked.
`pause0`
If True, a zero-length pause will be inserted before calling the
screen. This will display it to the user and then immediately
If True, a zero-length pause will be inserted before calling the
screen. This will display it to the user and then immediately
return.
`show_screen`
If True, the screen will be show, and will return immediately. if False,
the screen will be called, and interaction will pause.
Other keyword arguments are passed to the screen itself.
"""
if pause0:
ui.pausebehavior(0)
return renpy.call_screen("common", title=title, title_color=title_color, message=message, submessage=submessage, back=back, continue_=continue_, **kwargs)
if show_screen:
screen_func = renpy.show_screen
else:
screen_func = renpy.call_screen
if pause0:
ui.pausebehavior(0)
return screen_func("common", title=title, title_color=title_color, message=message, submessage=submessage, back=back, continue_=continue_, **kwargs)
def hide_screen():
"""
Hides a screen that was shown with show_screen=True.
"""
renpy.hide_screen("common")
def error(message, submessage=None, label="front_page", **kwargs):
"""
Indicates to the user that an error has occured.
`message`
The message to display.
The message to display.
`submessage`
Optional secondary message information. For example, this may be
Optional secondary message information. For example, this may be
used to display an exception string.
`label`
The label to redirect to when the user finishes displaying the error. None
to just return.
to just return False.
Keyword arguments are passed into the screen so that they can be substituted into
the message.
"""
common(_("ERROR"), store.ERROR_COLOR, message=message, submessage=submessage, back=True, **kwargs)
if label is None:
action = Return(False)
else:
action = Jump(label)
common(_("ERROR"), store.ERROR_COLOR, message=message, submessage=submessage, back=action, **kwargs)
if label:
renpy.jump(label)
@contextlib.contextmanager
def error_handling(what, label="front_page"):
"""
This is a context manager that catches exceptions and displays them using
This is a context manager that catches exceptions and displays them using
interface.error.
`what`
What we're doing when the error occurs. This is usually written using
What we're doing when the error occurs. This is usually written using
the present participle.
`label`
The label to jump to when error handling finishes.
As an example of usage::
with interface.error_handling("opening the log file"):
f = open("log.txt", "w")
f = open("log.txt", "w")
"""
try:
yield
except Exception, e:
import traceback
traceback.print_exc()
error(_("While [what!q], an error occured:"),
_("[exception!q]"),
what=what,
error(_("While [what!q], an error occured:"),
_("[exception!q]"),
what=what,
label=label,
exception=traceback.format_exception_only(type(e), e)[-1][:-1])
def input(title, message, filename=False, sanitize=True, cancel=None, default=""):
"""
Requests typewritten input from the user.
"""
rv = default
while True:
rv = renpy.call_screen("launcher_input", title=title, message=message, filename=filename, cancel=cancel, default=rv)
if sanitize:
if ("[" in rv) or ("{" in rv):
error(_("Text input may not contain the {{ or [[ characters."), label=None)
continue
if filename:
if filename and (filename != "withslash") and (("\\" in rv) or ("/" in rv)):
error(_("File and directory names may not contain / or \\."), label=None)
continue
try:
rv.encode("ascii")
except:
@@ -313,79 +384,98 @@ init python in interface:
def info(message, submessage=None, pause=True, **kwargs):
"""
Displays an informational message to the user. The user will be asked to click to
Displays an informational message to the user. The user will be asked to click to
confirm that he has read the message.
`message`
The message to display.
The message to display.
`pause`
True if we should pause while showing the info.
Keyword arguments are passed into the screen so that they can be substituted into
the message.
"""
if pause:
common(_("INFORMATION"), store.INFO_COLOR, message, submessage, continue_=True, **kwargs)
common(_("INFORMATION"), store.INFO_COLOR, message, submessage, continue_=Return(True), **kwargs)
else:
common(_("INFORMATION"), store.INFO_COLOR, message, submessage, pause=0, **kwargs)
def interaction(title, message, submessage=None, **kwargs):
common(_("INFORMATION"), store.INFO_COLOR, message, submessage, pause0=True, **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.
`title`
The title of the interaction.
`message`
The message itself.
`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):
"""
Indicates to the user that processing is taking place. This should be used when
there is an indefinite amount of work to be done.
`message`
The message to display.
The message to display.
`submessage`
An additional message to display.
`complete`
The fraction complete the step is.
`total`
The total amount of work to do in this step.
Keyword arguments are passed into the screen so that they can be substituted into
the message.
"""
common(_("PROCESSING"), store.INTERACTION_COLOR, message, submessage, pause0=True, complete=complete, total=total, **kwargs)
common(_("PROCESSING"), store.INTERACTION_COLOR, message, submessage, pause0=True, complete=complete, total=total, **kwargs)
def yesno(message, yes=Return(True), no=Return(False), **kwargs):
"""
Asks the user a yes or no question.
`message`
The question to ask.
`yes`
The action to perform if the user answers yes.
`no`
The action to perform if the user answer no.
"""
return common(_("QUESTION"), store.QUESTION_COLOR, message, yes=yes, no=no, **kwargs)
def choice(message, choices, selected, **kwargs):
"""
Asks the user to pick a choice from a menu.
`choices`
A list of (value, label) tuples, giving the choices.
`selected`
The default choice that we mark as selected.
"""
return common(_("CHOICE"), store.QUESTION_COLOR, message, choices=choices, selected=selected, **kwargs)
+73 -55
View File
@@ -1,30 +1,48 @@
# 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
import store.project as project
import store.editor as editor
from store import persistent, Action
# The last navigation screen we've seen. This is the scree we try to go
# to the next time we enter navigation. (We may not be able to go there,
# if the screen is empty.)
if persistent.navigation is None:
persistent.navigation = "label"
# A map from a kind of information, to how we should sort it. Possible
# A map from a kind of information, to how we should sort it. Possible
# sorts are alphabetical, by-file, natural.
if persistent.navigation_sort is None:
persistent.navigation_sort = { }
if persistent.navigate_private is None:
persistent.navigate_private = False
if persistent.navigate_library is None:
persistent.navigate_library = False
# A list of kinds of navigation we support.
KINDS = [ "file", "label", "define", "transform", "screen", "callable", "todo" ]
@@ -37,22 +55,22 @@ init python in navigation:
def group_and_sort(kind):
"""
This is responsible for pulling navigation information of the
appropriate kind out of project.current.dump, grouping it,
This is responsible for pulling navigation information of the
appropriate kind out of project.current.dump, grouping it,
and sorting it.
This returns a list of (group, list of (name, filename, line)). The
This returns a list of (group, list of (name, filename, line)). The
group may be a string or None.
"""
project.current.update_dump()
sort = persistent.navigation_sort[kind]
name_map = project.current.dump.get("location", {}).get(kind, { })
groups = { }
for name, loc in name_map.items():
filename, line = loc
filename = filename.replace("\\", "/")
@@ -63,56 +81,56 @@ init python in navigation:
group = filename
if group.startswith("game/"):
group = group[5:]
g = groups.get(group, None)
if g is None:
groups[group] = g = [ ]
g.append((name, filename, line))
for g in groups.values():
if sort == "natural":
g.sort(key=lambda a : a[2])
else:
g.sort(key=lambda a : a[0].lower())
rv = list(groups.items())
rv.sort()
return rv
def group_and_sort_files():
rv = [ ]
for fn in project.current.script_files():
shortfn = fn
shortfn = shortfn.replace("\\", "/")
if shortfn.startswith("game/"):
shortfn = fn[5:]
rv.append((shortfn, fn, None))
rv.sort()
return [ (None, rv) ]
class ChangeKind(Action):
"""
Changes the kind of thing we're navigating over.
"""
def __init__(self, kind):
self.kind = kind
def get_selected(self):
return persistent.navigation == self.kind
def __call__(self):
if persistent.navigation == self.kind:
return
persistent.navigation = self.kind
renpy.jump("navigation_loop")
@@ -123,38 +141,38 @@ init python in navigation:
def __init__(self, sort):
self.sort = sort
def get_selected(self):
return persistent.navigation_sort[persistent.navigation] == self.sort
def __call__(self):
if self.get_selected():
return
persistent.navigation_sort[persistent.navigation] = self.sort
renpy.jump("navigation_loop")
screen navigation:
frame:
style_group "l"
style "l_root"
window:
has vbox
frame style "l_label":
has hbox xfill True
text _("Navigate: [project.current.name]") style "l_label_text"
frame:
style "l_alternate"
style_group "l_small"
has hbox
if persistent.navigation != "file":
text _("Order: ")
textbutton _("alphabetical") action navigation.ChangeSort("alphabetical")
@@ -164,17 +182,17 @@ screen navigation:
textbutton _("natural") action navigation.ChangeSort("natural")
null width HALF_INDENT
textbutton _("refresh") action Jump("navigation_refresh")
add HALF_SPACER
frame style "l_indent":
hbox:
spacing HALF_INDENT
text _("Category:")
textbutton _("files") action navigation.ChangeKind("file")
textbutton _("labels") action navigation.ChangeKind("label")
textbutton _("defines") action navigation.ChangeKind("define")
@@ -199,19 +217,19 @@ screen navigation:
style_group "l_navigation"
for group_name, group in groups:
if group_name is not None:
text "[group_name!q]"
if persistent.navigation == "todo":
if persistent.navigation == "todo":
vbox:
for name, filename, line in group:
textbutton "[name!q]" action editor.Edit(filename, line)
else:
hbox:
box_wrap True
for name, filename, line in group:
textbutton "[name!q]" action editor.Edit(filename, line)
@@ -223,11 +241,11 @@ screen navigation:
textbutton _("+ Add script file") action Jump("add_file") style "l_button"
else:
fixed:
if persistent.navigation == "todo":
text _("No TODO comments found.\n\nTo create one, include \"# TODO\" in your script."):
text_align 0.5
xalign 0.5
@@ -244,18 +262,18 @@ screen navigation:
label navigation:
label navigation_loop:
python in navigation:
kind = persistent.navigation
kind = persistent.navigation
if kind == "file":
groups = group_and_sort_files()
else:
groups = group_and_sort(kind)
renpy.call_screen("navigation", groups=groups)
label navigation_refresh:
$ project.current.update_dump(True)
jump navigation_loop
+47 -28
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
@@ -9,14 +27,14 @@ init python:
screen select_template:
default result = project.manager.get("template")
default result = project.manager.get("english")
frame:
style_group "l"
style "l_root"
window:
has vbox
label _("Choose Project Template")
@@ -26,18 +44,18 @@ screen select_template:
frame:
style "l_indent"
xmaximum ONETHIRD
viewport:
scrollbars "vertical"
vbox:
for p in project.manager.templates:
textbutton "[p.name!q]" action SetScreenVariable("result", p) style "l_list"
frame:
style "l_indent"
xmaximum TWOTHIRDS
text _("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.")
text _("Please select a template to use for your new project. The template sets the default font and the user interface language. If your language is not supported, choose 'english'.")
textbutton _("Back") action Jump("front_page") style "l_left_button"
@@ -45,27 +63,30 @@ screen select_template:
label new_project:
if persistent.projects_directory is None:
call choose_projects_directory
if persistent.projects_directory is None:
$ interface.error(_("The projects directory could not be set. Giving up."))
python hide:
project_name = interface.input(
_("PROJECT NAME"),
_("PROJECT NAME"),
_("Please enter the name of your project:"),
filename=True,
cancel=Jump("front_page"))
project_name = project_name.strip()
if not project_name:
interface.error(_("The project name may not be empty."))
project_dir = os.path.join(persistent.projects_directory, project_name)
if project.manager.get(project_name) is not None:
interface.error(_("[project_name!q] already exists. Please choose a different project name."), project_name=project_name)
if os.path.exists(project_dir):
interface.error(_("[project_dir!q] already exists. Please choose a different project name."), project_dir=project_dir)
@@ -75,25 +96,25 @@ label new_project:
template = renpy.call_screen("select_template")
template_path = template.path
with interface.error_handling("creating a new project"):
shutil.copytree(template_path, project_dir)
shutil.copytree(template_path, project_dir, symlinks=False)
# 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"))
# Change the save directory in options.rpy
fn = os.path.join(project_dir, "game/options.rpy")
with open(fn, "rb") as f:
options = f.read().decode("utf-8")
save_dir = project_name + "-" + str(int(time.time()))
options = re.sub(r'template-\d+', save_dir, options)
options = options.replace("PROJECT_NAME", project_name)
options = options.replace("UNIQUE", str(int(time.time())))
with open(fn, "wb") as f:
f.write(options.encode("utf-8"))
@@ -101,9 +122,7 @@ label new_project:
with interface.error_handling("activating the new project"):
project.manager.scan()
project.Select(project.manager.get(project_name))()
call choose_theme_callable
jump front_page
+78 -33
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
@@ -35,7 +53,7 @@ init -1 python hide:
#########################################
# Themes
## We then want to call a theme function. themes.roundrect is
## a theme that features the use of rounded rectangles. It's
## the only theme we currently support.
@@ -46,7 +64,7 @@ init -1 python hide:
theme.roundrect(
## Theme: Roundrect
## Color scheme: Basic Blue
## The color of an idle widget face.
widget = "#003c78",
@@ -60,7 +78,7 @@ init -1 python hide:
## example, the current value of a preference.)
widget_selected = "#ffffc8",
## The color of a disabled widget face.
## The color of a disabled widget face.
disabled = "#404040",
## The color of disabled widget text.
@@ -88,7 +106,7 @@ init -1 python hide:
## And we're done with the theme. The theme will customize
## various styles, so if we want to change them, we should
## do so below.
## do so below.
)
#########################################
@@ -100,7 +118,7 @@ init -1 python hide:
## show help to the user.
## - A file name relative to the base directory, which is opened in a
## web browser.
## - None, to disable help.
## - None, to disable help.
config.help = "README.html"
#########################################
@@ -166,59 +184,69 @@ 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
_game_menu_screen = None
config.underlay = [
renpy.Keymap(
quit = renpy.quit_event,
iconify = renpy.iconify,
choose_renderer = renpy.curried_call_in_new_context("_choose_renderer"),
self_voicing = Preference("self voicing", "toggle"),
),
]
config.rollback_enabled = False
translate None python:
config.rtl = False
## This section controls how to build Ren'Py. (Building the launcher is how
## we build Ren'Py distributions.)
init python:
## We're building Ren'Py tonight.
build.renpy = True
## The version number that's supplied to the updater.
build.version = "Ren'Py {}".format(config.version)
## The name that's used for directories and archive files. For example, if
## this is 'mygame-1.0', the windows distribution will be in the
## directory 'mygame-1.0-win', in the 'mygame-1.0-win.zip' file.
build.directory_name = "renpy-" + config.version.rsplit('.', 1)[0]
if 'RENPY_NIGHTLY' in os.environ:
build.directory_name = os.environ['RENPY_NIGHTLY']
else:
build.directory_name = "renpy-" + config.version.rsplit('.', 1)[0]
## The name that's uses for executables - the program that users will run
## to start the game. For example, if this is 'mygame', then on Windows,
## users can click 'mygame.exe' to start the game.
build.executable_name = "renpy"
## If True, Ren'Py will include update information into packages. This
## allows the updater to run.
build.include_update = True
## Clear out various file patterns.
build.renpy_patterns = [ ]
build.early_base_patterns = [ ]
build.base_patterns = [ ]
build.late_base_patterns = [ ]
# We don't need to clear out the executable patterns, since they're
# We don't need to clear out the executable patterns, since they're
# correct for Ren'Py.
## Now, add the Ren'Py distribution in using classify_renpy.
## 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)
@@ -230,29 +258,45 @@ 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("template/**", "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.
# docs.
build.classify_renpy("doc/", "source")
build.classify_renpy("doc/.doctrees/", None)
build.classify_renpy("doc/_sources/", None)
build.classify_renpy("doc/**", "source")
build.classify_renpy("LICENSE.txt", "source")
# module.
# module.
build.classify_renpy("module/", "source")
build.classify_renpy("module/*.c", "source")
build.classify_renpy("module/gen/", "source")
@@ -283,8 +327,8 @@ init python:
build.classify_renpy("editra/Editra-mac.app/**", "editra-mac")
build.classify_renpy("editra/lib/**", "editra-windows")
build.classify_renpy("editra/editra.exe", "editra-windows")
# Executable rules.
build.executable("editra/Editra/Editra")
@@ -294,8 +338,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)
+66 -15
View File
@@ -1,19 +1,38 @@
# 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:
import time
import zipfile
import tarfile
import zlib
import struct
import stat
import shutil
from zipfile import crc32
zlib.Z_DEFAULT_COMPRESSION = 9
class ZipFile(zipfile.ZipFile):
def write_with_info(self, zinfo, filename):
@@ -80,25 +99,29 @@ init python in distribute:
self.fp.seek(position, 0)
self.filelist.append(zinfo)
self.NameToInfo[zinfo.filename] = zinfo
class ZipPackage(object):
"""
A class that creates a zip file.
"""
def __init__(self, filename):
self.zipfile = ZipFile(filename, "w", zipfile.ZIP_DEFLATED)
def add_file(self, name, path, xbit):
if path is None:
raise Exception("path for " + name + " must not be None.")
zi = zipfile.ZipInfo(name)
s = os.stat(path)
zi.date_time = time.gmtime(s.st_mtime)[:6]
try:
s = os.stat(path)
zi.date_time = time.gmtime(s.st_mtime)[:6]
except:
zi.date_time = time.gmtime()[:6]
zi.compress_type = zipfile.ZIP_DEFLATED
zi.create_system = 3
@@ -120,7 +143,7 @@ init python in distribute:
zi.compress_type = zipfile.ZIP_STORED
zi.create_system = 3
zi.external_attr = (long(0040755) << 16) | 0x10
self.zipfile.write_with_info(zi, path)
def close(self):
@@ -128,15 +151,15 @@ init python in distribute:
class TarPackage(object):
def __init__(self, filename, mode, notime=False):
"""
notime
If true, times will be forced to the epoch.
"""
self.tarfile = tarfile.open(filename, mode)
self.tarfile.dereference = True
self.tarfile.dereference = True
self.notime = notime
def add_file(self, name, path, xbit):
@@ -173,3 +196,31 @@ init python in distribute:
def close(self):
self.tarfile.close()
class DirectoryPackage(object):
def mkdir(self, path):
if not os.path.isdir(path):
os.mkdir(path, 0755)
def __init__(self, path):
self.path = path
self.mkdir(path)
def add_file(self, name, path, xbit):
fn = os.path.join(self.path, name)
shutil.copy2(path, fn)
if xbit:
os.chmod(fn, 0755)
else:
os.chmod(fn, 0644)
def add_directory(self, name, path):
fn = os.path.join(self.path, name)
self.mkdir(fn)
def close(self):
return
+910 -890
View File
File diff suppressed because it is too large Load Diff
+97 -65
View File
@@ -1,96 +1,120 @@
# 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:
persistent.gl_enable = True
config.gl_enable = persistent.gl_enable
if persistent.windows_console is None:
persistent.windows_console = False
def scan_translations():
languages = renpy.known_languages()
if not languages:
return None
rv = [ ( "English", None) ]
for i in languages:
rv.append((i.title(), i))
rv.append((i.replace("_", " ").title(), i))
rv.sort()
return rv
screen preferences:
$ translations = scan_translations()
frame:
style_group "l"
style "l_root"
alt "Preferences"
window:
has vbox
label _("Launcher Preferences")
add HALF_SPACER
hbox:
frame:
style "l_indent"
xmaximum ONETHIRD
xfill True
has vbox
# Projects directory selection.
add SEPARATOR2
frame:
style "l_indent"
yminimum 75
has vbox
text _("Projects Directory:")
add HALF_SPACER
frame style "l_indent":
frame style "l_indent":
if persistent.projects_directory:
textbutton _("[persistent.projects_directory!q]") action Jump("projects_directory_preference")
textbutton _("[persistent.projects_directory!q]"):
action Jump("projects_directory_preference")
alt _("Projects directory: [text]")
else:
textbutton _("Not Set") action Jump("projects_directory_preference")
textbutton _("Not Set"):
action Jump("projects_directory_preference")
alt _("Projects directory: [text]")
add SPACER
# Text editor selection.
add SEPARATOR2
frame:
style "l_indent"
yminimum 75
has vbox
text _("Text Editor:")
add HALF_SPACER
frame style "l_indent":
frame style "l_indent":
if persistent.editor:
textbutton persistent.editor action Jump("editor_preference")
textbutton persistent.editor action Jump("editor_preference") alt _("Text editor: [text]")
else:
textbutton _("Not Set") action Jump("editor_preference")
textbutton _("Not Set") action Jump("editor_preference") alt _("Text editor: [text]")
add SPACER
if ability.can_update:
@@ -102,48 +126,50 @@ screen preferences:
style "l_indent"
yminimum 75
has vbox
text _("Update Channel:")
add HALF_SPACER
frame style "l_indent":
frame style "l_indent":
textbutton persistent.update_channel action Jump("update_preference")
frame:
style "l_indent"
xmaximum ONETHIRD
xfill True
has vbox
add SEPARATOR2
frame:
style "l_indent"
yminimum 75
has vbox
text _("Navigation Options:")
add HALF_SPACER
textbutton _("Include private names") style "l_checkbox" action ToggleField(persistent, "navigate_private")
textbutton _("Include library names") style "l_checkbox" action ToggleField(persistent, "navigate_library")
add SPACER
add SEPARATOR2
frame:
style "l_indent"
yminimum 75
has vbox
text _("Launcher Options:")
add HALF_SPACER
textbutton _("Hardware rendering") style "l_checkbox" action ToggleField(persistent, "gl_enable")
textbutton _("Show templates") style "l_checkbox" action ToggleField(persistent, "show_templates")
textbutton _("Large fonts") style "l_checkbox" action [ ToggleField(persistent, "large_print"), renpy.utter_restart ]
if renpy.windows:
textbutton _("Console output") style "l_checkbox" action ToggleField(persistent, "windows_console")
@@ -156,39 +182,45 @@ screen preferences:
has vbox
add SEPARATOR2
frame:
style "l_indent"
yminimum 75
has vbox
text _("Actions:")
add HALF_SPACER
textbutton _("Open launcher project") style "l_nonbox" action [ project.Select("launcher"), Jump("front_page") ]
if translations:
add SPACER
# Text editor selection.
add SEPARATOR2
frame:
style "l_indent"
yminimum 75
has vbox
text _("Language:")
add HALF_SPACER
# frame style "l_indent":
for tlname, tlvalue in translations:
textbutton tlname action Language(tlvalue) style "l_list"
viewport:
scrollbars "vertical"
mousewheel True
has vbox
# frame style "l_indent":
for tlname, tlvalue in translations:
textbutton tlname action Language(tlvalue) style "l_list"
textbutton _("Back") action Jump("front_page") style "l_left_button"
+235 -131
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.
@@ -22,9 +40,19 @@ init python in project:
import subprocess
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."),
_("Have you backed up your projects recently?"),
]
class Project(object):
def __init__(self, path):
while path.endswith("/"):
@@ -32,30 +60,33 @@ init python in project:
if not os.path.exists(path):
raise Exception("{} does not exist.".format(path))
# The name of the project.
self.name = os.path.basename(path)
if path.endswith(".app/Contents/Resources/autorun"):
self.name = os.path.basename(path[:-len(".app/Contents/Resources/autorun")])
else:
self.name = os.path.basename(path)
# The path to the project.
self.path = path
# The path to the game directory.
gamedir = os.path.join(path, "game")
if os.path.isdir(gamedir):
self.gamedir = gamedir
else:
self.gamedir = path
# Load the data.
self.load_data()
# The project's temporary directory.
self.tmp = None
self.tmp = None
# This contains the result of dumping information about the game
# to disk.
self.dump = { }
# The mtime of the last dump file loaded.
self.dump_mtime = 0
@@ -87,57 +118,60 @@ init python in project:
def update_data(self):
data = self.data
data.setdefault("build_update", False)
data.setdefault("packages", [ "all" ])
def make_tmp(self):
"""
Makes the project's temporary directory, if it doesn't exist
Makes the project's temporary directory, if it doesn't exist
yet.
"""
if self.tmp and os.path.isdir(self.tmp):
return
tmp = os.path.join(self.path, "tmp")
try:
os.mkdir(tmp)
except:
pass
if os.path.isdir(tmp):
self.tmp = tmp
return
self.tmp = tempfile.mkdtemp()
def temp_filename(self, filename):
"""
Returns a filename in the temporary directory.
"""
self.make_tmp()
return os.path.join(self.tmp, filename)
def launch(self, args=[], wait=False):
def launch(self, args=[], wait=False, env={}):
"""
Launches the project.
Launches the project.
`args`
Additional arguments to give to the project.
`wait`
If true, waits for the launched project to terminate before
continuing.
`env`
Additional variables to include in the environment.
"""
self.make_tmp()
# Find the python executable to run.
executable_path = os.path.dirname(sys.executable)
if renpy.renpy.windows:
extension = ".exe"
else:
@@ -147,7 +181,7 @@ init python in project:
executables = [ "python" + extension ]
else:
executables = [ "pythonw" + extension ]
executables.append(sys.executable)
for i in executables:
@@ -156,51 +190,57 @@ init python in project:
break
else:
raise Exception("Python interpreter not found: %r", executables)
# Put together the basic command line.
cmd = [ executable, "-EOO", sys.argv[0] ]
cmd = [ executable, "-EO", sys.argv[0] ]
cmd.append(self.path)
cmd.extend(args)
# Add flags to dump game info.
cmd.append("--json-dump")
cmd.append(self.get_dump_filename())
if persistent.navigate_private:
cmd.append("--json-dump-private")
if persistent.navigate_library:
cmd.append("--json-dump-common")
environ = dict(os.environ)
environ.update(env)
for k in environ:
environ[k] = renpy.fsencode(environ[k])
# Launch the project.
with interface.error_handling("launching the project"):
cmd = [ renpy.fsencode(i) for i in cmd ]
p = subprocess.Popen(cmd)
if wait:
p.wait()
cmd = [ renpy.fsencode(i) for i in cmd ]
p = subprocess.Popen(cmd, env=environ)
if 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):
"""
If the dumpfile does not exist, runs Ren'Py to create it. Otherwise,
If the dumpfile does not exist, runs Ren'Py to create it. Otherwise,
loads it in iff it's newer than the one that's already loaded.
"""
dump_filename = self.get_dump_filename()
if force or not os.path.exists(dump_filename):
if gui:
interface.processing(_("Ren'Py is scanning the project..."))
self.launch(["quit"], wait=True)
if not os.path.exists(dump_filename):
self.dump["error"] = True
return
file_mtime = os.path.getmtime(dump_filename)
if file_mtime == self.dump_mtime:
return
@@ -212,7 +252,7 @@ init python in project:
self.dump = json.load(f)
# add todo list to dump data
self.update_todos()
except:
self.dump["error"] = True
@@ -223,7 +263,7 @@ init python in project:
"""
todos = self.dump.setdefault("location", {})["todo"] = {}
files = self.script_files()
for f in files:
@@ -232,12 +272,17 @@ init python in project:
for l, line in enumerate(data):
l += 1
m = re.search(r".*#\s*TODO(\s*:\s*|\s+)(.*)", line, re.I)
try:
line = line.decode("utf-8")
except:
continue
m = re.search(ur".*#\s*TODO(\s*:\s*|\s+)(.*)", line, re.I)
if m is None:
continue
raw_todo_text = m.group(2).strip()
todo_text = raw_todo_text
@@ -245,8 +290,8 @@ 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]
@@ -254,7 +299,7 @@ init python in project:
"""
Unelides the filename relative to the project base.
"""
fn1 = os.path.join(self.path, fn)
if os.path.exists(fn1):
return fn1
@@ -262,90 +307,96 @@ init python in project:
fn2 = os.path.join(config.renpy_base, fn)
if os.path.exists(fn2):
return fn2
return fn
def script_files(self):
"""
Return a list of the script files that make up the project. These
are elided, and so need to be passed to unelide_filename before they
can be included in the project.
"""
rv = [ ]
rv.extend(i for i, isdir in util.walk(self.path) if (not isdir) and (i.endswith(".rpy") or i.endswith(".rpym")) )
rv.extend(i for i, isdir in util.walk(self.path)
if (not isdir) and (i.endswith(".rpy") or i.endswith(".rpym")) and (not i.startswith("tmp/")) )
return rv
class ProjectManager(object):
"""
This maintains a list of the various types of projects that
we know about.
"""
def __init__(self):
# The projects directory.
self.projects_directory = ""
# Normal projects, in alphabetical order by lowercase name.
self.projects = [ ]
# Template projects.
self.templates = [ ]
# All projects - normal, template, and hidden.
self.all_projects = [ ]
# Directories that have been scanned.
self.scanned = set()
self.scan()
def scan(self):
"""
Scans for projects.
"""
if (persistent.projects_directory is not None) and not os.path.isdir(persistent.projects_directory):
persistent.projects_directory = None
self.projects_directory = persistent.projects_directory
self.projects = [ ]
self.templates = [ ]
self.all_projects = [ ]
self.scanned = set()
if self.projects_directory is not None:
self.scan_directory(self.projects_directory)
self.scan_directory(config.renpy_base)
self.scan_directory(os.path.join(config.renpy_base, "templates"))
self.projects.sort(key=lambda p : p.name.lower())
self.templates.sort(key=lambda p : p.name.lower())
self.projects.sort(key=lambda p : p.name.lower())
self.templates.sort(key=lambda p : p.name.lower())
def scan_directory(self, d):
"""
Scans for projects in directories directly underneath `d`.
"""
global current
d = os.path.abspath(d)
if not os.path.isdir(d):
return
for pdir in os.listdir(d):
for pdir in util.listdir(d):
ppath = os.path.join(d, pdir)
# A project must be a directory.
if not os.path.isdir(ppath):
continue
autorun = os.path.join(ppath, "Contents", "Resources", "autorun")
if os.path.exists(autorun):
ppath = autorun
# A project has either a game/ directory, or a project.json
# file.
if (not os.path.isdir(os.path.join(ppath, "game"))) and (not os.path.exists(os.path.join(ppath, "project.json"))):
@@ -354,52 +405,52 @@ init python in project:
if ppath in self.scanned:
continue
self.scanned.add(ppath)
# We have a project directory, so create a Project.
p = Project(ppath)
project_type = p.data.get("type", "normal")
if project_type == "hidden":
pass
elif project_type == "template":
self.templates.append(p)
else:
self.projects.append(p)
self.projects.append(p)
self.all_projects.append(p)
# Select the default project.
if persistent.active_project is not None:
p = self.get(persistent.active_project)
if p is not None:
current = p
return
p = self.get("tutorial")
if p is not None:
current = p
return
current = None
def get(self, name):
"""
Gets the project with the given name.
Returns None if the project doesn't exist.
"""
for p in self.all_projects:
if p.name == name:
return p
return None
manager = ProjectManager()
manager = ProjectManager()
# The current project.
current = None
@@ -409,38 +460,38 @@ init python in project:
An action that causes p to become the selected project when it was
clicked. If label is not None, jumps to the given label.
"""
def __init__(self, p, label=None):
"""
`p`
Either a project object, or a string giving the name of a
Either a project object, or a string giving the name of a
project.
`label`
The label to jump to when clicked.
"""
if isinstance(p, basestring):
p = manager.get(p)
self.project = p
self.label = label
def get_selected(self):
if self.project is None:
return False
if current is None:
return False
return current.path == self.project.path
def get_sensitive(self):
return self.project is not None
def __call__(self):
global current
current = self.project
persistent.active_project = self.project.name
@@ -448,14 +499,14 @@ init python in project:
if self.label is not None:
renpy.jump(self.label)
class Launch(Action):
"""
An action that launches the supplied project, or the current
project if no project is supplied.
"""
def __init__(self, p=None):
if p is None:
self.project = current
@@ -463,12 +514,30 @@ init python in project:
self.project = manager.get(p)
else:
self.project = p
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):
"""
Rescans the projects directory.
"""
manager.scan()
renpy.restart_interaction()
manager.scan()
@@ -477,13 +546,13 @@ init python in project:
###############################################################################
# Code to choose the projects directory.
label choose_projects_directory:
python hide:
interface.interaction(_("PROJECTS DIRECTORY"), _("Please choose the projects directory using the directory chooser.\n{b}The directory chooser may have opened behind this window.{/b}"), _("This launcher will scan for projects in this directory, will create new projects in this directory, and will place built projects into this directory."),)
path = persistent.projects_directory
if path:
@@ -493,36 +562,42 @@ label choose_projects_directory:
default_path = os.path.dirname(os.path.abspath(config.renpy_base))
except:
default_path = os.path.abspath(config.renpy_base)
if EasyDialogs:
choice = EasyDialogs.AskFolder(defaultLocation=default_path, wanted=unicode)
if choice is not None:
path = choice
path = choice
else:
path = None
else:
try:
cmd = [ "/usr/bin/python", os.path.join(config.gamedir, "tkaskdir.py"), renpy.fsencode(default_path) ]
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
choice = p.stdout.read()
p.wait()
if choice:
path = renpy.fsdecode(choice)
cmd = [ "/usr/bin/python", os.path.join(config.gamedir, "tkaskdir.py"), renpy.fsencode(default_path) ]
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
choice = p.stdout.read()
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 = choice.decode("utf-8")
if path is None:
path = default_path
@@ -530,7 +605,36 @@ label choose_projects_directory:
path = renpy.fsdecode(path)
persistent.projects_directory = path
if os.path.isdir(path):
persistent.projects_directory = path
else:
path = os.path.abspath(config.renpy_base)
project.manager.scan()
return
init python:
def set_projects_directory_command():
ap = renpy.arguments.ArgumentParser()
ap.add_argument("projects", help="The path to the projects directory.")
args = ap.parse_args()
persistent.projects_directory = args.projects
renpy.save_persistent()
return False
renpy.arguments.register_command("set_projects_directory", set_projects_directory_command)
def get_projects_directory_command():
ap = renpy.arguments.ArgumentParser()
args = ap.parse_args()
print persistent.projects_directory
return False
renpy.arguments.register_command("get_projects_directory", get_projects_directory_command)
-4
View File
@@ -1,4 +0,0 @@
init -999:
$ config.script_version = (6, 15, 7)
+281 -233
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:
@@ -19,23 +37,23 @@ init -1 python:
# Colors for the scrollbar thumb.
SCROLLBAR_IDLE = "#dfdfdf"
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"
# A displayable used for the background of windows
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()
# A displayable used the background of information boxes.
INFO_WINDOW = "#f9f9f9"
# Colors for the titles of information boxes.
ERROR_COLOR = "#d15353"
INFO_COLOR = "#545454"
@@ -45,8 +63,26 @@ init -1 python:
# The color of input text.
INPUT_COLOR = "#d86b45"
# FONTS/WEIGHTS
LIGHT = "Roboto-Light.ttf"
REGULAR = "Roboto-Regular.ttf"
if persistent.large_print:
LIGHT = REGULAR
init 1 python:
def size(n):
"""
Adjusts the font size if we're in large-print mode.
"""
if persistent.large_print and n < 18:
n = 18
return n
INDENT = 20
HALF_INDENT = 10
@@ -61,235 +97,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
style.l_text = Style(style.l_default)
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
# 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
# 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_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)
# 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
# An inner window.
style.l_window = Style(style.l_default)
style.l_window.background = WINDOW
style.l_window.left_padding = 6
style.l_window.xfill = True
style.l_window.yfill = True
# 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
# 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
# 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
# Indents its contents.
style.l_indent = Style(style.l_default)
style.l_indent.left_margin = INDENT
# Indents its contents and pads them vertically.
style.l_indent_margin = Style(style.l_indent)
style.l_indent_margin.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
style.l_list2 = Style(style.l_list)
style.l_list2.left_padding = HALF_INDENT + INDENT
style.l_list2_text = Style(style.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"
# 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_frame = Style(style.l_default)
style.l_info_frame.ypadding = 21
style.l_info_frame.xfill = True
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_frame.yminimum = 180
style.l_info_frame.ypos = 100
style.l_info_label = Style(style.l_default)
style.l_info_label.xalign = 0.5
style.l_info_label.ypos = 100
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 = Style(style.l_default)
style.l_info_text.xalign = 0.5
style.l_info_button = Style(style.l_button)
style.l_info_button.xalign = 0.5
style.l_info_button_text = Style(style.l_button_text)
# 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
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
# Check boxes
style.l_checkbox = Style(style.l_button)
style.l_checkbox.left_padding = INDENT
def checkbox(full, color):
if full:
return im.Twocolor("checkbox_full.png", color, color, yalign=0.5)
return im.Twocolor("images/checkbox_full.png", color, color, yalign=0.5)
else:
return im.Twocolor("checkbox_empty.png", color, color, yalign=0.5)
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_checkbox_text = Style(style.l_button_text)
style.l_checkbox_text.selected_font = LIGHT
# 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
# 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
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
return im.Twocolor("images/checkbox_empty.png", color, color, yalign=0.5)
# The projects window.
style.l_projects = Style(style.l_default)
style.l_projects.background = PROJECTS_WINDOW
init 1:
# The default style.
style l_default is default:
font LIGHT
color TEXT
idle_color IDLE
hover_color HOVER
size 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 is l_default
style l_link_text is l_default:
size size(14)
font LIGHT
# Action buttons on the bottom of the screen.
style l_right_button is l_default:
xalign 1.0
ypos 600 - 128 + 12
left_margin 8 + INDENT
right_margin 10 + INDENT
style l_right_button_text is l_default:
size 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,
# and buttons.
style l_root is l_default:
background BACKGROUND
xpadding 10
top_padding 64
bottom_padding 128
# An inner window.
style l_window is l_default:
background WINDOW
left_padding 6
xfill True
yfill True
# Normal size labels.
style l_label is l_default:
xfill True
top_padding 10
bottom_padding 8
bottom_margin 12
background SEPARATOR
style l_label_text is l_default:
size size(24)
xpos INDENT
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_text is l_default:
xpos INDENT
yoffset 6
size 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 is l_default:
xalign 1.0
yalign 1.0
yoffset 4
right_margin INDENT
style l_alternate_text is l_default:
size 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 size(14)
style l_small_text is l_text:
size size(14)
# Indents its contents.
style l_indent is l_default:
left_margin INDENT
# Indents its contents and pads vertically.
style l_indent_margin is l_indent:
ymargin 6
# Lists.
style l_list is l_default:
left_padding HALF_INDENT
xfill True
selected_background REVERSE_IDLE
selected_hover_background REVERSE_HOVER
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 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 is vbox:
yalign 0.5
xalign 0.5
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_label is l_default:
xalign 0.5
ypos 75
yanchor 1.0
yoffset 12
style l_info_label_text is l_default:
size size(36)
style l_info_text is l_default:
xalign 0.5
style l_info_button is l_button:
xalign 0.5
xmargin 50
style l_info_button_text is l_button_text:
text_align 0.5
layout "subtitle"
# Progress bar.
style l_progress_frame is l_default:
background Frame(PATTERN, 0, 0, tile=True)
ypadding 5
style l_progress_bar is l_default:
left_bar REVERSE_IDLE
right_bar Null()
ymaximum 24
# Navigation.
style l_navigation_button is l_button:
size_group "navigation"
right_margin INDENT
top_margin 3
style l_navigation_button_text is l_button_text:
size size(14)
font REGULAR
style l_navigation_text is l_text:
size size(14)
font LIGHT
color TEXT
# 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)
style l_checkbox_text is l_button_text:
selected_font LIGHT
# Lines up with a checkbox.
style l_nonbox is l_button:
xpadding INDENT
style l_nonbox_text is l_button_text:
selected_font LIGHT
# Projects list.
style l_projects is l_default:
background PROJECTS_WINDOW
style hyperlink_text:
size size(18)
font LIGHT
color IDLE
hover_color HOVER
+68
View File
@@ -0,0 +1,68 @@
# 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 FileTail(object):
def __init__(self, filename, lines=8):
self.filename = filename
self.text = ""
self.lines = lines
def update(self):
try:
with open(self.filename) as f:
text = f.read()
try:
text = renpy.fsdecode(text)
except:
text = text.decode("latin-1")
text = text.strip()
text = text.split("\n")
newtext = [ ]
for l in text:
if "\r" in l:
_head, _sep, l = l.rpartition("\r")
while l:
newtext.append(l[:100])
l = l[100:]
text = newtext
text = text[-self.lines:]
text = "\n".join(text)
if text != self.text:
self.text = text
renpy.restart_interaction()
except:
pass
+45 -22
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:
@@ -9,18 +27,18 @@ init python in theme_data:
x = 0
correct_section = False
while x < len(lines):
l = lines[x]
m = re.match(r'^screen\s+\w+\s*:\s*$', l)
if m:
correct_section = False
m = re.match(r'^screen\s+file_picker\s*:\s*$', l)
if m:
correct_section = True
if correct_section:
m = re.match(r'^\s+\$\s*columns\s*=\s*(\d+)\s*$', l)
if m:
@@ -28,7 +46,7 @@ init python in theme_data:
m = re.match(r'^\s+\$\s*rows\s*=\s*(\d+)\s*$', l)
if m:
l = l.replace(str(m.group(1)), str(file_picker_rows))
lines[x] = l
x = x + 1
@@ -37,7 +55,7 @@ init python in theme_data:
def roundrect_screen_ops(lines):
return __PerformScreenOperations(lines)
def awt_screen_ops(lines):
return __PerformScreenOperations(lines, file_picker_rows=3)
@@ -49,12 +67,12 @@ init python in theme_data:
# The set of theme functions.
THEME_FUNCTIONS = set()
# theme name -> function name to call to munge screens.rpy as appropriate
# for that theme.
THEME_SCREEN_OPERATIONS = { }
# Color schemes that work (technically - some are eye-melting) with the
# Color schemes that work (technically - some are eye-melting) with the
# roundrect-style themes.
ROUNDRECT_SCHEMES = {
'Basic Blue': {'disabled': '#404040',
@@ -337,7 +355,7 @@ init python in theme_data:
'widget_hover': '#b38698',
'widget_selected': '#fffeed',
'widget_text': '#ffffff'},
'Watermelon': {'disabled': '#f9cdad',
'disabled_text': '#fc9d9a',
'frame': '#f9cdad',
@@ -462,11 +480,11 @@ init python in theme_data:
("Marker", "marker"),
("Crayon", "crayon"),
]
ROUNDRECT_CODE = """theme.%(function)s(
## Theme: %(theme)s
## Color scheme: %(scheme)s
## The color of an idle widget face.
widget = "%(widget)s",
@@ -480,7 +498,7 @@ init python in theme_data:
## example, the current value of a preference.)
widget_selected = "%(widget_selected)s",
## The color of a disabled widget face.
## The color of a disabled widget face.
disabled = "%(disabled)s",
## The color of disabled widget text.
@@ -508,9 +526,9 @@ init python in theme_data:
## And we're done with the theme. The theme will customize
## various styles, so if we want to change them, we should
## do so below.
## do so below.
)"""
for theme, function in ROUNDRECT_VARIANTS:
THEME[theme] = { }
THEME_FUNCTIONS.add(function)
@@ -521,13 +539,13 @@ init python in theme_data:
subs["function"] = function
subs["theme"] = theme
subs["scheme"] = scheme
THEME[theme][scheme] = ROUNDRECT_CODE % (subs)
AWT_CODE = """theme.a_white_tulip(
## Theme: A White Tulip
## Scheme %(scheme)s
## The color of an idle widget face.
widget = "%(widget)s",
@@ -538,7 +556,7 @@ init python in theme_data:
## example, the current value of a preference.)
widget_selected = "%(widget_selected)s",
## The color of a disabled widget face.
## The color of a disabled widget face.
disabled = "%(disabled)s",
## The color of a frame containing widgets.
@@ -554,11 +572,16 @@ init python in theme_data:
## should take up the full height and width of the screen.
gm_root = "%(gm_root)s",
## The fonts used by this theme. The default fonts may not be
## suitable for non-English languages.
regular_font = "_theme_awt/Quicksand-Regular.ttf",
bold_font = "_theme_awt/Quicksand-Bold.ttf",
## And we're done with the theme. The theme will customize
## various styles, so if we want to change them, we should
## do so below.
## do so below.
)"""
THEME["A White Tulip"] = { }
THEME_FUNCTIONS.add("a_white_tulip")
THEME_SCREEN_OPERATIONS["A White Tulip"] = awt_screen_ops
@@ -567,7 +590,7 @@ init python in theme_data:
for scheme, colors in ROUNDRECT_SCHEMES.iteritems():
subs = dict(colors)
subs["scheme"] = scheme
THEME["A White Tulip"][scheme] = AWT_CODE % (subs)
THEME["A White Tulip"]["A White Tulip"] = AWT_CODE % dict(
+29 -5
View File
@@ -1,9 +1,27 @@
#!/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
# This is used on Linux and Mac to prompt the user for the projects
# directory.
import sys
@@ -16,11 +34,17 @@ except ImportError:
from Tkinter import Tk
from tkFileDialog import askdirectory
# Binary mode stdout for python3.
try:
sys.stdout = sys.stdout.buffer
except:
pass
# Create the TK canvas.
if __name__ == "__main__":
if __name__ == "__main__":
root = Tk()
root.withdraw()
result = askdirectory(initialdir=sys.argv[1], parent=root, title="Select Ren'Py Projects Directory")
sys.stdout.write(result)
sys.stdout.write(result.encode("utf8"))
+15
View File
@@ -0,0 +1,15 @@
translate arabic strings:
# game/about.rpy:21
old "[version!q]"
new "[version!q]"
# game/about.rpy:25
old "View license"
new "عرض الرخصة"
# game/about.rpy:27
old "Back"
new "عودة"
+23
View File
@@ -0,0 +1,23 @@
translate arabic 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 "رينباي يقوم بتشغيل الملفات المنتهية بـ .rpy تلقائياً. لكي تستعمل هذا الملف, اختر له تبويب وافتحه عبر ملف آخر."
+164
View File
@@ -0,0 +1,164 @@
# : Translation updated at 2013-11-17 23:18
translate arabic 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 "لتجهيز اللعبة للعمل على اجهزة اندرويد يمكنك تحميل الحزمة الخاصة بذلك {a=http://www.renpy.org/dl/android}here{/a}) و فك الضغط عنها, ثم نسخها إلى مجلد رينباي الرئيسي ثم إعادة فتح هذا المشغِّل."
# 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 موجوده, لكنك تحتاج لتنصيب Android SDK قبل ان تبدأ بتجهيز حزم للعمل على اندرويد. الرجاء اختيار تنصيب Android SDK لتستطيع ذلك."
# 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 موجوده, لكن المفتاح لم يتم تجهيزه. الرجاء تكوين مفتاح جديد او استرجاع android.keystore"
# game/android.rpy:15
old "The current project has not been configured. Use \"Configure\" to configure it before building."
new "المشروع الحالي لم يتم تجهيز إعدادته. الرجاء اختيار \"Configure\" لتقوم بتجهيزها قبل بناء الحزمة."
# 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 "قم باختيار زر \"Build\" لتقوم بتجهيز المشروع الحالي إلى حزمة قابلة للعمل على اندرويد. او قم بربط جهاز اندرويد و اختيار \"Build & Install\" ليتم تنصيبها مباشرة على الجهاز المطلوب."
# 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 "يقوم بمحاكاة جهاز اندرويد هاتفي محمول. \n\n خاصية اللمس يتم محاكاتها عبر مؤشر الفأره, لكن فقط حين يكون زر الفأره مضغوطاً. زر الخروج يقوم باستدعاء نافذة القائمة الرئيسية, و PageUp هو زر العودة إلى الوراء."
# 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 "يقوم بمحاكاة جهاز اندرويد تابلت. \n\n خاصية اللمس يتم محاكاتها عبر مؤشر الفأره, لكن فقط حين يكون زر الفأره مضغوطاً. زر الخروج يقوم باستدعاء نافذة القائمة الرئيسية, و PageUp هو زر العودة إلى الوراء"
# 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 "يقوم بمحاكاة جهاز Ouya. \n\n يد التحكم تتم محاكاتها بأزرار الإتجاهات, زر الإدخال يحاكي select, زر الخروج يحاكي زر menu, و PageUp يحاكي زر العودة."
# game/android.rpy:22
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:23
old "Configures the package name, version, and other information about this project."
new "يقوم بتجهيز إعدادات الحزمة, رقم النسخة, و معلومات أخرى تتعلق بهذا المشروع."
# 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 "يفتح الملف الخاص بمعلومات مفتاح Google Play في محرر النصوص. \n\n هذه الخطوة غير مطلوبة إلا لو كان البرنامج يحتاج إحدى الحوم المساندة expansion APK. الرجاء الإطلاع على ملفات المساعدة للحصول على المزيد من المعلومات."
# game/android.rpy:25
old "Builds the Android package."
new "يقوم ببناء حزمة للأندرويد."
# game/android.rpy:26
old "Builds the Android package, and installs it on an Android device connected to your computer."
new "يقوم ببناء حزمة للأندرويد, ثم يقوم بتنصيبها على جهاز أندرويد المتصل بحاسوبك."
# 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 "أندرويد: [project.current.name!q]"
# game/android.rpy:381
old "Emulation:"
new "محاكاة"
# game/android.rpy:389
old "Phone"
new "هاتف"
# game/android.rpy:393
old "Tablet"
new "تابلت/ لوحي"
# game/android.rpy:397
old "Television / OUYA"
new "تلفزيون / OUYA"
# game/android.rpy:409
old "Build:"
new ""
# game/android.rpy:417
old "Install SDK & Create Keys"
new "تنصيب SDK و اختلاق مفاتيح"
# game/android.rpy:421
old "Configure"
new "إعدادات"
# game/android.rpy:425
old "Build Package"
new "بناء الحزمة"
# game/android.rpy:429
old "Build & Install"
new "بناء و تنصيب"
# : Translation updated at 2014-04-17 13:01
translate arabic strings:
# game/android.rpy:30
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 "لبناء ملفات الأندرويد, الرجاء تحميل RAPT, ثم فك الضغط عن الملف ووضعه في مجلد رينباي. قد تحتاج لإعادة تشغيل رينباي ليعمل بشكل صحيح."
# game/android.rpy:31
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-بت لتستطيع إنشاء ملفات الأندرويد على نظام الوندوز. حزمة JDK تختلف عن JRE, قد تكون الجافا لديك موجوده لكنها تفتقد الـ JDK. \n\n الرجاء {a=http://www.oracle.com/technetwork/java/javase/downloads/index.html}تحميل و تنصيب JDK{/a} ثم إعادة تشغيل رينباي"
# game/android.rpy:39
old "Attempts to emulate a televison-based Android console, like the OUYA or Fire TV.\n\nController input is mapped to the arrow keys, Enter is mapped to the select button, Escape is mapped to the menu button, and PageUp is mapped to the back button."
new "يحاول محاكاة نظام تلفزيوني للأندرويد مثل جهاز OUYA او Fire TV. \n\n يتم تخطيط الأزرار لعصا التحكم لتناسب ازرار جهاز التحكم عن بعد. Controller 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."
# game/android.rpy:47
old "Connects to an Android device running ADB in TCP/IP mode."
new "يتصل بجهاز أندرويد يعمل على نظام ADB عن طريق TCP/IP mode"
# game/android.rpy:48
old "Disconnects from an Android device running ADB in TCP/IP mode."
new "يفصل الاتصال عن جهاز أندرويد يعمل على نظام ADB عن طريق TCP/IP mode"
# game/android.rpy:516
old "Other:"
new "آخر:"
# game/android.rpy:524
old "Remote ADB Connect"
new "الإتصال عن بعد عن طريق ADB"
# game/android.rpy:528
old "Remote ADB Disconnect"
new "قطع إتصال ADB عن بعد"
# game/android.rpy:561
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 "قبل ان تصتطيع إنشاء ملفات للأندرويد, عليك ان تقوم بتحميل ملفات RAPT الخاصة بتحويل ملفات رينباي للأندرويد. هل تريد ان تقوم بتحميل الحزمة الآن؟"
# game/android.rpy:608
old "Remote ADB Address"
new "عنوان ADB عن بعد"
# game/android.rpy:609
old "Please enter the IP address and port number to connect to, in the form \"192.168.1.143:5555\". Consult your device's documentation to determine if it supports remote ADB, and if so, the address and port to use."
new "الرجاء إدخال عنوان الأي بي ورقم المنفذ المطلوب للإتصال, على شكل \"192.168.1.143:5555\". الرجاء العودة لدليل المستخدم الخاص بجهازك لتعرف إن كان يدعم الإتصال عن بعد للـ ADB و إن كان قادراً على ذلك, ستجد العنوان و المنفذ المطلوبان."
# game/android.rpy:619
old "Invalid remote ADB address"
new "عنوان ِADB خاطيء"
# game/android.rpy:619
old "The address must contain one exactly one ':'."
new "العنوان يجب ان يحتوي على علامة ':' واحده فقط لا غير"
# game/android.rpy:623
old "The host may not contain whitespace."
new "الخادم يجب ان لا يحتوي على مساحات فارغة"
# game/android.rpy:629
old "The port must be a number."
new "يجب ان يكون العنوان مكون من أرقام فقط"
+43
View File
@@ -0,0 +1,43 @@
translate arabic 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:332
old "Display"
new "عرض"
# game/choose_theme.rpy:333
old "Window"
new "نافذة"
# game/choose_theme.rpy:334
old "Fullscreen"
new "ملء الشاشة"
# game/choose_theme.rpy:335
old "Planetarium"
new "Planetarium"
# game/choose_theme.rpy:342
old "Sound Volume"
new "مستوى الصوت"
# game/choose_theme.rpy:376
old "Choose Theme"
new "إختر المظهر"
# game/choose_theme.rpy:389
old "Theme"
new "المظهر"
# game/choose_theme.rpy:413
old "Color Scheme"
new "توليفة الألوان"
# game/choose_theme.rpy:444
old "Continue"
new "استمرار"
+528
View File
@@ -0,0 +1,528 @@
# : Translation updated at 2013-04-30 07:54
translate arabic strings:
# renpy/common/00action_file.rpy:118
old "%b %d, %H:%M"
new "%b %d, %H:%M"
# : Translation updated at 2013-04-30 07:54
translate arabic 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 "فرض استعمال المحركات البرمجية software renderer"
# 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 "هذا الجهاز يستعمل software rendering"
# renpy/common/00gltest.rpy:119
old "This computer is not using shaders."
new "هذا الجهاز لا يستعمل shaders"
# 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, قد يبدأ ذلك بشكل مصغر في شريط المهام. الرجاء اتباع التعليمات لاكمال التنصيب."
# 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} مايكروسوفت دايركت أكس يقوم تلقائياً بتنصيب شريط بينق Bing toolbar. إذا لم ترغب بذلك الرجاء القيام بإلغاء تحديد خانة الاختيار"
# 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 "إعادة تشغيل"
# : Translation updated at 2013-04-30 07:54
translate arabic strings:
# renpy/common/00keymap.rpy:167
old "Saved screenshot as %s."
new "تم حفظ الصورة كـ %s"
# : Translation updated at 2013-04-30 07:54
translate arabic 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 كل ما لم تقم بحفظة سيضيع."
# : Translation updated at 2013-04-30 07:54
translate arabic strings:
# renpy/common/00library.rpy:77
old "Skip Mode"
new "وضع التسريع"
# renpy/common/00library.rpy:80
old "Fast Skip Mode"
new "وضع التسريع السريع"
# : Translation updated at 2013-04-30 07:54
translate arabic 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 "تم إلغاء التحديث."
# : Translation updated at 2013-04-30 07:54
translate arabic strings:
# renpy/common/_compat/gamemenu.rpym:180
old "Empty Slot."
new "خانة فارغة"
# renpy/common/_compat/gamemenu.rpym:337
old "Previous"
new "السابق"
# renpy/common/_compat/gamemenu.rpym:344
old "Next"
new "التالي"
# : Translation updated at 2013-04-30 07:54
translate arabic strings:
# renpy/common/_compat/preferences.rpym:411
old "Joystick Mapping"
new "خيارات عصى التحكم"
# : Translation updated at 2013-04-30 07:54
translate arabic 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 "يفتح تقرير الخطأ في برنامج الملفات النصية."
# 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 في برنامج الملفات النصية"
# : Translation updated at 2013-04-30 07:54
translate arabic strings:
# renpy/common/_layout/classic_load_save.rpym:152
old "a"
new "a"
# renpy/common/_layout/classic_load_save.rpym:161
old "q"
new "q"
# : Translation updated at 2013-11-17 23:18
translate arabic strings:
# renpy/common/00action_file.rpy:587
old "Quick save complete."
new "تم الحفظ السريع بنجاح"
# : Translation updated at 2013-11-17 23:18
translate arabic 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 "العودة"
# : Translation updated at 2013-11-17 23:18
translate arabic strings:
# 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 "هل انت متأكد من رغبتك في تسريع الخيارات و الحوار الذي لم يسبق لك قرائته؟"
# : Translation updated at 2014-04-17 13:01
translate arabic strings:
# renpy/common/00console.rpy:179
old "%(version)s console, originally by Shiz, C, and delta.\n"
new ""
# renpy/common/00console.rpy:180
old "Press <esc> to exit console. Type help for help.\n"
new "إضغط زر الخروج لإغلاق لوحة التحكم, اكتب كلمة help للمساعدة"
# renpy/common/00console.rpy:184
old "Ren'Py script enabled."
new "لغة برمحة رينباي متاحه"
# renpy/common/00console.rpy:186
old "Ren'Py script disabled."
new "لغة برمجة رينباي غير متاحه"
# renpy/common/00console.rpy:392
old "help: show this help"
new "مساعده: عرض هذه المساعده"
# renpy/common/00console.rpy:397
old "commands:\n"
new "أوامر: \n"
# renpy/common/00console.rpy:407
old " <renpy script statement>: run the statement\n"
new "<renpy script statement>: عرض الأوامر\n"
# renpy/common/00console.rpy:409
old " <python expression or statement>: run the expression or statement"
new " <python expression or statement>: عرض التعبير او الأوامر"
# renpy/common/00console.rpy:417
old "clear: clear the console history"
new "clear: مسح تاريخ لوحة التحكم"
# renpy/common/00console.rpy:421
old "exit: exit the console"
new "exit: الخروج من لوحة التحكم"
# renpy/common/00console.rpy:429
old "load <slot>: loads the game from slot"
new "استرجاع <slot>: يقوم باسترجاع اللعب من نقطة الحفظ"
# renpy/common/00console.rpy:442
old "save <slot>: saves the game in slot"
new "حفظ <slot>: يقوم بحفظ اللعب في نقطة الحفظ"
# renpy/common/00console.rpy:453
old "reload: reloads the game, refreshing the scripts"
new "reload: يعيد تشغيل اللعبة مع عرض التغييرات في النص"
# renpy/common/00console.rpy:461
old "watch <expression>: watch a python expression"
new "مشاهده <expression>: يقوم بعرض تبيرات بايثون"
# renpy/common/00console.rpy:470
old "unwatch <expression>: stop watching an expression"
new "unwatch <expression>: يقوم بإيقاف تعبير بايثون"
# renpy/common/00console.rpy:478
old "unwatchall: stop watching all expressions"
new "unwatchall: يقوم بإيقاف كل تعبيرات بايثون"
# renpy/common/00console.rpy:484
old "jump <label>: jumps to label"
new "jump <label>: يقفز للعنوان"
# : Translation updated at 2014-04-17 13:01
translate arabic strings:
# renpy/common/00keymap.rpy:332
old "Autoreload"
new "إعادة التحميل تلقائياً"
# : Translation updated at 2014-04-17 13:01
translate arabic strings:
# renpy/common/_developer/developer.rpym:65
old "Developer Menu"
new "قائمة المبرمج"
# renpy/common/_developer/developer.rpym:67
old "Reload Game (Shift+R)"
new "إعادة تشغيل اللعبة (Shift+R)"
# renpy/common/_developer/developer.rpym:69
old "Console (Shift+O)"
new "لوحة التحكم (Shift+O)"
# renpy/common/_developer/developer.rpym:71
old "Variable Viewer"
new "مستعرض الأوامر"
# renpy/common/_developer/developer.rpym:73
old "Theme Test"
new "اختبار القوالب"
# renpy/common/_developer/developer.rpym:75
old "Image Location Picker"
new "مكان الصور المطلوبة"
# renpy/common/_developer/developer.rpym:77
old "Filename List"
new "قائمة اسماء الملفات"
# renpy/common/_developer/developer.rpym:81
old "Show Image Load Log"
new "عرض قائمة الصور "
# renpy/common/_developer/developer.rpym:84
old "Hide Image Load Log"
new "إخفاء قائمة الصور"
# renpy/common/_developer/developer.rpym:149
old "No variables have changed since the game started."
new "لم يتم تغيير اي من الأوامر منذ ان بدأت اللعبة"
# renpy/common/_developer/developer.rpym:152
old "Return to the developer menu"
new "العودة للوحة المبرمج"
# renpy/common/_developer/developer.rpym:272
old "{b}Missing Images{/b}"
new "{b}صور مفقودة{/b}"
# renpy/common/_developer/developer.rpym:424
old "Rectangle: %r"
new "مثلث: %r"
# renpy/common/_developer/developer.rpym:429
old "Mouse position: %r"
new "مكان المؤشر: %r"
# renpy/common/_developer/developer.rpym:431
old "Right-click or escape to quit."
new "إضغط بالزر الايمن او إضغط زر الخروح للإغلاق"
# renpy/common/_developer/developer.rpym:482
old "Done"
new "تم"
# : Translation updated at 2014-04-17 13:01
translate arabic strings:
# renpy/common/_developer/inspector.rpym:43
old "Displayable Inspector"
new "اختبار المستعرضات"
# renpy/common/_developer/inspector.rpym:49
old "Nothing to inspect."
new "لا يوجد شيء ليتم اختباره"
# renpy/common/_developer/inspector.rpym:58
old "Size"
new "حجم"
# renpy/common/_developer/inspector.rpym:63
old "Style"
new "مظهر"
# renpy/common/_developer/inspector.rpym:123
old "Inspecting Styles of [displayable_name!q]"
new "يتم اختبار المظهر الخاص بـ [displayable_name!q]"
# renpy/common/_developer/inspector.rpym:135
old "displayable:"
new "مستعرضات"
# renpy/common/_developer/inspector.rpym:142
old " (no properties affect the displayable)"
new " (لا توجد اي مؤثرات على هذا المستعرض)"
# renpy/common/_developer/inspector.rpym:144
old " (default properties omitted)"
new " (تم استبعاد تأثير المؤثرات القياسية)"
# renpy/common/_developer/inspector.rpym:174
old "<repr() failed>"
new "<repr() failed>"
# Translation updated at 2014-09-30 23:01
translate arabic strings:
# renpy/common/_developer/inspector.rpym:80
old "Location"
new "الموقع"
+52
View File
@@ -0,0 +1,52 @@
# : Translation updated at 2013-04-30 07:54
translate arabic strings:
# game/distribute.rpy:333
old "Nothing to do."
new "لا شيء لإنجازه"
# game/distribute.rpy:337
old "Scanning project files..."
new "يتم فحص الملفات..."
# game/distribute.rpy:344
old "Scanning Ren'Py files..."
new "يتم فحص ملفات رينباي..."
# game/distribute.rpy:494
old "Archiving files..."
new "يتم أرشفة الملفات..."
# game/distribute.rpy:745
old "Writing the [variant] [format] package."
new "يتم كتابة ملفات [variant] [format]"
# game/distribute.rpy:758
old "Making the [variant] update zsync file."
new "Making the [variant] update zsync file."
# game/distribute.rpy:854
old "Processed {b}[complete]{/b} of {b}[total]{/b} files."
new "تم انهاء {b}[complete]{/b} من عدد {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 "تم الإنتهاء من تكوين رزمة البيانات لنشر اللعبة. بسبب اختلاف نظام الملفات في الأنظمة التشغيلية ماك و لينوكس, لا يمكن فك الضغط عن الرزمة الخاصة بتلك الأنظمة على نظام وندوز."
# : Translation updated at 2013-11-17 23:18
translate arabic strings:
# game/distribute.rpy:358
old "No packages are selected, so there's nothing to do."
new "لم يتم اختيار اي حزمة, لم يحصل اي شيء."
# : Translation updated at 2014-04-17 13:01
translate arabic strings:
# game/distribute.rpy:335
old "Building distributions failed:\n\nThe build.directory_name variable may not include the space, colon, or semicolon characters."
new "فشل بناء ملفات النشر. build.directory_name يجب أن لا يحتوي على مساحات فارغة, فواصل, او فواصل منقوطة في إسم المجلد "
@@ -0,0 +1,47 @@
translate arabic 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:208
old "Build Updates"
new "بناء تحديثات:"
# game/distribute_gui.rpy:212
old "Build"
new "بناء"
# game/distribute_gui.rpy:219
old "Errors were detected when running the project. Please ensure the project runs without errors before building distributions."
new "تم ايجاد بعض الاخطاء في المشروع. الرجاء التأكد من خلو المشروع من الأخطاء قبل نشره بشكل نهائي."
# 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 "مشروعك يخلو من معلومات النشر, هل ترغب في إضافة هذه المعلومات في نهاية ملف options.rpy؟"
+64
View File
@@ -0,0 +1,64 @@
# Translation updated at 2013-04-30 07:54
translate arabic 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} محرر نص له واجهة سهلة الاستعمال ويعين على كتابة النصوص البرمجية يفضل برنامج يحتوي على مدقق لغوي. Editraحالياً لا يدعم اللغات الأجنبية مثل اللغه الكورية و الصينية و اليابانية."
# 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} محرر نص له واجهة سهلة الاستعمال ويعين على كتابة النصوص البرمجية يفضل برنامج يحتوي على مدقق لغوي. Editraحالياً لا يدعم اللغات الأجنبية مثل اللغه الكورية و الصينية و اليابانية. على نظام لينوكس, Editra يحتاج wxPython."
# game/editor.rpy:137
old "The 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: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 "قد يكون السبب ان الجافا غير موجوده على هذا الجهاز."
# game/editor.rpy:327
old "An exception occured while launching the text editor:\n[exception!q]"
new "حصل استثناء اثناء فتح المحرر: \n[exception!q]"
# game/editor.rpy:378
old "Select Editor"
new "الرجاء اختيار المحرر"
# 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 "محرر النصوص هو برنامج يساعدك على تعديل ملفات رينباي البرمجية والحوار. هنا, يمكنك اختيار المحرر الذي سيستعلمه رينباي. إذا لم يكن لديك مسبقاً, سيتم تحميله و تنصيبه بشكل اوتوماتيكي."
# game/editor.rpy:415
old "Cancel"
new "إلغاء الامر"
# Translation updated at 2013-11-17 23:18
translate arabic strings:
# game/editor.rpy:137
old "This may have occured because wxPython is not installed on this system."
new "قد يكون سبب ذلك ان wxPython غير موجود في نظام التشغيل لديك"
# game/editor.rpy:155
old "A mature editor that requires Java."
new "محرر متخصص يستعمل لغة جافا"
# 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 "يمنع رينباي من فتح اي محرر نصوص"
+116
View File
@@ -0,0 +1,116 @@
# : Translation updated at 2013-04-30 07:54
translate arabic strings:
# game/front_page.rpy:79
old "+ Create New Project"
new "+ إبدأ مشروعاً جديداً"
# game/front_page.rpy:90
old "Launch Project"
new "تشغيل المشروع"
# game/front_page.rpy:111
old "Tutorial"
new "الدليل العملي"
# game/front_page.rpy:112
old "The Question"
new "السؤال"
# game/front_page.rpy:128
old "Active Project"
new "المشروع الحالي"
# game/front_page.rpy:136
old "Open Directory"
new "فتح مجلد"
# game/front_page.rpy:141
old "game"
new "اللعبة"
# game/front_page.rpy:142
old "base"
new "المشروع كله"
# game/front_page.rpy:148
old "Edit File"
new "تحرير ملف"
# game/front_page.rpy:156
old "All script files"
new "جميع الملفات النصية"
# game/front_page.rpy:165
old "Navigate Script"
new "مهام إضافية"
# game/front_page.rpy:176
old "Check Script (Lint)"
new "فحص الملف (لينت)"
# game/front_page.rpy:177
old "Change Theme"
new "تغيير المظهر"
# game/front_page.rpy:178
old "Delete Persistent"
new "حذف الملفات المؤقتة"
# game/front_page.rpy:186
old "Build Distributions"
new "تجميع المشروع للنشر"
# game/front_page.rpy:188
old "Generate Translations"
new "تجهيز ملفات للترجمة"
# game/front_page.rpy:204
old "Checking script for potential problems..."
new "يتم فحص الملفات لأي اخطاء محتملة..."
# game/front_page.rpy:219
old "Deleting persistent data..."
new "يتم الآن حذف الملفات المؤقتة "
# : Translation updated at 2013-11-17 23:18
translate arabic strings:
# game/front_page.rpy:204
old "Android"
new "أندرويد"
# game/front_page.rpy:206
old "Extract Dialogue"
new "استخراج النص"
# : Translation updated at 2014-04-17 13:01
translate arabic strings:
# game/front_page.rpy:144
old "[p.name!q] (template)"
new "[p.name!q] (template)"
# Translation updated at 2014-09-30 23:01
translate arabic strings:
# game/front_page.rpy:35
old "Open [text] directory."
new "فتح المجلد [text]"
# game/front_page.rpy:150
old "Select project [text]."
new "اختر المشروع [text]"
# game/front_page.rpy:234
old "Force Recompile"
new "إعادة حزم الملفات"
# game/front_page.rpy:285
old "Recompiling all rpy files into rpyc files..."
new "يتم إعادة حزم الملفات من صيغة rpy إلى rpyc..."
+90
View File
@@ -0,0 +1,90 @@
translate arabic strings:
# game/interface.rpy:89
old "Documentation"
new "المستندات المرفقة"
# game/interface.rpy:90
old "Ren'Py Website"
new "موقع رينباي"
# game/interface.rpy:91
old "Ren'Py Games List"
new "قائمة ألعاب رينباي"
# 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:149
old "Yes"
new "نعم"
# game/interface.rpy:151
old "No"
new "لا"
# game/interface.rpy:181
old "Due to package format limitations, non-ASCII file and directory names are not allowed."
new "بسبب محدودية التجميع, الاحرف الغير لاتينيه غير مسموح بها في اسم الملف او المجلدات"
# game/interface.rpy:183
old "[title]"
new "[title]"
# game/interface.rpy:248
old "ERROR"
new "خطأ"
# game/interface.rpy:280
old "While [what!q], an error occured:"
new "حصل خطأ أثناء [what!q]"
# game/interface.rpy:281
old "[exception!q]"
new "[exception!q]"
# game/interface.rpy:298
old "Text input may not contain the {{ or [[ characters."
new "لا يمكن استعمال الرمزان {{ و ]] هنا"
# game/interface.rpy:303
old "File and directory names may not contain / or \\."
new "غير مسموح ان يحتوي اسم الملف او المجلد على الرمزان / أو \\"
# game/interface.rpy:309
old "File and directory names must consist of ASCII characters."
new "اسم الملف و المجلدات التي تحتويه يجب ان تكون مكتوبة بأحرف ASCII "
# game/interface.rpy:330
old "INFORMATION"
new "معلومات"
# game/interface.rpy:373
old "PROCESSING"
new "يتم إجراء العمليات"
# game/interface.rpy:390
old "QUESTION"
new "سؤال"
translate arabic strings:
# game/interface.rpy:451
old "CHOICE"
new "إختيار"
+71
View File
@@ -0,0 +1,71 @@
translate arabic 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:168
old "refresh"
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 "TODOs"
# 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 "No TODO comments found.\n\nTo create one, include \"# TODO\" in your script."
# game/navigation.rpy:238
old "The list of names is empty."
new "قائمة الأسماء فارغة"
+48
View File
@@ -0,0 +1,48 @@
# : Translation updated at 2013-04-30 07:54
translate arabic 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. Ren'Py ships with a default template that creates an English-language game with standard screens."
new "الرجاء اختيار التصميم الذي ترغبه لمشروعك الجديد. رينباي يأتي بعدة تصاميم قياسية يمكنك التعديل عليها لاحقاً."
# 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] يوجد مسبقاً, الرجاء اختيار اسم مختلف."
# : Translation updated at 2013-11-17 23:18
translate arabic strings:
# 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 "الرجاء اختيار القالب المطلوب للمشروع الجديد. هذه القوالب تقوم بتجهيز اتجاه النص و اللغه المستخدمة في الواجهة لتسهل عملية البدء. إذا لم تكن لغتك مدعومة الرجاء اختيار اللغة الانجليزية."
# : Translation updated at 2014-04-17 13:01
translate arabic strings:
# game/new_project.rpy:71
old "The projects directory could not be set. Giving up."
new "لم يتم تحديد مجلد المشاريع, سيتم الإلغاء"
+84
View File
@@ -0,0 +1,84 @@
# : Translation updated at 2013-04-30 07:54
translate arabic strings:
# game/preferences.rpy:40
old "Launcher Preferences"
new "خيارات برنامج التشغيل"
# 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 "خيارات برنامج التشغيل:"
# game/preferences.rpy:145
old "Hardware rendering"
new "الإستعراض بواسطة قطع الجهاز الداخلية"
# game/preferences.rpy:148
old "Console output"
new "الإستعراض بواسطة البرمجيات المتوفرة"
# game/preferences.rpy:169
old "Open launcher project"
new "فتح الواجهة التشغيلية كمشروع"
# game/preferences.rpy:183
old "Language:"
new "اللغة:"
# Translation updated at 2014-04-17 13:01
translate arabic strings:
# game/preferences.rpy:164
old "Show templates"
new "عرض القوالب"
# Translation updated at 2014-09-30 23:01
translate arabic strings:
# game/preferences.rpy:91
old "Projects directory: [text]"
new "مجلد المشاريع [text]"
# game/preferences.rpy:114
old "Text editor: [text]"
new "محرر النصوص [text]"
# game/preferences.rpy:171
old "Large fonts"
new "خط كبير"
+68
View File
@@ -0,0 +1,68 @@
# : Translation updated at 2013-04-30 07:54
translate arabic strings:
# game/project.rpy:196
old "Ren'Py is scanning the project..."
new "رينباي يقوم بفحص المشروع"
# game/project.rpy:485
old "PROJECTS DIRECTORY"
new "سياق مجلدات المشاريع"
# 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 "الرجاء اختيار نسق المشاريع من الصفحة الخاصة بذلك. \n{b}قد تكون النافذة ظهرت خلف هذه النافذة.{/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 "سيقوم البرنامج بفحص المجلد هذا لإيجاد المشاريع السابقة, أو ليضع المشاريع الجديده فيه, و ايضاً لوضع المشاريع المنتهيه عند تجهيزها للنشر."
# game/project.rpy:525
old "Ren'Py was unable to run python with tkinter to choose the projects directory."
new "رينباي لم يستطع تشغيل برمجيات بايثون للبحث عن مجلد المشاريع."
# game/project.rpy:529
old "Ren'Py has set the projects directory to:"
new "رينباي قام بتحديد مجلد المشاريع إلى المكان التالي:"
# : Translation updated at 2014-04-17 13:01
translate arabic strings:
# game/project.rpy:48
old "After making changes to the script, press shift+R to reload your game."
new "عند إجراء أي تغييرات في ملف الحوار, يمكنك ضغط shift+R لترى التغييرات داخل اللعبة"
# game/project.rpy:49
old "Press shift+O (the letter) to access the console."
new "إضغط shift+O للدخول على لوحة التحكم"
# game/project.rpy:50
old "Press shift+D to access the developer menu."
new "إضغط shift+D للدخول على لوحة تحكم المبرمج"
# game/project.rpy:219
old "Launching the project failed."
new "لم تنجح محاولة إقلاع المشروع"
# game/project.rpy:219
old "Please ensure that your project launches normally before running this command."
new "الرجاء التأكد من سلامة إقلاع المشروع قبل تشغيل هذا الأمر البرمجي"
# game/project.rpy:516
old "Launching"
new "جاري الإقلاع"
# game/project.rpy:585
old "Ren'Py was unable to run python with tkinter to choose the projects directory. Please install the python-tk or tkinter package."
new "رينباي لم يتمكن من تشغيل بايثون مع tkinter لكي يختار مجلد المشاريع, الرجاء تنصيب Python-tk او tkinter"
# Translation updated at 2014-09-30 23:01
translate arabic strings:
# game/project.rpy:47
old "Have you backed up your projects recently?"
new "هل قمت بعمل نسخة احتياطية من مشاريعك مؤخراً؟"
+17
View File
@@ -0,0 +1,17 @@
translate arabic python:
al = "DejaVuSans.ttf"
style.l_default.font = al
style.l_default.size = 16
style.l_button_text.selected_font = al
style.l_button_text.selected_bold = True
style.l_link_text.font = al
style.l_alternate_text.font = al
style.l_navigation_button_text.font = al
style.l_navigation_text.font = al
style.l_navigation_text.bold = True
style.l_checkbox_text.selected_font = al
style.l_nonbox_text.selected_font = al
style.hyperlink_text.font = al
make_style_backup()
config.rtl = True
+38
View File
@@ -0,0 +1,38 @@
translate arabic 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 "يقوم رينباي بتصنيع ملفات الترجمة..."
# game/translations.rpy:30
old "Ren'Py has finished generating [language] translations."
new "انتهى رينباي من صناعة ملفات الترجمة إلى [language]"
translate arabic strings:
# 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 "رينباي يقوم باستخراج الحوار إلى ملف نص"
# 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 "رينباي انتهى من استخراج الحوار. الحوار المستخرج يوجد الآن في [format] في المجلد الرئيسي"
+100
View File
@@ -0,0 +1,100 @@
# : Translation updated at 2013-04-30 07:54
translate arabic 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 "طريقة التحديث تحدد لبرنامج رينباي اي المواقع يستخدم لإيجاد النسخ الجديدة. الرجاء اختيار الطريقة التي تناسبك."
# 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} نسخة رينباي التي يفضل استعمالها مع كل الالعاب الجديدة."
# 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 "عينة من نسخة رينباي القادمة تسمح لك بتجربة الإضافات الجديدة. لا ننصح باستعمالها لصناعة ألعاب معدة للنشر."
# 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 "النسخ التجريبية من رينباي. الأفضل ألا تستعمل هذه النسخ إلا لو طلب منك ذلك احد مبرمجي رينباي"
# 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 "نسخة رينباي التي لديك هي الأحدث."
# 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 "تم تنصيب التحديثات بنجاح, سيتم إعادة تشغيل رينباي الآن."
# 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 "تحديثات رينباي."
# game/updater.rpy:162
old "Proceed"
new "استمرار."
# : Translation updated at 2014-04-17 13:01
translate arabic strings:
# game/updater.rpy:129
old "Nightly"
new "مسائي"
# game/updater.rpy:135
old "The bleeding edge of Ren'Py development. This may have the latest features, or might not run at all."
new "أحدث نسخة طازجة من رينباي التجريبي, قد يحتوي على آخر مستجدات رينباي و قد لا يعمل مطلقاً"
+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"
+13
View File
@@ -0,0 +1,13 @@
translate german strings:
# game/about.rpy:21
old "[version!q]"
new "[version!q]"
# game/about.rpy:25
old "View license"
new "Lizenz ansehen"
# game/about.rpy:27
old "Back"
new "Zurück"
+21
View File
@@ -0,0 +1,21 @@
translate german strings:
# game/add_file.rpy:7
old "FILENAME"
new "DATEINAME"
# game/add_file.rpy:7
old "Enter the name of the script file to create."
new "Geben Sie den Namen der Script-Datei ein, um sie zu erstellen."
# game/add_file.rpy:10
old "The filename must have the .rpy extension."
new "Der Dateiname muss die Endung .rpy haben."
# game/add_file.rpy:18
old "The file already exists."
new "Die Datei existiert bereits."
# 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 "# RenPy lädt automatisch alle Skript-Dateien, die auf .rpy enden. Um diese\n# Datei zu verwenden, setzen sie ein Label und springen sie aus einer anderen Datei dorthin.\n"
+160
View File
@@ -0,0 +1,160 @@
translate german 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 "Um eine Android-Datei zu erstellen, laden Sie bitte RAPT ({a=http://www.renpy.org/dl/android}hier{/a}) herunter, entpacken Sie es und platzieren Sie es im RenPy Verzeichnis. Starten Sie dann bitte RenPy neu."
# 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 wurde installiert, aber Sie müssen das Android-SDK installieren, bevor Sie Android-Dateien erstellen können. Wählen Sie „SDK Installieren“, um dies zu tun."
# 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 wurde installiert, aber ein Key wurde nicht eingestellt. Bitte erstellen Sie einen neuen Key oder stellen Sie android.keystore wieder her."
# game/android.rpy:15
old "The current project has not been configured. Use \"Configure\" to configure it before building."
new "Das aktuelle Projekt wurde nicht eingestellt. Verwenden Sie „Einstellen“, um es vor der Erstellung anzupassen."
# 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 "Wählen Sie „Erstellen“, um das aktuelle Projekt zu erstellen oder schließen Sie ein Android-Gerät an und wählen Sie „Erstellen und installieren“, um es zu erstellen und auf dem Gerät zu installieren."
# 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 "Emuliert ein Android-Handy.\n\nDie Berührungseingabe wird mithilfe der Maus emuliert, aber nur, wenn die Schaltfläche gedrückt wird. „Escape“ fungiert als Menüschaltfläche und „Bild rauf“ als „Zurück-Schaltfläche“."
# 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 "Emuliert ein Android-Tablet.\n\nDie Berührungseingabe wird mithilfe der Maus emuliert, aber nur, wenn die Schaltfläche gedrückt wird. „Escape“ fungiert als Menüschaltfläche und „Bild rauf“ als „Zurück-Schaltfläche“."
# 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 "Emuliert eine OUYA-Konsole.\n\nDie Contollereingabe wird mithilfe der Pfeiltasten emuliert, „Enter“ fungiert als Auswahlschaltfläche, „Escape“ als Menüschaltfläche und „Bild rauf“ als „Zurück-Schaltfläche“."
# game/android.rpy:22
old "Downloads and installs the Android SDK and supporting packages. Optionally, generates the keys required to sign the package."
new "Lädt das Android SDK herunter und installiert es. Generiert optional die Keys, die für die Authentifizierung der Datei benötigt werden."
# game/android.rpy:23
old "Configures the package name, version, and other information about this project."
new "Stellt Dateinamen, Version und andere Informationen über dieses Projekt ein."
# 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 "Öffnet die Datei mit den Google-Play-Keys im Editor.\n\nDies ist nur nötig, wenn die Anwendung ein Expansion-APK verwendet. Lesen Sie die Dokumentation für weitere Details."
# game/android.rpy:25
old "Builds the Android package."
new "Erstellt die Android-Datei."
# game/android.rpy:26
old "Builds the Android package, and installs it on an Android device connected to your computer."
new "Erstellt die Android-Datei und installiert es auf ein Android-Gerät, das mit Ihrem Computer verbunden ist."
# 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 "Emulation:"
# game/android.rpy:389
old "Phone"
new "Handy"
# game/android.rpy:393
old "Tablet"
new "Tablet"
# game/android.rpy:397
old "Television / OUYA"
new "Fernseher / OUYA"
# game/android.rpy:409
old "Build:"
new "Erstellen:"
# game/android.rpy:417
old "Install SDK & Create Keys"
new "SDK installieren und Keys erstellen"
# game/android.rpy:421
old "Configure"
new "Einstellen"
# game/android.rpy:425
old "Build Package"
new "Datei erstellen"
# game/android.rpy:429
old "Build & Install"
new "Erstellen und installieren"
translate german strings:
# game/android.rpy:30
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 "Um eine Android-Datei zu erstellen, laden Sie bitte RAPT herunter, entpacken Sie es und platzieren Sie es im RenPy Verzeichnis. Starten Sie dann bitte RenPy neu."
# game/android.rpy:31
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 "Ein 32-bit Java-Development-Kit wird benötigt, um Android-Packages auf Windows zu erstellen. Das JDK unterscheidet sich vom JRE, daher ist es möglich, dass Sie Java ohne das JDK installiert haben.\n\nBitte {a=http://www.oracle.com/technetwork/java/javase/downloads/index.html}laden Sie das JDK herunter und installieren Sie es{/a}, dann starten Sie den RenPy-Launcher neu."
# game/android.rpy:39
old "Attempts to emulate a televison-based Android console, like the OUYA or Fire TV.\n\nController input is mapped to the arrow keys, Enter is mapped to the select button, Escape is mapped to the menu button, and PageUp is mapped to the back button."
new "Emuliert eine Fernseher-Android-Konsole wie die OUYA oder Fire TV.\n\nDie Contollereingabe wird mithilfe der Pfeiltasten emuliert, „Enter“ fungiert als Auswahlschaltfläche, „Escape“ als Menüschaltfläche und „Bild rauf“ als „Zurück-Schaltfläche“."
# game/android.rpy:47
old "Connects to an Android device running ADB in TCP/IP mode."
new "Verbindet mit einem Android-Gerät, das auf ADB im TCP/IP-Modus läuft."
# game/android.rpy:48
old "Disconnects from an Android device running ADB in TCP/IP mode."
new "Trennt Verbindung von einem Android-Gerät, das auf ADB im TCP/IP-Modus läuft."
# game/android.rpy:516
old "Other:"
new "Anderes:"
# game/android.rpy:524
old "Remote ADB Connect"
new "Remote-ADB verbinden"
# game/android.rpy:528
old "Remote ADB Disconnect"
new "Remote-ADB trennen"
# game/android.rpy:561
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 "Bevor Sie Android-Apps erstellen können, müssen Sie RAPT herunterladen, das RenPy-Android-Packaging-Tool. Möchten Sie RAPT jetzt herunterladen?"
# game/android.rpy:608
old "Remote ADB Address"
new "Remote-ADB-Adresse"
# game/android.rpy:609
old "Please enter the IP address and port number to connect to, in the form \"192.168.1.143:5555\". Consult your device's documentation to determine if it supports remote ADB, and if so, the address and port to use."
new "Bitte geben Sie die IP-Adresse und die Port-Nummer zum Verbinden ein, Beispiel: „192.168.1.143:5555“. Schauen Sie im Handbuch ihres Geräts nach, um festzustellen, ob es Remote-ADB unterstützt, und wenn ja, schauen Sie die Adresse und den Port nach."
# game/android.rpy:619
old "Invalid remote ADB address"
new "Ungültige Remote-ADB-Adresse"
# game/android.rpy:619
old "The address must contain one exactly one ':'."
new "Die Adresse muss exakt ein „:“ beinhalten."
# game/android.rpy:623
old "The host may not contain whitespace."
new "Der Host darf keine Leerzeichen enthalten."
# game/android.rpy:629
old "The port must be a number."
new "Der Port muss eine Nummer sein."
+41
View File
@@ -0,0 +1,41 @@
translate german strings:
# game/choose_theme.rpy:274
old "Could not change the theme. Perhaps options.rpy was changed too much."
new "Konnte Theme nicht ändern. Vielleicht wurde options.rpy zu stark verändert."
# game/choose_theme.rpy:332
old "Display"
new "Anzeige"
# game/choose_theme.rpy:333
old "Window"
new "Fenster"
# game/choose_theme.rpy:334
old "Fullscreen"
new "Vollbild"
# game/choose_theme.rpy:335
old "Planetarium"
new "Planetarium"
# game/choose_theme.rpy:342
old "Sound Volume"
new "Soundlautstärke"
# game/choose_theme.rpy:376
old "Choose Theme"
new "Theme auswählen"
# game/choose_theme.rpy:389
old "Theme"
new "Theme"
# game/choose_theme.rpy:413
old "Color Scheme"
new "Farbschema"
# game/choose_theme.rpy:444
old "Continue"
new "Weiter"
+458
View File
@@ -0,0 +1,458 @@
translate german strings:
# renpy/common/00action_file.rpy:118
old "%b %d, %H:%M"
new "%d. %b, %H:%M"
# renpy/common/00action_file.rpy:587
old "Quick save complete."
new "Schnellspeicherung erfolgreich."
translate german strings:
# renpy/common/00gallery.rpy:521
old "Image [index] of [count] locked."
new "Grafik [index] von [count] gesperrt."
# renpy/common/00gallery.rpy:539
old "prev"
new "vor"
# renpy/common/00gallery.rpy:540
old "next"
new "weiter"
# renpy/common/00gallery.rpy:541
old "slideshow"
new "slideshow"
# renpy/common/00gallery.rpy:542
old "return"
new "zurück"
translate german strings:
# renpy/common/00gltest.rpy:50
old "Graphics Acceleration"
new "Grafikbeschleuniger"
# renpy/common/00gltest.rpy:54
old "Automatically Choose"
new "Automatisch auswählen"
# renpy/common/00gltest.rpy:59
old "Force Angle/DirectX Renderer"
new "Angle/DirectX-Darstellung erzwingen"
# renpy/common/00gltest.rpy:63
old "Force OpenGL Renderer"
new "OpenGL-Darstellung erzwingen"
# renpy/common/00gltest.rpy:67
old "Force Software Renderer"
new "Software-Darstellung erzwingen"
# renpy/common/00gltest.rpy:73
old "Changes will take effect the next time this program is run."
new "Die Änderungen werden beim nächsten Neustart des Programms übernommen."
# renpy/common/00gltest.rpy:82
old "Return"
new "Zurück"
# renpy/common/00gltest.rpy:112
old "Performance Warning"
new "Performance Warnung"
# renpy/common/00gltest.rpy:117
old "This computer is using software rendering."
new "Dieser Computer verwendet Software-Darstellung."
# renpy/common/00gltest.rpy:119
old "This computer is not using shaders."
new "Dieser Computer verwendet keine Shader."
# renpy/common/00gltest.rpy:121
old "This computer is displaying graphics slowly."
new "Dieser Computer zeigt Grafiken langsam an."
# renpy/common/00gltest.rpy:123
old "This computer has a problem displaying graphics: [problem]."
new "Dieser Computer hat ein Problem, Grafiken anzuzeigen: [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 "Die Grafiktreiber könnten nicht mehr aktuell sein oder nicht korrekt funktionieren. Dies kann zu langsamer oder inkorrekter Grafikanzeige führen. Das Aktualisieren von DirectX könnte dieses Problem beheben."
# 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 "Die Grafiktreiber könnten nicht mehr aktuell sein oder nicht korrekt funktionieren. Dies kann zu langsamer oder inkorrekter Grafikanzeige führen."
# renpy/common/00gltest.rpy:135
old "Update DirectX"
new "DirectX aktualisieren"
# renpy/common/00gltest.rpy:141
old "Continue, Show this warning again"
new "Fortsetzen, diese Warnung wieder anzeigen"
# renpy/common/00gltest.rpy:145
old "Continue, Don't show warning again"
new "Fortsetzen, diese Warnung nicht mehr anzeigen"
# renpy/common/00gltest.rpy:171
old "Updating DirectX."
new "DirectX aktualisieren."
# 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 Websetup wurde gestartet. Es könnte minimiert in der Taskleiste starten. Bitte folgen Sie den Anweisungen, um DirectX zu installieren."
# 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}Anmerkung:{/b} Microsofts DirectX Websetup-Programm installiert automatisch die Bing-Toolbar. Wenn Sie diese Toolbar nicht möchten, entfernen Sie das Häkchen bei der entsprechenden Schaltfläche."
# renpy/common/00gltest.rpy:183
old "When setup finishes, please click below to restart this program."
new "Wenn die Installation abgeschlossen ist, klicken Sie bitte unten, um dieses Programm neuzustarten."
# renpy/common/00gltest.rpy:185
old "Restart"
new "Neustart"
translate german strings:
# renpy/common/00keymap.rpy:167
old "Saved screenshot as %s."
new "Screenshot unter %s gespeichert."
translate german strings:
# renpy/common/00layout.rpy:421
old "Are you sure?"
new "Sind Sie sicher?"
# renpy/common/00layout.rpy:422
old "Are you sure you want to delete this save?"
new "Sind Sie sicher, dass Sie diese Datei löschen möchten?"
# renpy/common/00layout.rpy:423
old "Are you sure you want to overwrite your save?"
new "Sind Sie sicher, dass Sie diese Datei überschreiben möchten?"
# renpy/common/00layout.rpy:424
old "Loading will lose unsaved progress.\nAre you sure you want to do this?"
new "Beim Laden geht ungespeicherter Fortschritt verloren.\nSind Sie sicher, dass Sie das tun möchten?"
# renpy/common/00layout.rpy:425
old "Are you sure you want to quit?"
new "Sind Sie sicher, dass Sie beenden möchten?"
# renpy/common/00layout.rpy:426
old "Are you sure you want to return to the main menu?\nThis will lose unsaved progress."
new "Sind Sie sicher, dass Sie zurück zum Hauptmenü möchten?\nUngespeicherter Fortschritt geht dabei verloren."
# renpy/common/00layout.rpy:427
old "Are you sure you want to begin skipping?"
new "Sind Sie sicher, dass Sie vorspulen möchten?"
# renpy/common/00layout.rpy:428
old "Are you sure you want to skip to the next choice?"
new "Sind Sie sicher, dass Sie zur nächsten Auswahl vorspulen möchten?"
# renpy/common/00layout.rpy:429
old "Are you sure you want to skip to unseen dialogue or the next choice?"
new "Sind Sie sicher, dass Sie zum nächsten ungelesenen Dialog oder zur nächsten Auswahl vorspulen möchten?"
translate german strings:
# renpy/common/00library.rpy:77
old "Skip Mode"
new "Vorspulen"
# renpy/common/00library.rpy:80
old "Fast Skip Mode"
new "Schnell vorspulen"
translate german strings:
# renpy/common/00updater.rpy:1255
old "Updater"
new "Aktualisieren"
# renpy/common/00updater.rpy:1264
old "This program is up to date."
new "Dieses Programm ist aktuell."
# renpy/common/00updater.rpy:1266
old "[u.version] is available. Do you want to install it?"
new "[u.version] ist verfügbar. Möchten Sie sie installieren?"
# renpy/common/00updater.rpy:1268
old "Preparing to download the updates."
new "Vorbereiten, um die Aktualisierungen herunterzuladen."
# renpy/common/00updater.rpy:1270
old "Downloading the updates."
new "Aktualisierungen werden heruntergeladen."
# renpy/common/00updater.rpy:1272
old "Unpacking the updates."
new "Aktualisierungen werden entpackt."
# renpy/common/00updater.rpy:1276
old "The updates have been installed. The program will restart."
new "Die Aktualisierungen wurden installiert. Das Programm wird nun neustarten."
# renpy/common/00updater.rpy:1278
old "The updates have been installed."
new "Die Aktualisierungen wurden installiert."
# renpy/common/00updater.rpy:1280
old "The updates were cancelled."
new "Die Aktualisierungen wurden abgebrochen."
translate german strings:
# renpy/common/_compat/gamemenu.rpym:180
old "Empty Slot."
new "Leerer Speicherplatz."
# renpy/common/_compat/gamemenu.rpym:337
old "Previous"
new "Vorige"
# renpy/common/_compat/gamemenu.rpym:344
old "Next"
new "Nächste"
translate german strings:
# renpy/common/_compat/preferences.rpym:411
old "Joystick Mapping"
new "Joystickbelegung"
translate german strings:
# renpy/common/_errorhandling.rpym:434
old "Rollback"
new "Zurückscrollen"
# renpy/common/_errorhandling.rpym:436
old "Attempts a roll back to a prior time, allowing you to save or choose a different choice."
new "Versucht zu einem früheren Zeitpunkt zu gehen und ermöglicht es zu speichern oder eine andere Auswahl zu treffen."
# renpy/common/_errorhandling.rpym:441
old "Ignores the exception, allowing you to continue. This often leads to additional errors."
new "Ignoriert den Fehler und ermöglicht es, fortzufahren. Dies führt oft zu weiteren Fehlern."
# renpy/common/_errorhandling.rpym:446
old "Reloads the game from disk, saving and restoring game state if possible."
new "Startet das Spiel neu und stellt den Spielstand wieder her, wenn möglich."
# renpy/common/_errorhandling.rpym:450
old "Opens the traceback.txt file in a text editor."
new "Öffnet die traceback.txt Datei in einem Texteditor."
# renpy/common/_errorhandling.rpym:483
old "Parsing the script failed."
new "Syntaxanalyse gescheitert."
# renpy/common/_errorhandling.rpym:510
old "Open Parse Errors"
new "Fehleranalyse öffnen"
# renpy/common/_errorhandling.rpym:512
old "Opens the errors.txt file in a text editor."
new "Öffnet die errors.txt Datei in einem Texteditor."
translate german strings:
# renpy/common/_layout/classic_load_save.rpym:152
old "a"
new "a"
# renpy/common/_layout/classic_load_save.rpym:161
old "q"
new "s"
translate german strings:
# renpy/common/00console.rpy:179
old "%(version)s console, originally by Shiz, C, and delta.\n"
new "%(version)s Konsole, ursprünglich von Shiz, C und delta.\n"
# renpy/common/00console.rpy:180
old "Press <esc> to exit console. Type help for help.\n"
new "Drücken Sie <esc>, um die Konsole zu schließen. Geben Sie „help“ ein, um die Hilfe anzuzeigen.\n"
# renpy/common/00console.rpy:184
old "Ren'Py script enabled."
new "RenPy Skript aktiviert."
# renpy/common/00console.rpy:186
old "Ren'Py script disabled."
new "RenPy Skript deaktiviert."
# renpy/common/00console.rpy:392
old "help: show this help"
new "help: zeigt diese Hilfe an"
# renpy/common/00console.rpy:397
old "commands:\n"
new "Befehle:\n"
# renpy/common/00console.rpy:407
old " <renpy script statement>: run the statement\n"
new " <renpy script statement>: startet die Anweisung\n"
# renpy/common/00console.rpy:409
old " <python expression or statement>: run the expression or statement"
new " <python expression or statement>: startet den Ausdruck oder die Anweisung"
# renpy/common/00console.rpy:417
old "clear: clear the console history"
new "clear: leert das Konsolenprotokoll"
# renpy/common/00console.rpy:421
old "exit: exit the console"
new "exit: schließt die Konsole"
# renpy/common/00console.rpy:429
old "load <slot>: loads the game from slot"
new "load <slot>: lädt das Spiel aus dem Speicherplatz"
# renpy/common/00console.rpy:442
old "save <slot>: saves the game in slot"
new "save <slot>: speichert das Spiel im Speicherplatz"
# renpy/common/00console.rpy:453
old "reload: reloads the game, refreshing the scripts"
new "reload: startet das Spiel neu und erneuert die Skripte"
# renpy/common/00console.rpy:461
old "watch <expression>: watch a python expression"
new "watch <expression>: beobachtet einen Python-Ausdruck"
# renpy/common/00console.rpy:470
old "unwatch <expression>: stop watching an expression"
new "unwatch <expression>: beendet das Beobachten eines Ausdrucks"
# renpy/common/00console.rpy:478
old "unwatchall: stop watching all expressions"
new "unwatchall: beendet das Beobachten aller Ausdrücke"
# renpy/common/00console.rpy:484
old "jump <label>: jumps to label"
new "jump <label>: springt zum Label"
translate german strings:
# renpy/common/00keymap.rpy:332
old "Autoreload"
new "Autoneustart"
translate german strings:
# renpy/common/_developer/developer.rpym:65
old "Developer Menu"
new "Entwicklermenü"
# renpy/common/_developer/developer.rpym:67
old "Reload Game (Shift+R)"
new "Spiel neustarten (Shift + R)"
# renpy/common/_developer/developer.rpym:69
old "Console (Shift+O)"
new "Konsole (Shift + O)"
# renpy/common/_developer/developer.rpym:71
old "Variable Viewer"
new "Variablen anzeigen"
# renpy/common/_developer/developer.rpym:73
old "Theme Test"
new "Themetest"
# renpy/common/_developer/developer.rpym:75
old "Image Location Picker"
new "Grafikposition auswählen"
# renpy/common/_developer/developer.rpym:77
old "Filename List"
new "Liste der Dateinamen"
# renpy/common/_developer/developer.rpym:81
old "Show Image Load Log"
new "Grafiklog anzeigen"
# renpy/common/_developer/developer.rpym:84
old "Hide Image Load Log"
new "Grafiklog verbergen"
# renpy/common/_developer/developer.rpym:149
old "No variables have changed since the game started."
new "Keine Variablen wurden geändert, seit das Spiel gestartet wurde."
# renpy/common/_developer/developer.rpym:152
old "Return to the developer menu"
new "Zurück zum Entwicklermenü"
# renpy/common/_developer/developer.rpym:272
old "{b}Missing Images{/b}"
new "{b}Fehlende Grafiken{/b}"
# renpy/common/_developer/developer.rpym:424
old "Rectangle: %r"
new "Rechteck: %r"
# renpy/common/_developer/developer.rpym:429
old "Mouse position: %r"
new "Mausposition: %r"
# renpy/common/_developer/developer.rpym:431
old "Right-click or escape to quit."
new "Rechtsklick oder Escape, um zu beenden."
# renpy/common/_developer/developer.rpym:482
old "Done"
new "Fertig"
translate german strings:
# renpy/common/_developer/inspector.rpym:43
old "Displayable Inspector"
new "Darstellungen prüfen"
# renpy/common/_developer/inspector.rpym:49
old "Nothing to inspect."
new "Nichts zum Prüfen verfügbar"
# renpy/common/_developer/inspector.rpym:58
old "Size"
new "Größe"
# renpy/common/_developer/inspector.rpym:63
old "Style"
new "Stil"
# renpy/common/_developer/inspector.rpym:123
old "Inspecting Styles of [displayable_name!q]"
new "Prüft Stile von [displayable_name!q]"
# renpy/common/_developer/inspector.rpym:135
old "displayable:"
new "Darstellungen:"
# renpy/common/_developer/inspector.rpym:142
old " (no properties affect the displayable)"
new " (keine Eigenschaften beeinflussen diese Darstellung)"
# renpy/common/_developer/inspector.rpym:144
old " (default properties omitted)"
new " (Standardeigenschaften entfallen)"
# renpy/common/_developer/inspector.rpym:174
old "<repr() failed>"
new "<repr() gescheitert>"
+42
View File
@@ -0,0 +1,42 @@
translate german strings:
# game/distribute.rpy:313
old "Nothing to do."
new "Nichts zu tun."
# game/distribute.rpy:317
old "Scanning project files..."
new "Projektdateien werden geprüft …"
# game/distribute.rpy:324
old "Scanning Ren'Py files..."
new "RenPy-Dateien werden geprüft …"
# game/distribute.rpy:474
old "Archiving files..."
new "Dateien werden archiviert …"
# game/distribute.rpy:722
old "Writing the [variant] [format] package."
new "Das [variant] [format] Package wird erstellt."
# game/distribute.rpy:735
old "Making the [variant] update zsync file."
new "Die [variant] Update-zsync-Datei wird erstellt."
# game/distribute.rpy:831
old "Processed {b}[complete]{/b} of {b}[total]{/b} files."
new "{b}[complete]{/b} von {b}[total]{/b} Dateien verarbeitet."
# game/distribute.rpy:892
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 "Alle Packages wurden erstellt.\n\nAufgrund von Zugriffsinformationen ist das Entpacken und Neupacken der Linux und Macintosh Veröffentlichungen unter Windows nicht unterstützt."
# game/distribute.rpy:358
old "No packages are selected, so there's nothing to do."
new "Keine Packages wurden ausgewählt."
# game/distribute.rpy:335
old "Building distributions failed:\n\nThe build.directory_name variable may not include the space, colon, or semicolon characters."
new "Erstellen von Veröffentlichungen gescheiter:\n\nDie build.directory_name Variable darf keine Leerzeichen, Doppelpunkte oder Semikolons enthalten."
@@ -0,0 +1,45 @@
translate german strings:
# game/distribute_gui.rpy:139
old "Build Distributions: [project.current.name!q]"
new "Erstellt Veröffentlichung: [project.current.name!q]"
# game/distribute_gui.rpy:154
old "Directory Name:"
new "Verzeichnisname:"
# game/distribute_gui.rpy:158
old "Executable Name:"
new "Programmdateiname:"
# game/distribute_gui.rpy:167
old "Actions:"
new "Aktionen:"
# game/distribute_gui.rpy:175
old "Edit options.rpy"
new "options.rpy bearbeiten"
# game/distribute_gui.rpy:176
old "Refresh"
new "Aktualisieren"
# game/distribute_gui.rpy:193
old "Build Packages:"
new "Packages erstellen:"
# game/distribute_gui.rpy:208
old "Build Updates"
new "Aktualisierungen erstellen"
# game/distribute_gui.rpy:212
old "Build"
new "Erstellen"
# game/distribute_gui.rpy:219
old "Errors were detected when running the project. Please ensure the project runs without errors before building distributions."
new "Fehler wurden beim Starten des Projekts gefunden. Bitte stellen Sie sicher, dass das Projekt ohne Fehler läuft, bevor Sie Veröffentlichungen erstellen."
# 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 "Ihr Projekt enthält keine Erstellinformationen. Würden Sie gerne Erstellinformationen am Ende der options.rpy-Datei einfügen?"
+56
View File
@@ -0,0 +1,56 @@
translate german 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}Empfohlen.{/b} Ein Betaeditor mit einer leichten Benutzeroberfläche und Funktionen, die bei der Entwicklung helfen, wie eine Rechtschreibprüfung. Editra fehlt derzeit die Eingabemethode, die für Chinesisch, Japanisch und Koreanisch benötigt wird."
# 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}Empfohlen.{/b} Ein Betaeditor mit einer leichten Benutzeroberfläche und Funktionen, die bei der Entwicklung helfen, wie eine Rechtschreibprüfung. Editra fehlt derzeit die Eingabemethode, die für Chinesisch, Japanisch und Koreanisch benötigt wird. Unter Linux benötigt Editra wxPython."
# game/editor.rpy:137
old "This may have occured because wxPython is not installed on this system."
new "Dies ist vermutlich passiert, weil wxPython nicht auf Ihrem System installiert ist."
# game/editor.rpy:144
old "Up to 22 MB download required."
new "Etwa 22 MB benötigt."
# game/editor.rpy:157
old "1.8 MB download required."
new "1,8 MB benötigt."
# game/editor.rpy:158
old "This may have occured because Java is not installed on this system."
new "Dies ist vermutlich passiert, weil Java nicht auf Ihrem System installiert ist."
# game/editor.rpy:327
old "An exception occured while launching the text editor:\n[exception!q]"
new "Ein Fehler ist beim Starten des Texteditors aufgetreten:\n[exception!q]"
# game/editor.rpy:378
old "Select Editor"
new "Editor auswählen"
# 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 "Ein Texeditor ist ein Programm, das verwendet wird, um RenPy Skript-Dateien zu bearbeiten. Hier können Sie den Editor auswählen, den RenPy verwenden soll. Wenn dieser noch nicht installiert ist, wird er automatisch heruntergeladen und installiert."
# game/editor.rpy:415
old "Cancel"
new "Abbrechen"
old "A mature editor that requires Java."
new "Ein fortgeschrittener Editor, der Java benötigt."
old "System Editor"
new "Systemeditor"
old "Invokes the editor your operating system has associated with .rpy files."
new "Startet den Editor, den dein Betriebssystem mit .rpy-Dateien assoziiert."
old "None"
new "Keinen"
old "Prevents Ren'Py from opening a text editor."
new "Verhindert, dass RenPy einen Texteditor öffnet."
+26
View File
@@ -0,0 +1,26 @@
translate german strings:
# game/front_page.rpy:90
old "Launch Project"
new "Projekt starten"
# game/front_page.rpy:204
old "Checking script for potential problems..."
new "Überprüft Script auf potentielle Probleme …"
# game/front_page.rpy:219
old "Deleting persistent data..."
new "Löscht Persistent-Dateien …"
# game/front_page.rpy:204
old "Android"
new "Android"
# game/front_page.rpy:206
old "Extract Dialogue"
new "Dialoge extrahieren"
# game/front_page.rpy:144
old "[p.name!q] (template)"
new "[p.name!q] (Vorlage)"
+85
View File
@@ -0,0 +1,85 @@
translate german strings:
# game/interface.rpy:89
old "Documentation"
new "Dokumentation"
# game/interface.rpy:90
old "Ren'Py Website"
new "RenPy Webseite"
# game/interface.rpy:91
old "Ren'Py Games List"
new "RenPy Spieleliste"
# game/interface.rpy:92
old "About"
new "Über"
# game/interface.rpy:99
old "update"
new "Aktualisieren"
# game/interface.rpy:101
old "preferences"
new "Einstellungen"
# game/interface.rpy:102
old "quit"
new "Beenden"
# game/interface.rpy:149
old "Yes"
new "Ja"
# game/interface.rpy:151
old "No"
new "Nein"
# game/interface.rpy:181
old "Due to package format limitations, non-ASCII file and directory names are not allowed."
new "Aufgrund von Formateinschränkungen sind nicht-ASCII Datei- und Verzeichnisnamen nicht erlaubt."
# game/interface.rpy:183
old "[title]"
new "[title]"
# game/interface.rpy:248
old "ERROR"
new "FEHLER"
# game/interface.rpy:280
old "While [what!q], an error occured:"
new "Während [what!q] ist ein Fehler aufgetreten:"
# game/interface.rpy:281
old "[exception!q]"
new "[exception!q]"
# game/interface.rpy:298
old "Text input may not contain the {{ or [[ characters."
new "Die Texteingabe darf keine {{ oder [[ enthalten."
# game/interface.rpy:303
old "File and directory names may not contain / or \\."
new "Datei- und Verzeichnisnamen dürfen keine / oder \\ enthalten."
# game/interface.rpy:309
old "File and directory names must consist of ASCII characters."
new "Datei- und Verzeichnisnamen müssen aus ASCII-Buchstaben bestehen."
# game/interface.rpy:330
old "INFORMATION"
new "INFORMATION"
# game/interface.rpy:373
old "PROCESSING"
new "VERARBEITUNG"
# game/interface.rpy:390
old "QUESTION"
new "FRAGE"
# game/interface.rpy:451
old "CHOICE"
new "AUSWAHL"
+69
View File
@@ -0,0 +1,69 @@
translate german strings:
# game/navigation.rpy:150
old "Navigate: [project.current.name]"
new "Navigieren: [project.current.name]"
# game/navigation.rpy:159
old "Order: "
new "Reihenfolge:"
# game/navigation.rpy:160
old "alphabetical"
new "Alphabetisch"
# game/navigation.rpy:162
old "by-file"
new "Nach Datei"
# game/navigation.rpy:164
old "natural"
new "Natürlich"
# game/navigation.rpy:168
old "refresh"
new "Aktualisieren"
# game/navigation.rpy:176
old "Category:"
new "Kategorie"
# game/navigation.rpy:178
old "files"
new "Dateien"
# game/navigation.rpy:179
old "labels"
new "Labels"
# game/navigation.rpy:180
old "defines"
new "Defines"
# game/navigation.rpy:181
old "transforms"
new "Transforms"
# game/navigation.rpy:182
old "screens"
new "Bildschirme"
# game/navigation.rpy:183
old "callables"
new "Callables"
# game/navigation.rpy:184
old "TODOs"
new "TODOs"
# game/navigation.rpy:223
old "+ Add script file"
new "+ Script-Datei hinzufügen"
# game/navigation.rpy:231
old "No TODO comments found.\n\nTo create one, include \"# TODO\" in your script."
new "Keine TODO-Kommentare gefunden.\n\nUm einen zu erstellen, bauen Sie „# TODO“ in Ihr Script ein."
# game/navigation.rpy:238
old "The list of names is empty."
new "Die Namensliste ist leer."
+38
View File
@@ -0,0 +1,38 @@
translate german strings:
# game/new_project.rpy:22
old "Choose Project Template"
new "Projektvorlage auswählen"
# 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 "Bitte wählen Sie eine Vorlage für Ihr neues Projekt. RenPy hat eine Standard-Vorlage, die ein englischsprachiges Spiel mit Standardmenüs erstellt."
# game/new_project.rpy:55
old "PROJECT NAME"
new "PROJEKT NAME"
# game/new_project.rpy:56
old "Please enter the name of your project:"
new "Bitte geben Sie den Namen Ihres Projekts ein:"
# game/new_project.rpy:62
old "The project name may not be empty."
new "Der Projektname kann nicht leer sein."
# game/new_project.rpy:67
old "[project_name!q] already exists. Please choose a different project name."
new "[project_name!q] existiert bereits. Bitte wählen Sie einen anderen Projektnamen."
# game/new_project.rpy:70
old "[project_dir!q] already exists. Please choose a different project name."
new "[project_dir!q] existiert bereits. Bitte wählen Sie einen anderen Projektnamen."
# 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 "Bitte wählen Sie eine Vorlage für Ihr neues Projekt. Die Vorlage legt die Standard-Schriftart fest und die Sprache der Benutzeroberfläche. Wenn Ihre Sprache nicht verfügbar ist, wählen Sie bitte 'english'."
# game/new_project.rpy:71
old "The projects directory could not be set. Giving up."
new "Das Projektverzeichnis konnte nicht festgelegt werden."
+57
View File
@@ -0,0 +1,57 @@
translate german strings:
# game/preferences.rpy:40
old "Launcher Preferences"
new "Launcher Einstellungen"
# game/preferences.rpy:61
old "Projects Directory:"
new "Projektverzeichnis:"
# game/preferences.rpy:68
old "[persistent.projects_directory!q]"
new "[persistent.projects_directory!q]"
# game/preferences.rpy:70
old "Not Set"
new "Nicht eingestellt"
# game/preferences.rpy:84
old "Text Editor:"
new "Texteditor:"
# game/preferences.rpy:106
old "Update Channel:"
new "Aktualisierungskanal:"
# game/preferences.rpy:126
old "Navigation Options:"
new "Navigationsoptionen:"
# game/preferences.rpy:130
old "Include private names"
new "Vertrauliche Namen einschließen"
# game/preferences.rpy:131
old "Include library names"
new "Programmnamen einschließen"
# game/preferences.rpy:141
old "Launcher Options:"
new "Launcher Optionen:"
# game/preferences.rpy:145
old "Hardware rendering"
new "Hardware Wiedergabe"
# game/preferences.rpy:148
old "Console output"
new "Konsolenausgabe"
# game/preferences.rpy:169
old "Open launcher project"
new "Launcherprojekt öffnen"
# game/preferences.rpy:183
old "Language:"
new "Sprache:"
+54
View File
@@ -0,0 +1,54 @@
translate german strings:
# game/project.rpy:199
old "Ren'Py is scanning the project..."
new "RenPy scannt das Projekt …"
# game/project.rpy:488
old "PROJECTS DIRECTORY"
new "PROJEKTVERZEICHNIS"
# game/project.rpy:488
old "Please choose the projects directory."
new "Bitte wählen Sie das Projektverzeichnis."
# game/project.rpy:488
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 "Dieser Launcher scannt nach Projekten in diesem Verzeichnis, erstellt neue Projekte und platziert erstellte Projekte dort."
# game/project.rpy:536
old "Ren'Py was unable to run zenity to choose the projects directory."
new "RenPy konnte Zenity nicht starten, um das Projektverzeichnis auszuwählen."
# game/project.rpy:540
old "Ren'Py has set the projects directory to:"
new "RenPy hat das Projektverzeichnis verschoben in:"
# 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 "Bitte wählen Sie das Projektverzeichnis mit dem Verzeichnisauswähler.\n{b}Der Verzeichnisauswähler könnte hinter diesem Fenster geöffnet sein.{/b}"
# game/project.rpy:525
old "Ren'Py was unable to run python with tkinter to choose the projects directory."
new "RenPy konnte Python mit tkinter zur Projektsverzeichniswahl nicht starten."
# game/project.rpy:48
old "After making changes to the script, press shift+R to reload your game."
new "Nachdem Sie das Skript verändert haben, drücken Sie Shift + R, um Ihr Spiel neuzustarten."
# game/project.rpy:50
old "Press shift+D to access the developer menu."
new "Drücken Sie Shift + D, um das Entwicklermenü aufzurufen."
# game/project.rpy:219
old "Launching the project failed."
new "Starten des Projekts gescheitert."
# game/project.rpy:219
old "Please ensure that your project launches normally before running this command."
new "Bitte stellen Sie sicher, dass Ihr Projekt normal startet, bevor Sie diesen Befehl ausführen."
# game/project.rpy:585
old "Ren'Py was unable to run python with tkinter to choose the projects directory. Please install the python-tk or tkinter package."
new "RenPy konnte Python mit tkinter zur Projektsverzeichniswahl nicht starten. Bitte installieren Sie python-tk oder tkinter."
+195
View File
@@ -0,0 +1,195 @@
translate german strings:
old "PROJECTS:"
new "PROJEKTE:"
old "[p.name!q]"
new "[p.name!q]"
old "An exception has occurred."
new "Ein Fehler ist aufgetreten."
old "Ignore"
new "Ignorieren"
translate german strings:
old "Tutorial"
new "Tutorial"
old "The Question"
new "The Question"
old "Reload"
new "Neustarten"
old "Open Traceback"
new "Traceback öffnen"
translate german strings:
old "+ Create New Project"
new "+ Neues Projekt erstellen"
old "Active Project"
new "Aktives Projekt"
old "Quit"
new "Beenden"
old ""
new ""
translate german strings:
old "Open Directory"
new "Verzeichnis öffnen"
old "game"
new "Spielverzeichnis"
old "Quits the game."
new "Beendet das Spiel."
translate german strings:
old "base"
new "Hauptverzeichnis"
old "Edit File"
new "Dateien bearbeiten"
translate german strings:
old "script.rpy"
new "script.rpy"
old "options.rpy"
new "options.rpy"
translate german strings:
old "screens.rpy"
new "screens.rpy"
old "All script files"
new "Alle Dateien"
translate german strings:
old "Navigate Script"
new "Skript navigieren"
old "Check Script (Lint)"
new "Skript überprüfen (Lint)"
translate german strings:
old "Change Theme"
new "Theme ändern"
old "Delete Persistent"
new "Persistent-Dateien löschen"
translate german strings:
old "Build Distributions"
new "Veröffentlichungen erstellen"
old "Generate Translations"
new "Übersetzungen generieren"
translate german strings:
old "Editra"
new "Editra"
old "[name!q]"
new "[name!q]"
old " | "
new " | "
translate german strings:
old "I'm compiling a short test program, to see if you have a working JDK on your\nsystem.\n"
new "Es wird ein kurzes Testprogramm erstellt, um zu testen, ob Sie ein funktionierendes JDK haben.\n"
old "I was unable to use javac to compile a test file. If you haven't installed\nthe Java Development Kit yet, please download it from:\n\n{a=http://www.oracle.com/technetwork/java/javase/downloads/index.html}http://www.oracle.com/technetwork/java/javase/downloads/index.html{/a}\n\nThe JDK is different from the JRE, so it's possible you have Java\nwithout having the JDK. Without a working JDK, I can't continue.\n"
new "Es konnte javac nicht verwendet werden, um eine Testdatei zu erstellen. Wenn Sie\ndas Java Development Kit noch nicht installiert haben, laden Sie es bitte herunter:\n\n{a=http://www.oracle.com/technetwork/java/javase/downloads/index.html}http://www.oracle.com/technetwork/java/javase/downloads/index.html{/a}\n\nDas JDK unterscheidet sich vom JRE, daher ist es möglich, dass Sie Java\nohne JDK haben. Ohne ein funktionierendes JDK, kann ich nicht weitermachen.\n"
translate german strings:
old "[value!q]"
new "[value!q]"
old "[description!q]"
new "[description!q]"
translate german strings:
old "Press shift+O (the letter) to access the console."
new "Drücken Sie Shift + O, um die Konsole aufzurufen."
old "Launching"
new "Startet"
translate german strings:
old "Show templates"
new "Vorlagen anzeigen"
translate german strings:
old "What is the full name of your application? This name will appear in the list of installed applications."
new "Wie lautet der volle Titel Ihrer Anwendung? Dieser Titel wird in der Liste von installierten Anwendungen angezeigt."
old "[ft.text!q]"
new "[ft.text!q]"
old "The JDK is present and working. Good!"
new "Das JDK ist verfügbar und funktioniert. Gut!"
old "Apache ANT has already been unpacked."
new "Apache-ANT wurde bereits entpackt."
old "The Android SDK has already been unpacked."
new "Das Android-SDK wurde bereits entpackt."
old "The required Android packages are already installed."
new "Die benötigten Android-Packages wurden bereits installiert."
old "You've already created an Android keystore, so I won't create a new one for you."
new "Sie haben bereits einen Android-Key erstellt, es wird kein neuer erstellt."
old "It looks like you're ready to start packaging games."
new "Es sieht aus, als wären Sie bereit, Spiele zu erstellen."
translate german strings:
old "English"
new "English"
old "German"
new "German"
old "Japanese"
new "Japanese"
translate german strings:
old "French"
new "French"
old "Spanish"
new "Spanish"
old "Russian"
new "Russian"
old "Arabic"
new "Arabic"
+33
View File
@@ -0,0 +1,33 @@
translate german strings:
# game/translations.rpy:10
old "Create or Update Translations"
new "Erstellt oder aktualisiert Übersetzungen"
# game/translations.rpy:10
old "Please enter the name of the language for which you want to create or update translations."
new "Bitte geben Sie den Namen der Sprache ein, deren Übersetzung Sie erstellen oder aktualisieren möchten."
# game/translations.rpy:15
old "The language name can not be the empty string."
new "Der Name der Sprache darf nicht leer sein."
# game/translations.rpy:26
old "Ren'Py is generating translations...."
new "RenPy erstellt Übersetzungen …"
# game/translations.rpy:30
old "Ren'Py has finished generating [language] translations."
new "RenPy hat die Übersetzungen für [language] erstellt."
# game/translations.rpy:44
old "What format would you like for the extracted dialogue?"
new "In welchem Format möchten Sie die extrahierten Dialoge?"
# game/translations.rpy:56
old "Ren'Py is extracting dialogue...."
new "RenPy extrahiert Dialoge …"
# 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 "RenPy hat die Dialoge fertig extrahiert. Die extrahierten Dialoge können im Hauptverzeichnis unter dialogue.[format] gefunden werden."
+94
View File
@@ -0,0 +1,94 @@
translate german strings:
# game/updater.rpy:54
old "Select Update Channel"
new "Aktualisierungskanal auswählen"
# game/updater.rpy:65
old "The update channel controls the version of Ren'Py the updater will download. Please select an update channel:"
new "Der Aktualisierungskanal kontrolliert die Version, die Renpy herunterlädt. Bitte wählen Sie einen Aktualisierungskanal:"
# game/updater.rpy:70
old "Release"
new "Veröffentlichungen"
# game/updater.rpy:76
old "{b}Recommended.{/b} The version of Ren'Py that should be used in all newly-released games."
new "{b}Empfohlen.{/b} Die Version von RenPy, die für alle neuen Spielveröffentlichungen verwendet werden sollte."
# game/updater.rpy:81
old "Prerelease"
new "Vorveröffentlichungen"
# 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 "Eine Vorschau auf die nächste Version von RenPy, die zu Testzwecken und mit neuen Funktionen verwendet werden kann, jedoch nicht für Veröffentlichung von Spielen geeignet ist."
# game/updater.rpy:93
old "Experimental"
new "Experimentell"
# game/updater.rpy:99
old "Experimental versions of Ren'Py. You shouldn't select this channel unless asked by a Ren'Py developer."
new "Experimentelle Versionen von RenPy. Sie sollten diesen Kanal nur auswählen, wenn Sie von einem RenPy-Entwickler dazu aufgefordert werden."
# game/updater.rpy:119
old "An error has occured:"
new "Ein Fehler ist aufgetreten:"
# game/updater.rpy:121
old "Checking for updates."
new "Überprüft auf Aktualisierungen."
# game/updater.rpy:123
old "Ren'Py is up to date."
new "RenPy ist aktuell"
# game/updater.rpy:125
old "[u.version] is now available. Do you want to install it?"
new "[u.version] ist nun verfügbar. Möchten Sie sie installieren?"
# game/updater.rpy:127
old "Preparing to download the update."
new "Vorbereiten, um die Aktualisierungen herunterzuladen."
# game/updater.rpy:129
old "Downloading the update."
new "Aktualisierungen werden heruntergeladen."
# game/updater.rpy:131
old "Unpacking the update."
new "Aktualisierungen werden entpackt."
# game/updater.rpy:133
old "Finishing up."
new "Abschließen."
# game/updater.rpy:135
old "The update has been installed. Ren'Py will restart."
new "Die Aktualisierungen wurden installiert. RenPy startet neu."
# game/updater.rpy:137
old "The update has been installed."
new "Die Aktualisierungen wurden installiert."
# game/updater.rpy:139
old "The update was cancelled."
new "Die Aktualisierungen wurde abgebrochen."
# game/updater.rpy:156
old "Ren'Py Update"
new "RenPy aktualisieren"
# game/updater.rpy:162
old "Proceed"
new "Fortsetzen"
# game/updater.rpy:129
old "Nightly"
new "Nightly"
# game/updater.rpy:135
old "The bleeding edge of Ren'Py development. This may have the latest features, or might not run at all."
new "Die allerneuste RenPy Version. Diese enthält die neusten Funktionen, könnte aber auch überhaupt nicht funktionieren."
+9
View File
@@ -0,0 +1,9 @@
translate italian strings:
# game/about.rpy:21
old "[version!q]"
new "[version!q]"
# game/about.rpy:25
old "View license"
new "Leggi licenza"
+21
View File
@@ -0,0 +1,21 @@
translate italian strings:
# game/add_file.rpy:7
old "FILENAME"
new "Nome del file"
# game/add_file.rpy:7
old "Enter the name of the script file to create."
new "Inserisci il nome del file di script da creare."
# game/add_file.rpy:10
old "The filename must have the .rpy extension."
new "Il file deve avere estensione .rpy."
# game/add_file.rpy:18
old "The file already exists."
new "Il file esiste già."
# 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 carica automaticamente tutti i file di script che finiscono con .rpy.\nPer usare questo file, definisci una label e saltaci (jump) da un altro file."
+162
View File
@@ -0,0 +1,162 @@
translate italian 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 "Per compilare un pacchetto di Android si prega di scaricare RAPT, estrarlo e posizionarlo nella cartella di Ren'Py e riavviare il launcher di 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 "La versione a 32-bit del Java Development Kit é necessaria per compilare pacchetti Android su Windows. Il JDK é diverso dal JRE ed é quindi possibile che tu abbia installato Java senza però aver installato il JDK.\n\n Si prega di {a=http://www.oracle.com/technetwork/java/javase/downloads/index.html}scaricare ed installare il JDK{/a} e, successivamente, riavviare il launcher di Ren'Py."
# 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 "Per compilare i pacchetti di Android, si prega di scaricare RAPT (da {a=http://www.renpy.org/dl/android}qui{/a}), estrarlo, posizionarlo nella cartella di Ren'Py ed infine riavviare il launcher di Ren'Py."
# 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 é stato installato ma devi ancora installare l'Android SDK prima di poter compilare pacchetti per Android; scegli \"Install SDK\" per farlo."
# 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 é stato installato ma la chiave non é stata configurata. Si prega di creare una chiave o di ripristinare android.keystore."
# game/android.rpy:17
old "The current project has not been configured. Use \"Configure\" to configure it before building."
new "Il progetto corrente non é stato configurato. Usa \"Configura\" per configurarlo prima della compilazione."
# 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 "Scegli \"Compila\" per compilare il progetto corrente o collega un dispositivo Android e scegli \"Compila ed Installa\" per compilarlo ed installarlo sul dispositivo."
# 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 "Prova ad emulare un dispositivo Android.\n\nL'input tattile viene emulato attraverso il mouse e soltanto quando il tasto rimane premuto. Esc é assegnato al pulsante \"menu\" e PaginaSu é assegnato al pulsante \"indietro\"."
# 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 "Prova ad emulare un tablet Android.\n\nL'input tattile viene emulato attraverso il mouse e soltanto quando il tasto é tenuto premuto. Esc é assegnato al pulsante \"menu\" e PaginaSu é assegnato al pulsante \"indietro\"."
# 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 "Prova ad emulare una console OUYA.\n\nL'input del controller é assegnato alle freccie direzionali, Invio é assegnato al tasto \"select\", \"Esc\" é assegnato al tasto \"menu\" e PaginaSu é assegnato al tasto \"back\"."
# game/android.rpy:23
old "Downloads and installs the Android SDK and supporting packages. Optionally, generates the keys required to sign the package."
new "Scarica ed installa l'Android SDK ed i pacchetti di supporto. Opzionalmente, genera le chiavi richieste per firmare il pacchetto."
# game/android.rpy:24
old "Configures the package name, version, and other information about this project."
new "Configure il nome del pacchetto, la versione ed altre informazioni su questo progetto."
# game/android.rpy:25
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 "Apre il file contenente le chiavi di Google Play nell'editor.\n\nQuesto serve solamente se l'applicazione sta usando un APK di espansione. Leggi la documentazione per maggiori dettagli."
# game/android.rpy:26
old "Builds the Android package."
new "Compila il pacchetto di Android."
# game/android.rpy:27
old "Builds the Android package, and installs it on an Android device connected to your computer."
new "Compila il pacchetto di Android e lo installa su un dispositivo connesso al tuo computer."
# game/android.rpy:148
old "{a=%s}%s{/a}"
new "{a=%s}%s{/a}"
# game/android.rpy:157
old "QUESTION"
new "DOMANDA"
# game/android.rpy:367
old "Android: [project.current.name!q]"
new "Android: [project.current.name!q]"
# game/android.rpy:387
old "Emulation:"
new "Emulazione:"
# game/android.rpy:395
old "Phone"
new "Telefono"
# game/android.rpy:399
old "Tablet"
new "Tablet"
# game/android.rpy:403
old "Television / OUYA"
new "Televisione / OUYA"
# game/android.rpy:415
old "Build:"
new "Compila:"
# game/android.rpy:423
old "Install SDK & Create Keys"
new "Installa SDK e Crea Chiavi"
# game/android.rpy:427
old "Configure"
new "Configura"
# game/android.rpy:431
old "Build Package"
new "Compila pacchetto"
# game/android.rpy:435
old "Build & Install"
new "Compila ed Installa"
# 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 "Prima di pacchettizzare le applicazioni di Android hai bisogno di scaricare RAPT (Ren'Py Android Packaging Tool). Vuoi scaricarlo adesso?"
# game/android.rpy:39
old "Attempts to emulate a televison-based Android console, like the OUYA or Fire TV.\n\nController input is mapped to the arrow keys, Enter is mapped to the select button, Escape is mapped to the menu button, and PageUp is mapped to the back button."
new "Prova ed emulare una console connessa a televisore come OUYA o Fire TV.\n\nL'input del controller é assegnato alle freccie direzionali, Invio é assegnato al tasto \"select\", \"Esc\" é assegnato al tasto \"menu\" e PageUp é assegnato al tasto \"back\". "
# game/android.rpy:47
old "Connects to an Android device running ADB in TCP/IP mode."
new "Connette ad un dispositivo Android che esegue ADB in modalità TCP/IP."
# game/android.rpy:48
old "Disconnects from an Android device running ADB in TCP/IP mode."
new "Disconnette da un dispositivo Android che esegue ADB in modalità TCP/IP."
# game/android.rpy:516
old "Other:"
new "Altro:"
# game/android.rpy:524
old "Remote ADB Connect"
new "Connessione remota ad ADB"
# game/android.rpy:528
old "Remote ADB Disconnect"
new "Disconessione remota da ADB"
# game/android.rpy:608
old "Remote ADB Address"
new "Indirizzo remoto di ADB"
# game/android.rpy:609
old "Please enter the IP address and port number to connect to, in the form \"192.168.1.143:5555\". Consult your device's documentation to determine if it supports remote ADB, and if so, the address and port to use."
new "Si prega di inserire l'indirizzo IP ed il numero della porta a cui connettersi nel formato \"192.168.1.143:5555\". Consulta le istruzioni del tuo dispositivo per determinare se questo supporta ADB e con quali numeri di indirizzo e porta."
# game/android.rpy:619
old "Invalid remote ADB address"
new "Indirizzo remoto di ADB invalido"
# game/android.rpy:619
old "The address must contain one exactly one ':'."
new "L'indirizzo deve contenere esattamente un ':'."
# game/android.rpy:623
old "The host may not contain whitespace."
new "L'host non può contenere spazi vuoti."
# game/android.rpy:629
old "The port must be a number."
new "La porta deve essere un numero."
+37
View File
@@ -0,0 +1,37 @@
translate italian strings:
# game/choose_theme.rpy:274
old "Could not change the theme. Perhaps options.rpy was changed too much."
new "Non é stato possibile cambiare il tema. Forse options.rpy é stato modificato troppo radicalmente."
# game/choose_theme.rpy:332
old "Display"
new "Schermo"
# game/choose_theme.rpy:333
old "Window"
new "Finestra"
# game/choose_theme.rpy:334
old "Fullscreen"
new "Schermo intero"
# game/choose_theme.rpy:335
old "Planetarium"
new "Planetarium"
# game/choose_theme.rpy:342
old "Sound Volume"
new "Volume audio"
# game/choose_theme.rpy:376
old "Choose Theme"
new "Scegli tema"
# game/choose_theme.rpy:389
old "Theme"
new "Tema"
# game/choose_theme.rpy:413
old "Color Scheme"
new "Schema di colore"
+498
View File
@@ -0,0 +1,498 @@
#translation: renpy/common/00action_file.rpy
translate italian strings:
# renpy/common/00action_file.rpy:124
old "%b %d, %H:%M"
new "%d %b, %H:%M"
# renpy/common/00action_file.rpy:587
old "Quick save complete."
new "Salvataggio rapido completato."
#translation: renpy/common/00gallery.rpy
translate italian strings:
# renpy/common/00gallery.rpy:521
old "Image [index] of [count] locked."
new "Immagine [index] di [count] bloccata."
# renpy/common/00gallery.rpy:539
old "prev"
new "prec"
# renpy/common/00gallery.rpy:540
old "next"
new "succ"
# renpy/common/00gallery.rpy:541
old "slideshow"
new "presentazione"
# renpy/common/00gallery.rpy:542
old "return"
new "ritorna"
#translation: renpy/common/00gltest.rpy
translate italian strings:
# renpy/common/00gltest.rpy:50
old "Graphics Acceleration"
new "Accelerazione grafica"
# renpy/common/00gltest.rpy:54
old "Automatically Choose"
new "Scegli automaticamente"
# renpy/common/00gltest.rpy:59
old "Force Angle/DirectX Renderer"
new "Forza renderer via Angle/DirectX"
# renpy/common/00gltest.rpy:63
old "Force OpenGL Renderer"
new "Forza renderer via OpenGL"
# renpy/common/00gltest.rpy:67
old "Force Software Renderer"
new "Forza renderer via software"
# renpy/common/00gltest.rpy:73
old "Changes will take effect the next time this program is run."
new "Le modifiche prenderanno effetto al prossimo avvio di questo programma."
# renpy/common/00gltest.rpy:77
old "Quit"
new "Esci"
# renpy/common/00gltest.rpy:82
old "Return"
new "Ritorna"
# renpy/common/00gltest.rpy:112
old "Performance Warning"
new "Avviso di prestazioni"
# renpy/common/00gltest.rpy:117
old "This computer is using software rendering."
new "Questo computer sta usando il rendering via software."
# renpy/common/00gltest.rpy:119
old "This computer is not using shaders."
new "Questo computer non fa uso degli shaders."
# renpy/common/00gltest.rpy:121
old "This computer is displaying graphics slowly."
new "Questo computer sta visualizzando la grafica lentamente."
# renpy/common/00gltest.rpy:123
old "This computer has a problem displaying graphics: [problem]."
new "Questo computer ha un problema a visualizzare la grafica: [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 "I suoi driver video potrebbero essere vecchi o non funzionanti correttamente. Questo potrebbe portare a visualizzare la grafica lentamente o impropriamente. Aggiornare DirectX potrebbe risolvere questo problema."
# 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 "I suoi driver video potrebbero essere vecchi o non funzionanti correttamente. Questo potrebbe portare a visualizzare la grafica lentamente o impropriamente."
# renpy/common/00gltest.rpy:135
old "Update DirectX"
new "Aggiorna DirectX"
# renpy/common/00gltest.rpy:141
old "Continue, Show this warning again"
new "Continua, Mostra questo avviso nuovamente"
# renpy/common/00gltest.rpy:145
old "Continue, Don't show warning again"
new "Continua, Non mostrare più questo avviso"
# renpy/common/00gltest.rpy:171
old "Updating DirectX."
new "Aggiornando 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 "Il programma di installazione web di DirectX è stato avviato e potrebbe essere minimizzato nella barra delle applicazioni. Prego seguire le istruzioni per installare 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}Nota:{/b} Il programma di installazione web di DirectX di Microsoft proverà ad installare la barra di Bing. Per evitare che ciò accada, spunta l'opzione appropriata"
# renpy/common/00gltest.rpy:183
old "When setup finishes, please click below to restart this program."
new "Una volta finita l'installazione, si prega di cliccare qui in basso per riavviare questo programma."
# renpy/common/00gltest.rpy:185
old "Restart"
new "Riavvia"
#translation: renpy/common/00keymap.rpy
translate italian strings:
# renpy/common/00keymap.rpy:168
old "Saved screenshot as %s."
new "Screenshot salvato come %s."
#translation: renpy/common/00layout.rpy
translate italian strings:
# renpy/common/00layout.rpy:421
old "Are you sure?"
new "Confermi?"
# renpy/common/00layout.rpy:422
old "Are you sure you want to delete this save?"
new "Confermi di voler cancellare questo salvataggio?"
# renpy/common/00layout.rpy:423
old "Are you sure you want to overwrite your save?"
new "Confermi di voler sovrascrivere questo salvataggio?"
# renpy/common/00layout.rpy:424
old "Loading will lose unsaved progress.\nAre you sure you want to do this?"
new "Caricare causerà la perdita di progressi non salvati.\n Confermi?"
# renpy/common/00layout.rpy:425
old "Are you sure you want to quit?"
new "Confermi di voler uscire?"
# renpy/common/00layout.rpy:426
old "Are you sure you want to return to the main menu?\nThis will lose unsaved progress."
new "Confermi di voler tornare al menù principale?\nQuesto causerà la perdita di progressi non salvati."
# renpy/common/00layout.rpy:427
old "Are you sure you want to begin skipping?"
new "Confermi di voler iniziare a saltare?"
# renpy/common/00layout.rpy:428
old "Are you sure you want to skip to the next choice?"
new "Confermi di voler saltare alla prossima scelta?"
# renpy/common/00layout.rpy:429
old "Are you sure you want to skip to unseen dialogue or the next choice?"
new "Confermi di voler saltare al dialogo non letto o alla prossima scelta?"
#translation: renpy/common/00library.rpy
translate italian strings:
# renpy/common/00library.rpy:77
old "Skip Mode"
new "Modalità salto"
# renpy/common/00library.rpy:80
old "Fast Skip Mode"
new "Modalità salto rapido"
#translation: renpy/common/00updater.rpy
translate italian strings:
# renpy/common/00updater.rpy:1258
old "Updater"
new "Updater"
# renpy/common/00updater.rpy:1267
old "This program is up to date."
new "Questo programma è aggiornato."
# renpy/common/00updater.rpy:1269
old "[u.version] is available. Do you want to install it?"
new "[u.version] è disponibile. Vuoi installarla?"
# renpy/common/00updater.rpy:1271
old "Preparing to download the updates."
new "Preparando lo scaricamento dell'aggiornamento."
# renpy/common/00updater.rpy:1273
old "Downloading the updates."
new "Scaricando l'aggiornamento."
# renpy/common/00updater.rpy:1275
old "Unpacking the updates."
new "Estraendo l'aggiornamento."
# renpy/common/00updater.rpy:1279
old "The updates have been installed. The program will restart."
new "L'aggiornamento è stato installato. Il programma verrà riavviato."
# renpy/common/00updater.rpy:1281
old "The updates have been installed."
new "L'aggiornamento è stato installato."
# renpy/common/00updater.rpy:1283
old "The updates were cancelled."
new "L'aggiornamento è stato annullato."
#translation: renpy/common/_compat/gamemenu.rpym
translate italian strings:
# renpy/common/_compat/gamemenu.rpym:180
old "Empty Slot."
new "Slot Vuoto."
# renpy/common/_compat/gamemenu.rpym:337
old "Previous"
new "Precedente"
# renpy/common/_compat/gamemenu.rpym:344
old "Next"
new "Successivo"
#translation: renpy/common/_compat/preferences.rpym
translate italian strings:
# renpy/common/_compat/preferences.rpym:411
old "Joystick Mapping"
new "Mapping del Joystick"
#translation: renpy/common/_errorhandling.rpym
translate italian strings:
# renpy/common/_errorhandling.rpym:408
old "An exception has occurred."
new "Si è verificata un'eccezione."
# renpy/common/_errorhandling.rpym:434
old "Rollback"
new "Regredisci"
# renpy/common/_errorhandling.rpym:436
old "Attempts a roll back to a prior time, allowing you to save or choose a different choice."
new "Prova a regredire ad una data precedente, permettendoti di salvare o selezionare un'altra scelta."
# renpy/common/_errorhandling.rpym:439
old "Ignore"
new "Ignora"
# renpy/common/_errorhandling.rpym:441
old "Ignores the exception, allowing you to continue. This often leads to additional errors."
new "Ignore l'eccezione, permettendoti di continuare. Spesso introduce nuovi errori."
# renpy/common/_errorhandling.rpym:444
old "Reload"
new "Ricarica"
# renpy/common/_errorhandling.rpym:446
old "Reloads the game from disk, saving and restoring game state if possible."
new "Ricarica il gioco dal disco, salvando e ripristinando lo stato di gioco se possibile."
# renpy/common/_errorhandling.rpym:448
old "Open Traceback"
new "Apri Traceback"
# renpy/common/_errorhandling.rpym:450
old "Opens the traceback.txt file in a text editor."
new "Apri il file traceback.txt in un editor di testo."
# renpy/common/_errorhandling.rpym:456
old "Quits the game."
new "Esce dal gioco."
# renpy/common/_errorhandling.rpym:483
old "Parsing the script failed."
new "L'analisi dello script ha fallito."
# renpy/common/_errorhandling.rpym:510
old "Open Parse Errors"
new "Apri errori di analisi"
# renpy/common/_errorhandling.rpym:512
old "Opens the errors.txt file in a text editor."
new "Apre il file errors.txt in un editor di testo."
#translation: renpy/common/_layout/classic_load_save.rpym
translate italian strings:
# 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/_developer/inspector.rpym:25
old "Displayable Inspector"
new "Ispettore di displayable"
# renpy/common/_developer/inspector.rpym:31
old "Nothing to inspect."
new "Niente da ispezionare."
# renpy/common/_developer/inspector.rpym:40
old "Size"
new "Dimensione"
# renpy/common/_developer/inspector.rpym:45
old "Style"
new "Stile"
# renpy/common/_developer/inspector.rpym:105
old "Inspecting Styles of [displayable_name!q]"
new "Ispezionando stili di [displayable_name!q]"
# renpy/common/_developer/inspector.rpym:117
old "displayable:"
new "visualizzabile:"
# renpy/common/_developer/inspector.rpym:124
old " (no properties affect the displayable)"
new " (nessuna proprietà ha effetto sul displayable)"
# renpy/common/_developer/inspector.rpym:126
old " (default properties omitted)"
new " (proprietà predefinite omesse)"
# renpy/common/_developer/inspector.rpym:156
old "<repr() failed>"
new "<repr() fallito>"
# renpy/common/_developer/developer.rpym:46
old "Reload Game (Shift+R)"
new "Ricarica Gioco (Shift+R)"
# renpy/common/_developer/developer.rpym:49
old "Variable Viewer"
new "Visualizzatore di variabili"
# renpy/common/_developer/developer.rpym:52
old "Theme Test"
new "Prova tema"
# renpy/common/_developer/developer.rpym:58
old "Image Location Picker"
new "Selettore dell'ubicazione delle immagini"
# renpy/common/_developer/developer.rpym:61
old "Filename List"
new "Lista dei file"
# renpy/common/_developer/developer.rpym:307
old "Undefined Images"
new "Immagini non definite"
# renpy/common/_developer/developer.rpym:410
old "Mouse position: %r"
new "Posizione del mouse: %r"
# renpy/common/_developer/developer.rpym:412
old "Right-click or escape to quit."
new "Click destro o Esc per uscire."
# renpy/common/_developer/developer.rpym:465
old "Done"
new "Fatto"
# renpy/common/_developer/developer.rpym:44
old "Developer Menu"
new "Menù dello sviluppatore"
# renpy/common/_developer/developer.rpym:405
old "Rectangle: %r"
new "Rettangolo: %r"
# renpy/common/_developer/developer.rpym:69
old "Console (Shift+O)"
new "Console (Shift+O)"
# renpy/common/_developer/developer.rpym:81
old "Show Image Load Log"
new "Mostra log di caricamento delle immagini"
# renpy/common/_developer/developer.rpym:84
old "Hide Image Load Log"
new "Nascondi log di caricamento delle immagini"
# renpy/common/_developer/developer.rpym:149
old "No variables have changed since the game started."
new "Nessuna variabile è stata cambiata dall'ultima esecuzione del gioco."
# renpy/common/_developer/developer.rpym:152
old "Return to the developer menu"
new "Ritorna al menù dello sviluppatore"
# renpy/common/00console.rpy:179
old "%(version)s console, originally by Shiz, C, and delta.\n"
new "Versione della console %(version)s, autori originali Shiz, C e delta.\n"
# renpy/common/00console.rpy:180
old "Press <esc> to exit console. Type help for help.\n"
new "Premi <esc> per uscire dalla console. Scrivi \"help\" per aiuto.\n"
# renpy/common/00console.rpy:184
old "Ren'Py script enabled."
new "Script di Ren'Py abilitato."
# renpy/common/00console.rpy:186
old "Ren'Py script disabled."
new "Script di Ren'Py disabilitato."
# renpy/common/00console.rpy:392
old "help: show this help"
new "help: mostra questo aiuto"
# renpy/common/00console.rpy:397
old "commands:\n"
new "comandi:\n"
# renpy/common/00console.rpy:407
old " <renpy script statement>: run the statement\n"
new " <comando renpy script>: esegui il comando\n"
# renpy/common/00console.rpy:409
old " <python expression or statement>: run the expression or statement"
new " <espressione o comando python>: esegui l'espressione o il comando"
# renpy/common/00console.rpy:417
old "clear: clear the console history"
new "clear: pulisci la cronologia della console"
# renpy/common/00console.rpy:421
old "exit: exit the console"
new "exit: esci dalla console"
# renpy/common/00console.rpy:429
old "load <slot>: loads the game from slot"
new "load <slot>: carica il gioco dallo slot"
# renpy/common/00console.rpy:442
old "save <slot>: saves the game in slot"
new "save <slot>: salva il gioco nello slot"
# renpy/common/00console.rpy:453
old "reload: reloads the game, refreshing the scripts"
new "reload: ricarica il gioco, aggiornando gli script"
# renpy/common/00console.rpy:461
old "watch <expression>: watch a python expression"
new "watch <espressione>: osserva un'espressione Python"
# renpy/common/00console.rpy:470
old "unwatch <expression>: stop watching an expression"
new "unwatch <espressione>: smetti di osservare un'espressione"
# renpy/common/00console.rpy:478
old "unwatchall: stop watching all expressions"
new "unwatchall: smetti di osservare tutte le espressioni"
# renpy/common/00console.rpy:484
old "jump <label>: jumps to label"
new "jump <label>: salta alla label"
# renpy/common/_developer/developer.rpym:272
old "{b}Missing Images{/b}"
new "{b}Immagini mancanti{/b}"
# renpy/common/00keymap.rpy:332
old "Autoreload"
new "Autoricarica"
+37
View File
@@ -0,0 +1,37 @@
translate italian strings:
# game/distribute.rpy:358
old "No packages are selected, so there's nothing to do."
new "Nessun pacchetto selezionato, nessun compito da eseguire."
# game/distribute.rpy:363
old "Scanning project files..."
new "Analizzando i file del progetto..."
# game/distribute.rpy:373
old "Scanning Ren'Py files..."
new "Analizzando i file di 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 "Tutti i pacchetti sono stati compilati.\n\nData la presenza di informazioni sui permessi, estrarre e ri-archiviare le distribuzioni Linux e Macintosh su Windows non é supportato."
# game/distribute.rpy:545
old "Archiving files..."
new "Archiviando i file..."
# game/distribute.rpy:801
old "Writing the [variant] [format] package."
new "Scrivendo il pacchetto [variant] [format]."
# game/distribute.rpy:814
old "Making the [variant] update zsync file."
new "Creando il file di aggiornamento di zync per [variant]"
# game/distribute.rpy:910
old "Processed {b}[complete]{/b} of {b}[total]{/b} files."
new "Processati {b}[complete]{/b} file su {b}[total]{/b}."
# game/distribute.rpy:335
old "Building distributions failed:\n\nThe build.directory_name variable may not include the space, colon, or semicolon characters."
new "Compilazione delle distribuzioni fallita:\n\nLa variable build.directory_name non può includere spazi, due punti e punti e virgole."
@@ -0,0 +1,45 @@
translate italian strings:
# game/distribute_gui.rpy:139
old "Build Distributions: [project.current.name!q]"
new "Compila distrubuzioni: [project.current.name!q]"
# game/distribute_gui.rpy:154
old "Directory Name:"
new "Nome della cartella:"
# game/distribute_gui.rpy:158
old "Executable Name:"
new "Nome dell'eseguibile:"
# game/distribute_gui.rpy:167
old "Actions:"
new "Azioni:"
# game/distribute_gui.rpy:175
old "Edit options.rpy"
new "Modifica options.rpy"
# game/distribute_gui.rpy:176
old "Refresh"
new "Aggiorna"
# game/distribute_gui.rpy:193
old "Build Packages:"
new "Compila pacchetti:"
# game/distribute_gui.rpy:208
old "Build Updates"
new "Compila aggiornamenti"
# game/distribute_gui.rpy:212
old "Build"
new "Compila"
# game/distribute_gui.rpy:219
old "Errors were detected when running the project. Please ensure the project runs without errors before building distributions."
new "Errori riscontrati durante l'esecuzione del progetto. Prego assicurarsi che il progetto possa essere eseguito senza errori prima di compilare distrubuzioni."
# 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 "Il tuo progetto non contiene informazioni di compilazione. Vuoi aggiungere informazioni di compilazione alla fine di options.rpy?"

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