Compare commits

...

4259 Commits

Author SHA1 Message Date
Asriel Senna 7d8644f2f8 Changelog and rework the section 2023-10-30 23:59:30 +01:00
Asriel Senna c7a284c1e4 Reimplement disable_on_enter based on new inputvalue implem 2023-10-30 23:55:21 +01:00
Tom Rothamel 8b79a3663c doc: Changelog the last few merges. 2023-10-30 17:56:30 -04:00
Elckarow fdf38adc83 sl2: copy_properties method for custom statements (#4839)
This takes the properties from another screen language statement.
2023-10-30 17:51:42 -04:00
Denys 921feb4ada Update Ukrainian translation. (#4996) 2023-10-30 17:50:14 -04:00
Gouvernathor f367e996aa Rework Inputvalues (#5080)
Add LocalVariableValue, factorize a bunch of code, use the same doc-generating model as with bar values.
2023-10-30 17:48:53 -04:00
Tom Rothamel c0c182d200 Merge pull request #5081 from renpy/language-basics
Rework the language basics page
2023-10-30 17:47:50 -04:00
Tom Rothamel a5fec5a7a5 rpy: Add a path if range queries are failing entirely. 2023-10-30 02:26:35 -04:00
Gouvernathor 0f668f2810 More tweaks 2023-10-30 00:57:00 +01:00
Asriel Senna 5cba186326 Chitespace, docstrings and unused ref anchors 2023-10-30 00:44:57 +01:00
Asriel Senna 74631fe701 Rework the language basics page 2023-10-30 00:44:26 +01:00
Tom Rothamel 13eeb9d0c0 update: Move prompt confirm to later in the update process.
Specifically, until after the update method has been selected, and
for rpu, after the files have been scanned and the size of the
download is known.

This will (shortly) let us give the user information about
download and disk size.
2023-10-29 14:55:39 -04:00
Tom Rothamel 1066157585 update: Call the old update format "zsync". 2023-10-29 12:25:22 -04:00
Tom Rothamel 7742627373 update: Add support for updating an empty directory.
That is, taking an empty alternate base directory and turning it
into a working game.
2023-10-28 22:34:27 -04:00
Tom Rothamel 95102a6b71 rpu: Add support for determining the download and disk size.
And pausing to prompt the user once that's known.
2023-10-28 22:30:14 -04:00
Tom Rothamel acac446c8b py2: Fix. 2023-10-28 13:35:41 -04:00
Tom Rothamel 9fc8e43f17 Merge branch 'fix' 2023-10-28 01:10:03 -04:00
Tom Rothamel 6d6003f4e0 sl2: Fix issue with transcludes and custom statements.
Fixes #5074.
2023-10-28 00:53:25 -04:00
Tom Rothamel 7ff1b3b5c5 Merge pull request #5057 from renpy/lint-toggles
Add lint toggles
2023-10-27 00:50:42 -04:00
Tom Rothamel 4fd318880e doc: LocalVariableValue 2023-10-27 00:48:56 -04:00
Gouvernathor 6cd57b192a Factorize and improve some Barvalue subclasses (#5064)
* factorize the most common BarValue subclasses, using the same recipe (but in a much simpler way) as in Action mixins #4473, which considerably shortens the code and avoids code duplication
* fix the kind parameter of FieldValue and VariableValue - it was saved but never passed to _get_field and _set_field
* fix some subclasses doc entries that weren't appropriately worded, some which set variables mentioned "fields"
* implement LocalVariableValue, supersede and fix add the LocalVariableValue action #5055, and allow it to have adequately-worded exceptions


Co-authored-by: Mal Graty <mal.graty@googlemail.com>
2023-10-27 00:47:21 -04:00
Tom Rothamel 8c6aab0bc6 Revert "add the LocalVariableValue action (#5055)"
This reverts commit 2451b3f0da.
2023-10-27 00:46:14 -04:00
Elckarow 2451b3f0da add the LocalVariableValue action (#5055) 2023-10-27 00:42:27 -04:00
Gouvernathor daea1375c3 Various tweaks and updates (#5069)
* Simplify currying in exports

* Unused import

* Docstrings, whitespace and exceptions

The docstrings were obsolete (not only buttons and hotspots take actions now, and they are now the core of screen language so nobody ignores what they are)
and the information that they can be subclassed is much more important in my view
Also these exceptions are better

* utflf
2023-10-27 00:41:32 -04:00
Tom Rothamel ada2b860f6 Merge pull request #5070 from qTich/fix/web-input-prompt
fix: translate `prompt` when used `web_input`
2023-10-27 00:41:09 -04:00
Tom Rothamel 6758447cad Merge pull request #5073 from renpy/pass-layeredimage
Re-add the pass keyword to the layeredimage language
2023-10-27 00:40:53 -04:00
Tom Rothamel 035d6e7b30 doc: Fetch. 2023-10-27 00:06:32 -04:00
Tom Rothamel 0675f6ce44 fetch: Fix fetching on the web platform. 2023-10-26 23:25:56 -04:00
Gouvernathor c7317c076b Re-add the pass keyword to the layeredimage language 2023-10-27 03:50:17 +02:00
Tom Rothamel 6bd420b421 fetch: Add the renpy.fetch function.
This is a single function that can fetch data from a web server,
optionally taking binary data or json as input, and returning its
result as bytes, text, or json-decoded data.
2023-10-26 00:59:19 -04:00
Tichq c1f2db72b5 fix: translate prompt when used web_input 2023-10-26 03:14:12 +03:00
Tom Rothamel f87917e399 Changes to android APK loading.
* Remove support for Expansion APKs. These have been obsolete for
  some time.

* Only use the APK for game files if an alternate base directory is
  not in use.
2023-10-25 19:52:33 -04:00
Gouvernathor 6bc50d6454 Make the doc generation of the mixined actions conditional 2023-10-25 19:44:55 +02:00
Tom Rothamel a2bfa02de1 doc: Fix caps on one line. 2023-10-25 09:38:10 -04:00
Gouvernathor a3ad875263 doc: fax the fox 2023-10-25 14:01:20 +02:00
Tom Rothamel 80d3075bf0 id: Force the director into lines mode after a reload.
Fixes #5028.
2023-10-25 01:08:44 -04:00
Tom Rothamel 0b213cc7db doc: Edits to the data accessor changelog. 2023-10-24 23:34:39 -04:00
Tom Rothamel 23fc2f66c9 Merge pull request #5067 from renpy/changelog-mixins
Changelog mixins
2023-10-24 20:40:20 -04:00
Ren'Py Bot 19498d5bce Merge branch 'fix' 2023-10-24 04:30:07 -04:00
Tom Rothamel 7f37382012 Avoid distributing web-icon.png in other formats. 2023-10-23 22:58:51 -04:00
Kassy 7fcad404b6 Web icon fix (#5018)
* Fix web icon name

The code looks for "web-icon.png" but the comment and function names
referred to "pwa_icon.png".

* Document the web icon customization
2023-10-23 22:58:20 -04:00
Tom Rothamel d8ad7d1672 Create checkpoints when hard skipping.
Fixes #5025.
2023-10-23 22:04:38 -04:00
Tom Rothamel e4b550b8c3 Create checkpoints when hard skipping.
Fixes #5025.
2023-10-23 22:04:01 -04:00
Gouvernathor 67bdb9ab03 Changelog mixins 2023-10-23 10:44:58 +02:00
Gouvernathor 6f44533bbe Mixin-Based Data Actions
This change replaces the implementation of the data actions with mixins, one for accessing the data and one for changing it. Doing so simplifies and regularizes the implementation, and makes it possible to add new types of data actions, like the Cycle and Increment actions added here.
2023-10-22 22:47:11 -04:00
Tom Rothamel d084b624b9 Merge branch 'fix' 2023-10-22 22:34:16 -04:00
Tom Rothamel 06d3a90bd7 Include checkpointing_suspended in the rollback objects.
It's possible (and had been for some time) to rollback into a spot
where checkpointing was suspended - but checkpointing would be re-enabled,
meaning that checkpoint_suspended would be forgotten.
2023-10-22 22:27:18 -04:00
Tom Rothamel 5e64403699 Fix issues with greedy rollback by default.
Fixes #5040, which was caused by the interaction of greedy rollbacl
and suspended rollback.

Fixes #5035, which was just never actually looking at the _greedy_rollback
variable.
2023-10-22 22:12:55 -04:00
Tom Rothamel d8954aa732 doc: Change links to Chinese documentation. 2023-10-21 01:52:15 -04:00
Tom Rothamel 669b07afef Add support for an alternate base directory.
This is a directory that is checked for update/version.json. If that
file exists and has versions that match the current engine, it is
used as the base directory instead of what the engine provides.

The main reason for this is to support Android games larger than
2GB, by letting those games download content.
2023-10-21 01:45:26 -04:00
Tom Rothamel e2bc3fb55c rpu: Write a version.json file into the update directory.
This file only exists if the update has finished successfully,
and contains the version information from updates.json.

It's intended to be used ot ensure that an alternate base
directory works with Ren'Py.
2023-10-20 23:24:07 -04:00
Tom Rothamel 088b1572ef rpy: Search for Ren'Py's update.pem in the base directory. 2023-10-20 00:31:30 -04:00
Gouvernathor a30f562d38 Resolve type issues 2023-10-19 21:23:42 +02:00
Ren'Py Bot 4768a012db Merge branch 'fix' 2023-10-19 04:30:07 -04:00
Tom Rothamel c7d8bd1dc9 rpu: Allow an update to be signed by multiple keys.
This provides a way to migrate old versions to a new key.
2023-10-19 01:27:07 -04:00
Tom Rothamel be226363e8 rpu: Include update information in all mutable formats. 2023-10-19 01:11:07 -04:00
Tom Rothamel 267a807146 rpu: Verify ECDSA signatures. 2023-10-19 00:53:17 -04:00
Tom Rothamel 34468cf57d Ignore update.pem. 2023-10-19 00:13:25 -04:00
Tom Rothamel 172f9f926e rpu: Create the updates.ecdsa file. 2023-10-19 00:06:14 -04:00
Tom Rothamel f6afced012 rpu: Include a verifying key with the built project. 2023-10-18 23:33:04 -04:00
Tom Rothamel 00cd7e4ada rpu: Generate update.pem when updates are enabled. 2023-10-18 23:13:52 -04:00
Tom Rothamel 9f4ab7d761 Always oversample SVGs.
Work to support placeholders lead to problems with SVG scaling
when the window scaled. This is resolved by scaling up the
placeholder, if required.

Fixes #5063.
2023-10-18 21:49:46 -04:00
Tom Rothamel 9ac420c259 id: Add lines explaining how to customize the director.
Fixes #5029.
2023-10-17 22:16:38 -04:00
Tom Rothamel 6c548d30ad Tweak the wording of the namespace error. 2023-10-17 00:02:26 -04:00
Tom Rothamel 615c6a728d Merge pull request #5059 from renpy/store.store
Prevent creation of a "store" substore
2023-10-17 00:01:12 -04:00
Gouvernathor bb8c508837 Prevent creation of a "store" substore 2023-10-16 18:45:43 +02:00
Tom Rothamel 30833f1f5f Allow renpy.utter_restart(True) to work on mobile. 2023-10-16 00:48:16 -04:00
Tom Rothamel 57bf18c705 rpu: Support for adding DLC. 2023-10-16 00:48:01 -04:00
Tom Rothamel e30855cb93 rpu: In the launcher, allow the website to pick rpu/zsync.
This makes it possible to deploy rpu, but have a fallback if
problems are reported.
2023-10-15 21:01:36 -04:00
Tom Rothamel ed0f536853 Merge branch 'fix' 2023-10-15 20:54:08 -04:00
Tom Rothamel e4f601310b Fix an issue with projects.txt.
Specifically, /path/to/mygame/ would produce a game with an
empty name, rather than mygame.
2023-10-15 20:54:00 -04:00
Tom Rothamel b92107dd02 rpu: Fix multi-part downloading. 2023-10-15 20:38:02 -04:00
Tom Rothamel 19c5e806b1 rpu: Add progress and logging to the updater. 2023-10-15 19:39:33 -04:00
Tom Rothamel f6d9762c5c rpu: Integrate rpu with the existing updater. 2023-10-15 15:58:01 -04:00
Ren'Py Bot 8b679cca71 Merge branch 'fix' 2023-10-15 04:30:07 -04:00
Tom Rothamel 34fe132e55 rpu: Use an environment variable to enable RPU. 2023-10-14 23:40:12 -04:00
Gouvernathor 0036bc3fe9 Optional plural 2023-10-15 03:52:22 +02:00
Gouvernathor d321d1ff51 Implement character char and word counts
fixes #5001
2023-10-15 03:46:44 +02:00
Gouvernathor a98d15eed4 Toggle the builtins-in-parameters check
disabled by default
2023-10-15 03:22:40 +02:00
Gouvernathor 57dba01448 Merge branch 'lint-parameter-names' into lint-toggles 2023-10-15 03:19:14 +02:00
Gouvernathor 3532b589d5 Implement lint options and make orphan tl check optional 2023-10-15 03:15:31 +02:00
Gouvernathor 51cc42a901 Base GUI entries for lint toggles 2023-10-15 02:33:51 +02:00
Gouvernathor e09b87dffe typos 2023-10-15 02:27:13 +02:00
Gouvernathor c5752398b9 doc: extend new im wording to the displayables page 2023-10-15 02:23:44 +02:00
Ren'Py Bot d5fe9c9a11 Merge branch 'fix' 2023-10-14 04:30:07 -04:00
Tom Rothamel b8ca91a62a bubble: Make available outside the overlay.
Fixes #5052.
2023-10-13 23:47:56 -04:00
Tom Rothamel 5aec41f9e1 bubble: Make available outside the overlay.
Fixes #5052.
2023-10-13 23:47:03 -04:00
Tom Rothamel b1d1db1075 doc: Finish documenting shaper. 2023-10-13 08:35:35 -04:00
Tom Rothamel 2708eda3d3 py2: Make generating rpus work with py2. 2023-10-13 08:35:35 -04:00
Ren'Py Bot ad83e0354e Merge branch 'fix' 2023-10-12 04:30:07 -04:00
Tom Rothamel 1c823a4e7c rpu: Support compressed segments. 2023-10-12 00:23:52 -04:00
Tom Rothamel 11186c86ae rpu: Allow rpus to be created in parallel. 2023-10-11 22:44:08 -04:00
Tom Rothamel 6014bfa007 Use the correct variable to configure the package formats. 2023-10-11 22:44:08 -04:00
Gouvernathor ef0d2db11d Fix translation 2023-10-11 18:23:50 +02:00
Ren'Py Bot 7dd1db50d2 Merge branch 'fix' 2023-10-11 04:30:07 -04:00
Tom Rothamel c8413912d2 Add a "Skip splashscreen" preference to the launcher.
This sets RENPY_SKIP_SPLASHSCREEN, which causes Ren'Py to
skip the splashscreen label.
2023-10-10 22:34:30 -04:00
Tom Rothamel 969b2ccecf SyntaxError: Invalid syntax. 2023-10-10 21:22:01 -04:00
Tom Rothamel 228c72f6c1 rpu: Create FileLists from the current.json file. 2023-10-10 20:40:44 -04:00
Tom Rothamel ad9af51510 rpu: Enable building rpus for the SDK. 2023-10-10 20:40:44 -04:00
Tom Rothamel 45faa71da8 Merge pull request #5045 from mal/layer-clip-docs
Clarify clipping behaviour as it relates to layers and Layer
2023-10-10 20:07:45 -04:00
Tom Rothamel e530c78cc0 Merge pull request #5050 from renpy/im-directives
Add warnings and deprecated sections for image manipulators
2023-10-10 20:07:27 -04:00
Gouvernathor c3a26654f7 Update the transform property 2023-10-11 00:52:20 +02:00
Gouvernathor 14710606ef doc: heavy-handed use of the deprecated directive 2023-10-11 00:41:13 +02:00
Gouvernathor 72cb9e3929 doc: Add warnings to the im page 2023-10-11 00:38:55 +02:00
Ren'Py Bot 9c3b082260 Merge branch 'fix' 2023-10-10 04:30:07 -04:00
Mal Graty 46cfe60086 doc: Signature for Layer displayable 2023-10-09 14:06:35 +01:00
Mal Graty 588d1e1137 doc: Warn of layer_clipping precedence in Layer 2023-10-09 14:04:14 +01:00
Mal Graty 15a12efd61 doc: Clarify behaviour there's no layer_clipping 2023-10-09 14:04:14 +01:00
Gouvernathor b0434ea1d9 doc: Update a link that was a teensy bit outdated 2023-10-09 14:58:47 +02:00
Tom Rothamel 96b44cdcb2 Add Show Filename and Line
A new option in the developer menu that shows the filename and line,
and lets you click to edit.
2023-10-08 21:58:44 -04:00
Tom Rothamel 1fde5f985a Add the EditFile action.
This opens the filename and line in a text editor,
if possible.
2023-10-08 21:54:43 -04:00
Tom Rothamel 34dcdc7f0e rpu: Include rpu update information in update.json. 2023-10-07 15:47:49 -04:00
Tom Rothamel 2238b460a7 rpu: Provide progress when making the update.
This was required because previously, only writing the files
made progress.
2023-10-07 10:37:47 -04:00
Tom Rothamel ff8ba2d10c rpu: Start integration with distribute.
This can now create the rpu files for a game.
2023-10-06 23:58:30 -04:00
Tom Rothamel 5e3495c333 rpu: Soft limit to 50MB.
While a big file will let the .rpy get bigger, this makes sure that
two files won't be downloaded when one will do.
2023-10-06 23:23:02 -04:00
Tom Rothamel 79945d9649 rpu: Prepare to generate updates.
* Add FileList.add_file and FileList.add_directory.
* Prepend the rpus with the name of the list that creates them.
* Delete obsolete rpus.
2023-10-06 22:57:23 -04:00
Tom Rothamel 254fa8c4ee Add missing encoding field to StdioRedirector.
Fixes a crash in compileall.
2023-10-06 22:56:32 -04:00
Tom Rothamel 14b596e15a Change the Sphinx search role.
Fixes #5037.
2023-10-05 21:59:56 -04:00
Tom Rothamel f33aef4711 Use premultiplied alpha for underline and strikethrough.
Fixes #5033.
2023-10-04 23:17:56 -04:00
Tom Rothamel 7d86e8509a rpu: Move to the renpy.update module. 2023-10-04 22:20:35 -04:00
Tom Rothamel dd26bbf859 rpu: Combine filetypes and util into a single common file. 2023-10-04 01:08:59 -04:00
Tom Rothamel cde1f301d2 rpu: Manage the executable bit.
Also, remove mtime from the json files.
2023-10-03 22:06:23 -04:00
Tom Rothamel 2d8e7d3a1a rpu: Create empty new files. 2023-10-02 23:24:08 -04:00
Tom Rothamel 1c2b3ed231 rpu: Delete files when not necessary, or at the end. 2023-10-02 23:14:43 -04:00
Tom Rothamel 021aa22a80 rpu: Add logging and deletion infrastructure. 2023-10-01 22:50:44 -04:00
Tom Rothamel e548ed13b2 rpu: Add support for reporting progress. 2023-10-01 01:21:03 -04:00
Tom Rothamel b1cf7eb64e Merge pull request #5020 from qTich/fix/pad_enabled
fix: `pad_enabled` instance type,, since can contains `all`
2023-09-30 19:42:55 -04:00
Tom Rothamel 86e9454b79 Merge pull request #5024 from Kassy2048/ipad-detect
New detection for iPad
2023-09-30 19:42:31 -04:00
Kassy f7d2434dff New detection for iPad
Since iOS 13, Safari uses the desktop mode by default on iPad which removes
the "iPad" string from the User-Agent header. The new detection looks for
an Apple product with touch enabled (there is no MacOS product with touch
screens AFAIK).
2023-10-01 01:36:00 +02:00
Tichq 07c96e8872 fix: pad_enabled instance type,, since can contains all 2023-09-30 11:50:27 +03:00
Tom Rothamel 0f51948f80 Search the interpolate namespace for variables during interpolation. 2023-09-29 22:04:43 -04:00
Ren'Py Bot 8448808c67 Merge branch 'fix' 2023-09-29 04:30:08 -04:00
Tom Rothamel 8da08dd187 Restore a (now simpler) render_movie.
Since this function is used to show cutscenes.

Fixes #5015.
2023-09-28 21:16:07 -04:00
Tom Rothamel eedc86f20e rpu: Use range downloads to get block files. 2023-09-28 01:25:10 -04:00
Tom Rothamel ccb978f454 rpu: Add a progress callback to the downloader. 2023-09-28 00:16:26 -04:00
Tom Rothamel 33830fd6b4 rpu: Start work on range download library. 2023-09-27 23:45:33 -04:00
Tom Rothamel 615c624a70 Revert "Call functions when interpolating."
This reverts commit 4d8d065c89.
2023-09-27 22:00:14 -04:00
Gouvernathor 66f17ae6dd Avoid using non-f-string interpolation syntax 2023-09-27 23:34:01 +02:00
Ren'Py Bot 7bf7303f85 Merge branch 'fix' 2023-09-27 04:30:08 -04:00
Tom Rothamel 4d8d065c89 Call functions when interpolating.
This will make it possible to have accessors when interpolating.

Fixes #5009.
2023-09-27 01:46:24 -04:00
Tom Rothamel fc111cc0ab Merge pull request #5007 from renpy/custom-text-tags
Custom text tags
2023-09-26 21:32:44 -04:00
Gouvernathor b535e2b63c Disown dynamic ctt, add warning markup, remove useless label 2023-09-27 00:28:39 +02:00
Tom Rothamel fb294567fe rpu: Execute the plan.
This involves copying data from the source files, including block
files that are on disk, into the target files, and then renaming
those files when done.
2023-09-26 02:26:00 -04:00
Tom Rothamel b2893b5ea8 rpu: Create plan.
The plan decides where to get data from, and write it to.
2023-09-25 23:58:33 -04:00
Tom Rothamel 5853d63076 Make sure the .rpa padding is taken fron a local file.
This will prevent a block file from being downloaded just to gain
access to the .rpa padding.
2023-09-25 22:39:23 -04:00
Tom Rothamel bd7cd2a0c6 rpu: Consider .new.rpu files as sources for update data.
So as to recover from a failed update.
2023-09-24 09:34:41 -04:00
Tom Rothamel 9d42e5c667 rpu: Log the initial evaluation of files. 2023-09-24 01:51:20 -04:00
Tom Rothamel ab9ee40e1a rpy: Add the ability to unserialize the file types. 2023-09-24 01:51:20 -04:00
Ren'Py Bot 0aa28b6804 Merge branch 'fix' 2023-09-23 04:30:07 -04:00
Tom Rothamel 0891fff309 rpu: Generate the block files and index.
The block files contain the deduplicated segments, while the
index stores where segments are in the destination files and
the block files.
2023-09-23 01:37:30 -04:00
Tom Rothamel ca37ebacd1 rpu: Add support for scanning a .rpa file. 2023-09-22 23:29:34 -04:00
Tom Rothamel 51aff5d94d rpu: Initial work, scanning directoriues to create files. 2023-09-22 22:22:36 -04:00
Gouvernathor 7ff6acc36c french translations 2023-09-23 01:44:00 +02:00
Denys cda1c18e03 Update Ukrainian translations (#4993) 2023-09-23 00:46:53 +02:00
Denys 7f615dcddc Update error.rpy (#4992) 2023-09-22 16:43:52 +02:00
Ren'Py Bot 646a7535b0 Merge branch 'fix' 2023-09-22 04:30:08 -04:00
Tom Rothamel 4600339cf7 Update the .gitignore. 2023-09-21 22:58:44 -04:00
Tom Rothamel 03fdf2801e Simplify how Movie's size argument works.
Previously it had been its own code path, but now the movie
is rendered normally and then resized. Fixes #4983.
2023-09-21 22:45:29 -04:00
Ren'Py Bot e427b4e910 Merge branch 'fix' 2023-09-21 04:30:08 -04:00
Gouvernathor 0826778a5e Add a warning when creating new projects in renpy 7
not disabled, because it still makes sense for test purposes or to update default files
2023-09-21 04:30:07 -04:00
Gouvernathor 5050ee20ee doc typo 2023-09-21 04:30:07 -04:00
Tom Rothamel b4cf19cb0c Filter out the _sustain tag when choosing live2d attributes.
Fixes #4984.
2023-09-20 23:06:25 -04:00
Tom Rothamel dee35cfc66 Allow the DPI of SVG images to be selected.
With a new DPI parameter to Image. Fixes #4832.
2023-09-19 22:53:58 -04:00
Gouvernathor 325175f3c3 Better detect when the console should expect a new line before executing the block (#4834)
* Make blocks with comments open a newline in the console

* Support decorators in the console

* Support ending lines with \ in the console
2023-09-19 21:59:28 -04:00
Tom Rothamel 787f09929b Merge pull request #4691 from renpy/warn-new-renpy7
Add a warning when creating new projects in renpy 7
2023-09-19 21:51:14 -04:00
Vladya c5f9ddeae8 "Backslash in filename" fix
Fixes "Backslash in filename" error, when using method from pkgutil.get_data and similar.
2023-09-19 21:49:11 -04:00
Tom Rothamel c43c34c943 Merge pull request #4966 from NyashniyVladya/patch-1
RenpyImporter.get_data fix
2023-09-19 21:47:35 -04:00
Gouvernathor ce07691bbc doc typo 2023-09-19 16:12:41 +02:00
brainos233 9e76a31da1 doc: add missing reference end-string (#4978) 2023-09-19 16:12:16 +02:00
Gouvernathor 90701d03c1 doc typo 2023-09-19 16:10:28 +02:00
Ren'Py Bot 0256f2bba7 Merge branch 'fix' 2023-09-19 04:30:56 -04:00
Tom Rothamel a12d9c544e Bump fix branch versions. 2023-09-19 00:12:40 -04:00
Tom Rothamel 8bb5291324 doc: Update sponsor doc. 2023-09-18 22:27:29 -04:00
Tom Rothamel 186b082e3c Finish changelog. 2023-09-18 22:24:59 -04:00
Tom Rothamel 4dd40736a1 live2d: Install 32-bit windows library.
Fixes #4953.
2023-09-18 22:22:08 -04:00
Tom Rothamel 8c3741e6f9 Fix a truly ancient translation bug. 2023-09-18 18:34:41 -04:00
Gouvernathor 6e7f28f574 Update the ShowMenu doc entry (#4967)
better apparent signature, better documenting how args and kwargs work
2023-09-18 18:22:46 -04:00
Gouvernathor fa24e47d29 Update the ShowMenu doc entry (#4967)
better apparent signature, better documenting how args and kwargs work
2023-09-18 18:22:12 -04:00
Ren'Py Bot 12acbfc963 Merge branch 'fix' 2023-09-18 04:30:45 -04:00
Tom Rothamel 8e1945a628 Mark a context as non interacting when it's copied for rollback.
This is an attempt at fixing a stack trace that ended wit:

  File "C:\renpy\renpy\ui.py", line 299, in interact
    rv = renpy.game.interface.interact(roll_forward=roll_forward, **kwargs)
  File "C:\renpy\renpy\display\core.py", line 3556, in interact
    raise Exception("Cannot start an interaction in the middle of an interaction, without creating a new context.")
Exception: Cannot start an interaction in the middle of an interaction, without creating a new context.

After an autoreload.
2023-09-17 22:57:02 -04:00
Ren'Py Bot fdae52f6ad Merge branch 'fix' 2023-09-17 04:30:56 -04:00
Tom Rothamel 4b47d59b3b steam: Make the steam deck keyboard a lot less complicated.
This disables:

* Automatic showing the keyboard if the player dismisses it.
* Shifting the screen to where the keyboard is,.

And it changes the keyboard area to the top of the screen.

The goal of this is to work around recently-introduced issues with
Steam Deck keyboard handling.
2023-09-16 23:45:59 -04:00
Tom Rothamel 9cde14fa6d steam: Make the steam deck keyboard a lot less complicated.
This disables:

* Automatic showing the keyboard if the player dismisses it.
* Shifting the screen to where the keyboard is,.

And it changes the keyboard area to the top of the screen.

The goal of this is to work around recently-introduced issues with
Steam Deck keyboard handling.
2023-09-16 23:41:57 -04:00
Tom Rothamel a98fa5f7fe hb: Changelog. 2023-09-16 20:07:15 -04:00
Tom Rothamel bf0bc1d837 Update to Emoji 15.1. 2023-09-16 18:44:36 -04:00
Tom Rothamel db24c1eb3a hb: Document variable fonts. 2023-09-16 00:59:20 -04:00
Tom Rothamel c8a88bb17e hb: Fix minor issue with variable fonts and text tags. 2023-09-16 00:41:33 -04:00
Tom Rothamel 9c73cff8ce hb: Add renpy.variable_font_info().
A function that returns information about a variable font, so
that the creator knows how Ren'Py understands their font.
2023-09-15 01:11:22 -04:00
Ren'Py Bot 5a4b14009e Merge branch 'fix' 2023-09-14 23:23:49 -04:00
Tom Rothamel a4cb1a123e Avoid calling interface.timeout when the interface isn't ready.
Fixes #4968.
2023-09-14 18:15:42 -04:00
Tom Rothamel 057f69602b Avoid nicing distribute. 2023-09-14 17:57:59 -04:00
Ren'Py Bot 2040da88db Merge branch 'fix' 2023-09-14 04:30:56 -04:00
Tom Rothamel 82de5b7af0 Revert "Enable or disable text input as required."
This reverts commit a65cecfc18.

Bug #4784 is implicated in this, but there's a new fix
in the form of an SDL patch.
2023-09-14 01:10:15 -04:00
Tom Rothamel a688409eb9 hb: Implement the axis: and instance text tags.
These let the user set an axis or an instance of a variable
font.
2023-09-13 09:08:15 -04:00
Tom Rothamel 2ec1cb0cdc hb: Make font variations case insensitive. 2023-09-13 08:20:37 -04:00
Tom Rothamel a73082df6f hb: Add styles to support variable fonts. 2023-09-13 01:21:17 -04:00
Tom Rothamel e33888949a hb: Construct the harfbuzz face after the variable font stuff is set.
This fixes issues where some data appears to remain cached.
2023-09-13 01:15:48 -04:00
Tom Rothamel 6422153ce1 hb: Allow instances and axis values of variable fonts to be specified. 2023-09-12 23:32:46 -04:00
Tom Rothamel 9d1263d7c3 hb: Add the first support for font instances and variations. 2023-09-12 00:38:35 -04:00
Tom Rothamel 608cbab10c Use the correct key. 2023-09-11 21:16:02 -04:00
Tom Rothamel 2b08c40a4a Add config.font_hinting.
This is a single variable that allows all uses of a font to
have the same hinting, which styles can override.
2023-09-10 22:06:56 -04:00
Vladya bd01358481 "Backslash in filename" fix
Fixes "Backslash in filename" error, when using method from pkgutil.get_data and similar.
2023-09-10 23:30:12 +03:00
Tom Rothamel 1e518437dd Revert to using the "auto" hinter.
With renpy/renpy-build@ebe6d6a01a,
the autohinter looks quite good on Latin and non-Latin languages,
so we should continue to prefer it.
2023-09-10 00:54:04 -04:00
Tom Rothamel 2096c691ce Implement the auto-light hinting mode.
This isn't going to be the default, but it is available if creators
want it.
2023-09-10 00:46:17 -04:00
Tom Rothamel 6b4eadf0fd Merge branch 'fix' 2023-09-09 21:52:51 -04:00
Tom Rothamel fc8ac8344d Allow a checkpoint to become a checkpoint.
A checkpoint is created when a failed rollback happens, and probably
also when saving. When that statement finishes, we'd want the
checkpoint to become hard.

Fixes #4963.
2023-09-09 20:47:12 -04:00
Ren'Py Bot f6d8afdad6 Merge branch 'fix' 2023-09-09 04:30:55 -04:00
Tom Rothamel 420564557f Force the gl2 renderer to be used on macOS.
This is because there are major macOS-relevant fixes to the renderer,
such as the fix for #4155, that don't make sense to backport to the
gl renderer.
2023-09-08 22:32:17 -04:00
Ren'Py Bot a8cab927bb Merge branch 'fix' 2023-09-08 04:30:56 -04:00
Tom Rothamel 81ee1d994e Fix "attempted relative import with no known parent package"
By setting __package__ correctly. Fixes #4961.
2023-09-08 01:29:30 -04:00
Tom Rothamel 52c1e64b6f steam: Force the window to be the top of screen.
The previous code could - and would - put the text onto the bottom
half of the screen, which popped the textbox up on the top half,
which looked terrible. By forcing the location, the end result
looks much nicer.

Fixes #4959.
2023-09-07 23:24:33 -04:00
Gouvernathor 3ef755d5d4 Merge branch 'fix' 2023-09-06 21:34:15 +02:00
Gouvernathor e719dd8d47 doc: fixes
fixes #4956 and something that was only fixed on master
2023-09-06 21:33:00 +02:00
Gouvernathor ab3f1242d7 Merge branch 'fix' 2023-09-06 11:21:04 +02:00
Gouvernathor 8df82cbac0 doc: fixes and improvements on the midnight commit 2023-09-06 11:20:34 +02:00
Gouvernathor 13c557b5a2 doc: remove duplication 2023-09-06 10:57:11 +02:00
Ren'Py Bot 44e32ddffb Merge branch 'fix' 2023-09-06 04:30:56 -04:00
Tom Rothamel 852b489529 Bump versions. 2023-09-06 00:46:03 -04:00
Tom Rothamel 3ff08b9c03 Produce a valid-ish version for pygame_sdl2. 2023-09-06 00:46:03 -04:00
Tom Rothamel 67c2469d37 doc: Changelog. 2023-09-06 00:46:03 -04:00
Tom Rothamel 60745892c1 Bump versions. 2023-09-06 00:44:45 -04:00
Tom Rothamel d511804be3 Produce a valid-ish version for pygame_sdl2. 2023-09-05 22:06:47 -04:00
Tom Rothamel 487c60da2d doc: Changelog. 2023-09-05 21:13:50 -04:00
Ren'Py Bot 96c63ea9e2 Merge branch 'fix' 2023-09-05 04:30:56 -04:00
Tom Rothamel 2eca653f47 doc: Credits. 2023-09-05 01:39:02 -04:00
Tom Rothamel 6f8378f5b4 doc: Update sponsors. 2023-09-04 20:35:16 -04:00
Ren'Py Bot 232eda7c98 Merge branch 'fix' 2023-09-03 20:24:29 -04:00
Tom Rothamel b6fc8496f4 doc: Some changes to the context documentation. 2023-09-03 19:40:17 -04:00
Tom Rothamel 8a2634b206 Merge pull request #4896 from renpy/doc-context
Document what a context is
2023-09-03 19:36:04 -04:00
Tom Rothamel 3521d54e0a Call invalidate when adding one displayable to another.
Per #4939.
2023-09-03 19:34:16 -04:00
Ren'Py Bot 6c1f1c8138 Merge branch 'fix' 2023-09-02 18:08:22 -04:00
Tom Rothamel 24c0616158 py2: Fix the type of __package__. 2023-09-02 18:07:56 -04:00
Ren'Py Bot 1102904380 Merge branch 'fix' 2023-09-02 04:30:37 -04:00
Tom Rothamel 2d690bd7cb Implement more of PEP 302.
Fixes #4948. Per #4644.
2023-09-01 23:37:34 -04:00
Tom Rothamel 3ec2ad0a7b Make __file__ and __path__ full paths.
Per #4948.
2023-09-01 22:43:24 -04:00
Ren'Py Bot d3d33f31bb Merge branch 'fix' 2023-08-31 19:10:28 -04:00
Tom Rothamel 78dfdd024b Fix debug output-related crash introduced by 991fbf107a. 2023-08-31 18:30:12 -04:00
Ren'Py Bot 517e12d3e5 Merge branch 'fix' 2023-08-31 04:30:38 -04:00
the66F95 1b26542f0c Update 00inputvalues.rpy
restores the previous behavior to be able to deactivate InputValue objects via "Enter".
for example, the current behavior can be seen in any project using the button that wraps the FilePageNameInputValue object.
2023-08-31 00:43:51 -04:00
Tom Rothamel 29e84de69c Merge pull request #4946 from the66F95/_InputValueAction
Update 00inputvalues.rpy
2023-08-31 00:41:17 -04:00
Tom Rothamel 991fbf107a distribute: Match directories as both files and directories.
The goal is to allow **.app to be ignored on mac.

Fixes #4945.
2023-08-31 00:14:58 -04:00
Tom Rothamel 041a4c4d07 Respect the parameter to GamepadExists. 2023-08-30 21:55:50 -04:00
the66F95 e8de3df9c4 Update 00inputvalues.rpy
restores the previous behavior to be able to deactivate InputValue objects via "Enter".
for example, the current behavior can be seen in any project using the button that wraps the FilePageNameInputValue object.
2023-08-31 02:00:25 +02:00
Ren'Py Bot f0ba1ac5a1 Merge branch 'fix' 2023-08-30 04:30:38 -04:00
Tom Rothamel 6931b5f06d Make GamepadExists respect config.developer.
Fixes #4940.
2023-08-30 00:35:47 -04:00
Tom Rothamel 2850cea6c0 vscode: Add styles. 2023-08-29 22:58:24 -04:00
Tom Rothamel e364ca4173 Find variables before wrapping a comprehension.
If we do it in the other order, variables that are wrapped
show up as set, which means they won't be wrapped in an outer
comprehension, causing problems.

Fixes #4943.
2023-08-29 22:58:24 -04:00
Gouvernathor c6cc1dc5f6 Fix translation typo 2023-08-29 23:02:52 +02:00
Ren'Py Bot 12dbf12f44 Merge branch 'fix' 2023-08-29 04:30:37 -04:00
Tom Rothamel 9c7b8a6398 Fix issues with ATL deep compare.
* The blocks weren't compiled before compare.
* Dicts weren't handled.
* Errors weren't handled.

Fixes #4942.
2023-08-29 01:17:49 -04:00
Ren'Py Bot 18d3f48686 Merge branch 'fix' 2023-08-28 04:30:38 -04:00
Tom Rothamel 78c71f0a0f Do not change the style prefix of a viewport and it's children.
... when the viewport is focused or unfocused. The viewport being
focused occurs during drag operations, which should generally
be invisible to the user, so it's not required.

Re-rendering the children of the viewport is also a performance
problem, and so this prevents that from happening.

Fixes #4838.
2023-08-28 01:03:25 -04:00
Ren'Py Bot 86d0e1e275 Merge branch 'fix' 2023-08-27 04:30:37 -04:00
Tom Rothamel 935173fcf5 Create pax-format tar files.
These files support utf-8, so more files.
2023-08-27 00:34:46 -04:00
Tom Rothamel 05e72cbe27 Perform a greedy rollback after load.
This is the same rollback that is used during a normal rollback,
and re-runs statements before the rollback.

Fixes #4872.
2023-08-26 23:51:05 -04:00
Tom Rothamel 3dd1d32ef4 hbfont: Eliminate type mixing.
And remove a warning on build.
2023-08-26 01:14:29 -04:00
Tom Rothamel 73725e2131 The new CopyToClipboard action copies text to the clipboard.
Fixes #4868.
2023-08-25 21:59:31 -04:00
Ren'Py Bot c29b180647 Merge branch 'fix' 2023-08-25 04:30:38 -04:00
Tom Rothamel 65e2d27efb doc: The most common use of renpy.set_return_stack.
Fixes #4909.
2023-08-24 21:21:17 -04:00
Tichq 7045295eee fix: missed changes in beceb10166 (#4931) 2023-08-24 10:33:22 +02:00
Ren'Py Bot 3d1ab26448 Merge branch 'fix' 2023-08-23 04:30:37 -04:00
the66F95 eeb6958174 respect "renpy.store.__autosave"
respect the renpy.store._autosave value when calling renpy.loadsave.force_autosave() directly.
could be annoying if you have a choice menu in a splashscreen for instance.
2023-08-22 22:24:31 -04:00
Tom Rothamel 80e2d1d3a9 Merge branch 'fix' 2023-08-22 22:18:21 -04:00
Tom Rothamel 2ccdb65cc5 Merge pull request #4927 from the66F95/autosave
respect "renpy.store._autosave"
2023-08-22 21:03:30 -04:00
the66F95 6135979a7c respect "renpy.store.__autosave"
respect the renpy.store._autosave value when calling renpy.loadsave.force_autosave() directly.
could be annoying if you have a choice menu in a splashscreen for instance.
2023-08-22 12:03:03 +02:00
Tom Rothamel 0a01a4af64 Allow an interaction to restart during viewport animation.
Fixes #4926, mostly.
2023-08-21 23:14:41 -04:00
Joseph Boyd 0afd06dd49 Revert removal of loop_only to fix if_changed loop seam issue
Fixes #4872 by restoring the `loop_only` parameter of `enqueue()` in audio.py.

After commit `b0b096b`, calling `play` on a music track with the `if_changed` parameter would *always* add it to the queue, even if the same track was already currently playing on loop. This newly queued 'loop' would always begin at the very start of the track, **ignoring any user-defined `loop` point parameters** that were added by the user to allow the track to seamlessly loop. This caused the looping track to abruptly 'restart' the next time it would normally loop whenever a player visited a label that wanted that track to play if it wasn't already looping (for example, the 'market' example in Ren'Py's audio documentation page for `if_changed`).

This change restores the `loop_only` parameter and functionality to `enqueue()` and `play()` to avoid a track from being added to the queue and potentially abruptly restarting the track if it is currently already playing on loop. To attempt to preserve the fix the change `b0b096b` accomplished for #4695, the position/logic of the `c.dequeue()` calls in `music.play()` has not been reverted to it's previous behaviour.

Documentation wise, the Audio documentation page mentions that `if_changed` queues 'an additional loop' of the currently playing track when this situation is reached, which is only an accurate description if the currently looping track does not have a user defined `loop` point (or if the loop point was 0.0). A more accurate description is that the track is queued to play again from the very beginning after the current loop is complete, discarding any user-defined `loop` points. The issue mentioned above is reproduceable using the code present in the `if_changed` section of the audio page, provided the 'market' track has a non-zero `loop` parameter.
2023-08-20 22:28:21 -04:00
Tom Rothamel 9c5b8f5ba4 Merge pull request #4914 from mithost/4872-fix
Revert removal of `loop_only` to fix `if_changed` loop seam issue
2023-08-20 22:27:14 -04:00
Tom Rothamel ec6a8f8e1a Change the example of a third-party python package.
To one that isn't already part of Ren'Py.

Fixes #4899.
2023-08-20 16:58:06 -04:00
Tom Rothamel 99090ed87a Filter PYTHON* variables when launching a project.
While renpy.exe is set up to ignore the variables, renpython isn't.
By filtering them, we can be sure that system python variables
don't break the SDK.

Fixes #4878.
2023-08-19 21:21:14 -04:00
Tom Rothamel 3793a3f9ba Filter PYTHON* variables when launching a project.
While renpy.exe is set up to ignore the variables, renpython isn't.
By filtering them, we can be sure that system python variables
don't break the SDK.

Fixes #4878.
2023-08-19 21:18:53 -04:00
Tom Rothamel 5b88d6fb32 Merge pull request #4893 from renpy/selected-sensitive-list
Sensitiveness and selectedness of action lists
2023-08-18 21:11:14 -04:00
Tom Rothamel b3beae8ab5 Merge pull request #4875 from kyouryuukunn/revert_order_of_xyzrotate_and_zpos
revert the applyment order of poi,orientation,xyzrotate and zpos
2023-08-18 21:10:53 -04:00
Tom Rothamel c8d451838b Store runtime and ctime in the json.
Fixes #4873.
2023-08-18 00:39:38 -04:00
Michael 678ac18b5f OneDrive uses virtualized file system (vault) so
we use __file__ to get the real path of the file.
2023-08-18 00:13:03 -04:00
Tom Rothamel 5cc6b34f56 Merge pull request #4891 from michaelsstuff/reny_base_fix
Edgecase with OneDrive vault
2023-08-18 00:12:27 -04:00
Tom Rothamel 4606bcce76 Merge pull request #4900 from renpy/fix-args-calls
Fix occurrences of *args following a kwarg in calls
2023-08-18 00:11:35 -04:00
Tom Rothamel d3595146b0 Merge pull request #4904 from renpy/doc-atl
Various changes to the ATL page
2023-08-18 00:10:32 -04:00
Tom Rothamel 20ecec1412 Merge pull request #4902 from shawna-p/lint-fix2
Use the say_menu_text_filter when linting
2023-08-18 00:09:18 -04:00
Tom Rothamel ebeed588fa Merge pull request #4876 from renpy/call-word
Parse argument keywords as words instead of names
2023-08-18 00:08:50 -04:00
Tom Rothamel ef08ad74b3 harfbuzz: Use advance as width.
The advance is pretty close to to glyph width, and with the
advance at the end of ruby, means ruby will be centered
properly.

Fixes #4917.
2023-08-17 21:41:35 -04:00
Ren'Py Bot 0b47bc2eea Merge branch 'fix' 2023-08-17 04:30:37 -04:00
Tom Rothamel b2a49cc60e atl: Remove variables_equal and everything required for it. 2023-08-16 23:24:45 -04:00
Tom Rothamel 468733bd75 Use deep comparison of compiled trees to determine if an ATL transform has changed.
This might be more work, but it also should be correct in all cases.

Fixes #4916.
2023-08-16 22:24:25 -04:00
Ren'Py Bot 37d216097d Merge branch 'fix' 2023-08-16 04:30:38 -04:00
Tom Rothamel a1bcd63ba9 Make _side_image_attribute and _side_image_attributes_reset context-dynamic.
This prevents a reset from happening in a menu context, and then
causing the reset to not happen in the main context, thus causing
the image to be shown at the wrong times.

Fixes #4828.
2023-08-15 22:56:32 -04:00
Tom Rothamel 16c2455370 Make _side_image_attribute and _side_image_attributes_reset context-dynamic.
This prevents a reset from happening in a menu context, and then
causing the reset to not happen in the main context, thus causing
the image to be shown at the wrong times.

Fixes #4828.
2023-08-15 22:50:16 -04:00
Joseph Boyd d30d986a51 Revert removal of loop_only to fix if_changed loop seam issue
Fixes #4872 by restoring the `loop_only` parameter of `enqueue()` in audio.py.

After commit `b0b096b`, calling `play` on a music track with the `if_changed` parameter would *always* add it to the queue, even if the same track was already currently playing on loop. This newly queued 'loop' would always begin at the very start of the track, **ignoring any user-defined `loop` point parameters** that were added by the user to allow the track to seamlessly loop. This caused the looping track to abruptly 'restart' the next time it would normally loop whenever a player visited a label that wanted that track to play if it wasn't already looping (for example, the 'market' example in Ren'Py's audio documentation page for `if_changed`).

This change restores the `loop_only` parameter and functionality to `enqueue()` and `play()` to avoid a track from being added to the queue and potentially abruptly restarting the track if it is currently already playing on loop. To attempt to preserve the fix the change `b0b096b` accomplished for #4695, the position/logic of the `c.dequeue()` calls in `music.play()` has not been reverted to it's previous behaviour.

Documentation wise, the Audio documentation page mentions that `if_changed` queues 'an additional loop' of the currently playing track when this situation is reached, which is only an accurate description if the currently looping track does not have a user defined `loop` point (or if the loop point was 0.0). A more accurate description is that the track is queued to play again from the very beginning after the current loop is complete, discarding any user-defined `loop` points. The issue mentioned above is reproduceable using the code present in the `if_changed` section of the audio page, provided the 'market' track has a non-zero `loop` parameter.
2023-08-15 12:40:45 -04:00
Tom Rothamel b5288343fc Merge branch 'fix' 2023-08-15 00:30:45 -04:00
Tom Rothamel 371b3e15fc Fix compat. 2023-08-15 00:30:04 -04:00
Tom Rothamel 589a510c33 Merge branch 'fix' 2023-08-15 00:28:56 -04:00
Tom Rothamel 85648df290 Merge the glyph changes from master to fix.
This should keep binary compatibilty when change branches.
2023-08-15 00:08:13 -04:00
Tom Rothamel 936363d243 tts: Help ensure notifications are spoken to the player.
At least, in the case where the user lets them play out, rather
than switching away.
2023-08-14 22:45:16 -04:00
Tom Rothamel 05075beed5 Tweak the order of tts so layers and screens closer to the player are spoken first. 2023-08-14 22:42:37 -04:00
Tom Rothamel b729eaed7d harfbuzz: Support computing text bounds. 2023-08-13 19:39:12 -04:00
Tom Rothamel d06bcd0dd2 harfbuzz: Supply slant information. 2023-08-12 22:34:18 -04:00
Tom Rothamel 2e34102cf5 doc: The emoji and harfbuzz changes. 2023-08-11 22:32:07 -04:00
Ren'Py Bot 3018c21828 Merge branch 'fix' 2023-08-11 04:30:38 -04:00
Tom Rothamel 457d0c6cce Remove useless line.
Fixes #4905.
2023-08-11 01:51:02 -04:00
Asriel Senna c9573e3737 doc: mention call screen as working differently wrt with 2023-08-10 22:20:05 +02:00
Gouvernathor a11a7bb2ee Various changes to the ATL page 2023-08-10 21:32:44 +02:00
Tom Rothamel e1b37142c2 harfbuzz: Enable by default on py3.
Also, enable bytecode hinting everywhere.
2023-08-10 00:54:11 -04:00
Tom Rothamel 32923dd8f8 harfbuzz: Add support for vertical text. 2023-08-09 23:48:12 -04:00
shawna-p e4bef44f2c Filter text for the lint check 2023-08-09 22:49:58 -04:00
Gouvernathor 8a151ed1b4 Fix occurrences of *args following a kwarg in calls 2023-08-09 23:18:48 +02:00
Tom Rothamel 54b4406974 Support building without harfbuzz on Ren'Py 7 web. 2023-08-08 22:45:16 -04:00
Tom Rothamel 4b3561d821 harfbuzz: Build by default. 2023-08-07 23:32:22 -04:00
Ren'Py Bot fb197d90b9 Merge branch 'fix' 2023-08-07 04:30:37 -04:00
Tom Rothamel d32f5b10f5 Fix alpha premultiplication in text.
Fixes #4880.
2023-08-07 01:12:42 -04:00
Asriel Senna 446e4609a9 doc: changes
document how pop_call behaves wrt dynamic variables
linkify a variable
better explain the name_only character
2023-08-07 01:33:29 +02:00
Asriel Senna 1f9a4df252 Document what a context is 2023-08-07 01:18:21 +02:00
Gouvernathor 08eb08562f Change the documented signatures 2023-08-05 10:58:50 +02:00
Ren'Py Bot 8d3401f2ac Merge branch 'fix' 2023-08-05 04:30:37 -04:00
Gouvernathor 3370a07f18 doc: sensitiveness and selectedness of action lists 2023-08-04 22:22:08 +02:00
Gouvernathor c164c1af40 doc: fix markup and tweak phrasing 2023-08-04 17:45:50 +02:00
Michael df26c03087 OneDrive uses virtualized file system (vault) so
we use __file__ to get the real path of the file.
2023-08-04 13:18:20 +02:00
Gouvernathor db8a6f9f13 Fixes to the changelog
Duplicate entries and typos
2023-08-04 09:03:31 +02:00
Tom Rothamel 25986373d1 Merge branch 'fix' 2023-08-03 08:11:51 -04:00
Gouvernathor f067652a3b Fix store.say's documentation (#4883)
It was documented as an override of renpy.say, and while that would be useful, it's not at all what the function does
2023-08-03 08:11:20 -04:00
Tom Rothamel 122dbf2619 Remove duplicate say-related functions from 00library.
Inspired by #4883.
2023-08-03 08:08:52 -04:00
Tom Rothamel 547bef2483 Merge branch 'fix' 2023-08-01 22:23:28 -04:00
Tom Rothamel efe6609085 doc: Fix filename extension.
Fixes #4884
2023-08-01 22:22:47 -04:00
Tom Rothamel 1d43fb11dd vscode: Correct arch on Linux.
Microsoft calls it x64, not x86_64, so use that.
2023-08-01 22:01:50 -04:00
Tom Rothamel ff177d0dae harfbuzz: Allow the text shaper to be set by style.
This allows harfbuzz and non-harfbuzz text to coexist in the same
game, which is useful for testing during development. It will also
provide backwards compatibility when we change the default.
2023-08-01 22:01:15 -04:00
Moshibit 1dd5ba512c Spanish translation update for master (#4885)
This is specifically for strings added in master, it should not be copied into fix (it would work but it's pointless)
2023-08-02 03:49:20 +02:00
Tom Rothamel 3906f99ebc harfbuzz: Move to one hb_font_t per FBFont, size.
This generates sized and kerned text.
2023-07-31 22:06:19 -04:00
Tom Rothamel f89c672c13 iap: Call the backend request_review. 2023-07-30 21:07:04 -04:00
Tom Rothamel 80ea555ad6 harfbuzz: Use for glyph creation and rendering.
This is enough to generate shaped emjoi, but the text placement and
spacing is all wonky, so there's still a bunch of work to be done.
2023-07-30 19:53:21 -04:00
Tom Rothamel af7a0baa2e vscode: Correct arch on Linux.
Microsoft calls it x64, not x86_64, so use that.
2023-07-30 19:52:44 -04:00
Gouvernathor 3fa7da1384 Parse argument keywords as words instead of names 2023-07-29 17:44:01 +02:00
kyouryuukunn 014de8a873 revert the applyment order of poi,orientation,xyzrotate and zpos 2023-07-29 18:45:58 +09:00
Moshibit 89cfd03516 Spanish translation update (#4856)
* Update launcher.rpy

* Fix Spansih translation.rpy

* Update common.rpy

* Update gui.rpy

* Update launcher.rpy

* Update launcher.rpy
2023-07-26 22:31:06 -04:00
Tom Rothamel 0b937fdea6 hb: Add ability to create a font and use it to shape text. 2023-07-26 01:37:42 -04:00
Tom Rothamel 802652d579 py2: Add an encoding for the emoji trie. 2023-07-25 11:10:11 -04:00
Tom Rothamel bcd4fd4d2c harfbuzz: New font rendering module.
This will support harfbuzz, eventually. It will not support Python 2.
2023-07-25 02:06:37 -04:00
Tom Rothamel 21016cca6c Merge pull request #4863 from JamiesonC/JamiesonC-musicroom-1
MusicRoom: have queue_if_playing consider whether the currently playing track is in the playlist
2023-07-25 00:07:06 -04:00
Ren'Py Bot 1921e7c985 Merge branch 'fix' 2023-07-24 04:30:37 -04:00
Tom Rothamel 6be8d94372 Make sure each trie entry has a default. 2023-07-24 01:05:00 -04:00
Tom Rothamel 84c22334fe Merge pull request #4861 from mal/restore-lost-event-values
Restore return values from time-adjusted widgets
2023-07-23 20:46:06 -04:00
Tom Rothamel 9f286afbbb Merge pull request #4862 from brainos233/fix-emoji-font-name
Use right name of emoji font
2023-07-23 20:45:30 -04:00
Tom Rothamel e32cd6c124 Merge pull request #4866 from mal/devtools-translate-id-screen
Tool to view and copy translation identifiers
2023-07-23 20:44:32 -04:00
Mal Graty f523069468 dev: Tool to view and copy translation identifiers 2023-07-24 01:07:10 +01:00
Tom Rothamel 674d5d87dd emoji: Automatically enable the emoji font.
This divides characters into emjoi and non-emoji runs based on
the information in the emoji trie, based on the unicode standard.
2023-07-23 02:13:41 -04:00
Tom Rothamel 12b37de529 emoji: Make the emoji trie use full characters. 2023-07-22 23:19:33 -04:00
JamiesonC 562ce9734a MusicRoom: have queue_if_playing consider whether the currently playing track is in the playlist
This change ensures that a MusicRoom queues up from the first track if the currently playing track is not part of the playlist. Enables the interjection of the MusicRoom into more complex scenarios (such as hotswapping MusicRooms to effect dynamic playlist changes).
2023-07-22 13:02:31 -05:00
Brainos 148a14f939 Rename Copyright 2023-07-22 23:38:18 +08:00
Brainos fe2ad45dc0 Use right name of emoji font 2023-07-22 23:25:20 +08:00
Mal Graty 12330dead6 Restore return values from time-adjusted widgets 2023-07-22 11:45:53 +01:00
Tom Rothamel 17fb5397c8 emoji: Check the default font, create style entries. 2023-07-21 23:20:09 -04:00
Tom Rothamel 8398c3081e emoji: Add a trie of emoji characters.
The intent of this is to provide the data required to segment a
string into emoji and non-emoji characters, with varying levels
of strictness.
2023-07-21 01:44:35 -04:00
Tom Rothamel 71e8bae6d2 doc: Changelog last. 2023-07-20 22:06:17 -04:00
Gouvernathor d312de84a4 Add the renpy.confirm function. (#4583)
This is a function that takes the place of layout.yesno_screen, but isn't quite as weird.
2023-07-20 21:51:16 -04:00
Ren'Py Bot c3d1c2cee7 Merge branch 'fix' 2023-07-20 04:30:37 -04:00
Gouvernathor 0dd3895b47 doc: long-due update from set_volume to set_mixer
following the passage to log volume or something
2023-07-20 07:25:22 +02:00
Gouvernathor 8230e4186d doc: tweak the confirm screen entry
add the two new strings - the confirm_token one is long and should be used for tests by creators - but be careful if others are added in the future
layout of the list has been tested
2023-07-20 06:17:16 +02:00
Gouvernathor 8e4e8b0e23 doc: tweaks to the Replay section
rename scene to sequence because scene is something else in renpy
don't imply that the game menu or the main menu are the only places from which you can call a replay
fix indenting in the code block, and remove the padding at the start
mistake in a function's documentation
some other stuff
2023-07-20 05:48:21 +02:00
Tom Rothamel 49eab5ffa9 Fix pickling issue.
Python 2 had a weird type for staticmethods, one that
couldn't be pickled. So we wrap compute_raw on Python 2.
2023-07-19 02:22:14 -04:00
Tom Rothamel 8a7fcd95ce Fix incorrect property. 2023-07-19 02:21:59 -04:00
Tom Rothamel d1ad17256b Prefix Ren'Py Sync styles with "sync".
Fixes #4847.
2023-07-18 23:22:12 -04:00
Tom Rothamel 4035fc9621 launcher: Detect and abort distributing the tutorial.
The tutrorial expects to be part of Ren'Py - the example system
may not work if it's being run outside of Ren'Py. This detects
attempts to distribute the tutorial on its own, and aborts the
process.
2023-07-18 23:17:46 -04:00
Tom Rothamel 3dab93666d Add from to calls for the Ren'Py tutorial. 2023-07-18 23:15:25 -04:00
Tom Rothamel ff64ab49f1 Allow loading premultiplied textures.
This is to support the changes to text that produced premultiplied
surfaces, rather than non-premultiplied surfaces. This was necessary
to display emoji properly, and also speeds up the case of normal
text rendering, at least on gl2.

This also removes some old paths that worked with GL_BGRA, which
we aren't using.
2023-07-18 01:25:52 -04:00
Tom Rothamel 15657da6dc Generate premultiplied alpha when rendering text.
This will allow us to skip the alpha premultiply step.
2023-07-17 23:32:59 -04:00
Tom Rothamel 872d4694db emoji: Add support for displaying BGRA glyphs. 2023-07-17 22:39:47 -04:00
Tom Rothamel 617c7e5367 emoji: Expose the BRGA data to the rest of the font system. 2023-07-16 21:42:20 -04:00
Tom Rothamel e1aff07997 Merge pull request #4844 from renpy/absolute-compute
Absolute compute
2023-07-15 20:46:59 -04:00
Gouvernathor 02e365584e doc: move last to dedicated doc section 2023-07-15 05:45:24 +02:00
Tom Rothamel ec8104ae6b Add renpy.reset_all_contexts().
This replaces all contexts with a single context that continues at
the next statement, to allow a game to clean up after load and
error.

Fixes #4476.
2023-07-14 23:36:41 -04:00
Ren'Py Bot df114f794e Merge branch 'fix' 2023-07-14 04:30:37 -04:00
Abdul 7a801523e4 Fixed Typo in dialogue.rst
Fixed minor typo in dialogue.rst
2023-07-13 23:08:16 -04:00
Tom Rothamel 3a897f0fee Merge pull request #4837 from AbdulGoodLooks/patch-1
Fixed Typo in dialogue.rst
2023-07-13 23:07:06 -04:00
Tom Rothamel a5343eb0fa Merge pull request #4843 from renpy/absolute-slots
Fix absolute.slots to __slots__
2023-07-13 18:26:58 -04:00
Gouvernathor beceb10166 Use conpute_raw uniformly 2023-07-13 22:13:26 +02:00
Gouvernathor c687c175fe Add absolute.compute and absolute.compute_raw 2023-07-13 19:27:24 +02:00
Gouvernathor 1032b4f990 Fix slots to __slots__
Mistake done in 690f249 and not seen by me in #4680.
I tested a save-load cycle on an instance of absolute before and after this very fix, it passed without problem. But if someone added arbitrary attributes on an absolute instance, that will now fail.
2023-07-13 19:15:06 +02:00
Tom Rothamel e4bed1cbc2 Remove the androidhw and ioshw video playback methods, and config.hw_video.
These haven't been the default for many years and the players haven't
gottem any attention in that time. Removing them will simplify
the surface that needs to be maintained.
2023-07-12 23:37:13 -04:00
Gouvernathor bdcd6191bd Support position (absolute) everywhere (#4709)
This makes most places that support positions support absolute.
2023-07-12 21:30:22 -04:00
Tom Rothamel deadc4a466 Document that angle/anchorangle are clamped now. 2023-07-12 09:20:35 -04:00
Abdul 505303f51a Fixed Typo in dialogue.rst
Fixed minor typo in dialogue.rst
2023-07-12 14:08:22 +01:00
Tom Rothamel 0f84d898f2 Merge branch 'fix' 2023-07-11 23:28:33 -04:00
Tom Rothamel 6041da97c5 atl: Actually animate anchorangle.
A temporary fix until the better one in 8.2 comes in.
2023-07-11 23:10:25 -04:00
Tom Rothamel cb80aea906 transform: Clamp polar coordinates to 0 <= angle < 360.
This ensures that the angle computed by Ren'Py from cartesian
coordinates and the angle stored in last_angle are always in
the same range, rather than having potentially odd interactions.

The main use of a polar coordinate outside of the range would be-
to provide a movement through 0 (for example, moving from 350 to 370
degrees), this is now directly supported.

Fixes #4835.
2023-07-11 23:00:49 -04:00
Ren'Py Bot 850ad647cc Merge branch 'fix' 2023-07-11 04:30:37 -04:00
Tom Rothamel c02ccf8dcd Multiple fixes to choosing a directory.
Fix an issue where the default wasn't being set, and also deal
better with the user cancelling.

Fixes #3826.
2023-07-10 21:16:12 -04:00
Gouvernathor 49896ba938 doc: Disable python highlighting for math formula 2023-07-10 22:15:24 +02:00
Tom Rothamel bdec32fa5b Merge branch 'fix' 2023-07-10 01:31:51 -04:00
Tom Rothamel be36f99d4c Fix last fix. 2023-07-10 01:31:26 -04:00
Tom Rothamel c007c85490 Fix tiled frames.
Fixes a major regression in the last commit (broke the launcher).
2023-07-09 18:27:43 -04:00
Ren'Py Bot b349ab06fd Merge branch 'fix' 2023-07-09 04:30:37 -04:00
Tom Rothamel a33009b382 Ensure frames are at least one drawable pixel in size.
The same logic applies to frames as to the last commit.
2023-07-08 14:44:21 -04:00
Tom Rothamel c50c6bb23d Prevent solids from being shrunken to below one pixel.
Fixes #4824.

The justification here is that if the creator shows a solid, they
want something, not nothing shown, so we want to show at least 1px
in each direction.
2023-07-08 14:24:55 -04:00
Tom Rothamel 60ade3ae19 Enable all stores in android.json, to test the build. 2023-07-08 13:58:54 -04:00
Tom Rothamel 09d119b2d4 Add bubble.properties_callback.
This makes it possible to limit the bubble properties based
on the character that is speaking.
2023-07-05 23:20:36 -04:00
Tom Rothamel 4588c15333 Merge pull request #4823 from qTich/feature/path-to-logdir
add: `path_to_logdir`
2023-07-05 21:50:23 -04:00
Tichq b9c5317556 add: path_to_logdir 2023-07-06 01:53:03 +03:00
Ren'Py Bot e051e1a120 Merge branch 'fix' 2023-07-05 04:30:37 -04:00
Tom Rothamel ef84c65ce5 Merge pull request #4821 from renpy/layim-auto-multiple-tweak
doc: readd information that went missing during the rewrite
2023-07-04 23:32:30 -04:00
Gouvernathor d3fe5cd6bb doc: readd information that went missing during the rewrite 2023-07-05 05:12:15 +02:00
Tom Rothamel 5073076bb5 Merge branch 'fix' 2023-07-04 20:58:04 -04:00
Tom Rothamel c0248b5af0 Avoid deleting .rpyc files corresponding to _ren.py files that exist.
Fixes #4815/
2023-07-04 20:55:01 -04:00
Abdul 0e4fca9c2f Update screens.rst
Fixed minor typo
2023-07-04 20:20:52 -04:00
Tom Rothamel f35e340c16 Merge pull request #4809 from renpy/last_say-tweaks
Tweaks to renpy.last_say
2023-07-04 19:13:42 -04:00
Tom Rothamel b4dc241e08 Merge pull request #4820 from renpy/layeredimage.predict_all
Update layeredimage.predict_all to None
2023-07-04 19:11:58 -04:00
Tom Rothamel d1c1c0f1ff Merge pull request #4818 from AbdulGoodLooks/patch-1
Fixed typo in documentation
2023-07-04 19:11:36 -04:00
Gouvernathor f45b13a101 Update layeredimage.predict_all to None 2023-07-04 18:07:58 +02:00
Abdul 3d26079aff Update screens.rst
Fixed minor typo
2023-07-04 14:53:51 +01:00
Tom Rothamel 4f152e93ab Move Displayable into its own module (renpy.display.displayable).
Mostly to make the file easier to manage as work begins on
clone.
2023-07-03 19:35:11 -04:00
Tom Rothamel 5fd0d17e0b Merge pull request #4813 from renpy/update-operators-list
Update the list of operators in the lexer
2023-07-03 17:56:42 -04:00
Gouvernathor 0dd9c81e8c Update the list of operators 2023-07-03 18:39:51 +02:00
Gouvernathor fcaa02f21a doc: Advise using ATL transitions to customize the punches 2023-07-03 17:09:20 +02:00
Tom Rothamel b3a0c8f47c Fix typo. 2023-07-03 10:30:16 -04:00
Tom Rothamel ca8977ae7c Document the Ren'Py updater doesn't support mac apps.
Fixes #4803.
2023-07-03 10:30:16 -04:00
Gouvernathor 045932fed6 Copy the warning to similar functions 2023-07-03 04:16:49 +02:00
Gouvernathor 4c1570fdae Tweak renpy.last_say and its doc
The character is evaluated at each query, so that if the LastSay object is saved, it will point to an up-to-date Character object
2023-07-03 04:16:31 +02:00
Tom Rothamel c7c499c6c8 Merge pull request #4745 from mal/multipart-translations
Detect multipart strings marked for translation
2023-07-02 21:47:04 -04:00
Mal Graty 7459dea76c Detect multipart strings marked for translation 2023-07-03 02:35:45 +01:00
Tom Rothamel 0f30d74045 Merge pull request #4808 from mal/fix-pause-roll-forward
Allow control exceptions as pause roll forward
2023-07-02 21:07:43 -04:00
Mal Graty 1c9cff6be3 Allow control exceptions as pause roll forward 2023-07-02 18:22:35 +01:00
Tom Rothamel 2880e63082 doc: Link and changeloy renpy.last_say. 2023-07-02 00:13:58 -04:00
Tom Rothamel 55d16830c9 iap: Add support for reviewing on the Apple App Store. 2023-07-02 00:06:45 -04:00
Tom Rothamel 5422467e02 iap: Add support for requesting a review on Google Play. 2023-07-01 23:18:37 -04:00
Gouvernathor 9189178a5f doc: fix attributes listing 2023-07-02 04:07:03 +02:00
Lezalith 494bb54620 Add renpy.last_say function. (#4749)
This is a function that returns information about the last dialogue line.
2023-07-01 22:03:56 -04:00
Gouvernathor d0e925156b Enable jump/call expression to local labels (#4797)
* Enable jump/call expression to local labels

* Use a separate slot to store the local global label

* Document passing .local_label, and changelog
2023-07-01 21:59:44 -04:00
Moshibit 7a96e8ad82 Spanish translation update (#4805)
* Update launcher.rpy

* Fix Spansih translation.rpy

* Update common.rpy

* Update gui.rpy

* Update launcher.rpy
2023-07-01 10:17:02 -04:00
Tom Rothamel 4d0d262a76 Report deferred errors in load_script.
Fixes #4798.
2023-07-01 01:21:19 -04:00
Tom Rothamel 3dad9048f0 Document the Ren'Py updater doesn't support mac apps.
Fixes #4803.
2023-06-30 22:33:54 -04:00
Tom Rothamel 10ecb3f05b doc: Remove a warning about macOS 10.9.
Which is no longer supported.
2023-06-29 23:30:33 -04:00
Tom Rothamel 648f2835ac doc: Remove a warning about macOS 10.9.
Which is no longer supported.
2023-06-29 23:30:05 -04:00
Tom Rothamel 23adb33f71 Merge pull request #4794 from renpy/doc-screen-properties
Add the screen property directive
2023-06-29 21:27:37 -04:00
Tom Rothamel d62b8b8dfc Merge pull request #4777 from renpy/itch_channels
Convert build.itch_channels to a true dict
2023-06-29 21:09:04 -04:00
Tom Rothamel 5e03d9eb29 Merge pull request #4778 from mal/fix-drag-drop-db0
Prevent rare divide by zero in drag/drop
2023-06-29 21:08:36 -04:00
Gouvernathor eef91dcda8 doc typo
what f976f31 was meant to do
2023-06-30 02:30:21 +02:00
Gouvernathor 29324f6092 Add the screen property directive 2023-06-30 02:08:11 +02:00
Gouvernathor b224df24dc doc: fix bullet point list 2023-06-30 01:50:15 +02:00
Gouvernathor 446a1d74e7 doc: follow-up last 2023-06-30 01:47:56 +02:00
Gouvernathor 5b7bd98219 doc: fix missing ref 2023-06-30 01:45:05 +02:00
Gouvernathor c42b975be3 doc: use the tt reference role and avoid wasting a label 2023-06-30 01:42:18 +02:00
Tom Rothamel 9207334808 Report empty ATL blocks as an error.
Fixes #4792. Deferring to a major release because it's a very
unlikely issue, and may require script changes.
2023-06-28 21:38:44 -04:00
Gouvernathor f976f31e7a doc typo 2023-06-28 23:27:35 +02:00
Gouvernathor 3017331aa9 doc: spacing in an example 2023-06-28 23:14:54 +02:00
Ren'Py Bot 34d4eb57a4 Merge branch 'fix' 2023-06-28 04:30:37 -04:00
Tom Rothamel c7d7cc23b1 doc: Changelog last. 2023-06-27 23:21:38 -04:00
Tom Rothamel a65cecfc18 Enable or disable text input as required.
This prevents the input method from always being active, to consume
and consuming keyboard bindings.

Fixes #4784.
2023-06-27 22:47:51 -04:00
Ren'Py Bot e8323f4cad Merge branch 'fix' 2023-06-27 01:08:00 -04:00
Tom Rothamel 4284d45069 Better error handling when cancelling directory selecton.
Fixes #4779.
2023-06-27 01:07:55 -04:00
Tom Rothamel 9d9085d379 Reset the compile and warp arguments when reloading.
Fixes #4780.
2023-06-26 23:17:55 -04:00
Tom Rothamel cb0cf2bf5e Add the fact that we're reloading to renpy.session. 2023-06-26 23:07:38 -04:00
Tom Rothamel 2c4194e754 rapt: Remove missing JDK options.
Since we no longer search for the JDK on windows until we install
the SDK.
2023-06-26 23:04:26 -04:00
Ren'Py Bot ac2534a87f Merge branch 'fix' 2023-06-26 04:30:37 -04:00
Tom Rothamel 9c442bb694 Merge pull request #4782 from Kassy2048/fix-web-fullscreen
Fix fullscreen Web
2023-06-25 21:47:10 -04:00
Kassy 20d7ecf868 Alias Window mode to non-Fullscreen mode on Web
There is no good way to resize the browser window size and
it's not really desirable to resize it anyway. These
changes should partially fix the issues reported in #4760.
2023-06-26 02:48:42 +02:00
Ren'Py Bot bb4e4da909 Merge branch 'fix' 2023-06-25 04:30:37 -04:00
Gouvernathor b467514c39 add incompat entry 2023-06-25 03:57:13 +02:00
Mal Graty e51642ff3f Prevent rare divide by zero in drag/drop
Encountered in rare rollback scenarios where self.st would correctly
reflect the drag was complete, but the render st was zero, resulting in
self.st and self.target_st being equal resulting in the divide by zero.
2023-06-24 16:27:10 +01:00
Gouvernathor 8556d563c9 Convert build.itch_channels to a true dict, and light compat 2023-06-24 15:20:27 +02:00
Gouvernathor a370643f40 Fix absolute.__rdivmod__
fixes #4772
2023-06-24 13:43:03 +02:00
Gouvernathor e56fbd90f1 fix Camera AST node 2023-06-23 21:56:03 +02:00
Gouvernathor 15ec88c900 Update exception text 2023-06-23 21:44:44 +02:00
Gouvernathor 7eeadcfde1 Typos in incompatible.rst
per previous commit
2023-06-23 13:13:08 +02:00
Gouvernathor 061a8c9194 Typos in changelog.rst
per https://github.com/renpy/renpy/pull/4564#issuecomment-1520347974
I didn't test the right-to-left/bottom-to-top thing
2023-06-23 13:10:31 +02:00
Ren'Py Bot 584b13ff67 Merge branch 'fix' 2023-06-23 04:30:37 -04:00
Tom Rothamel d309f3fb93 Add gui.history_spacing.
This variable allows the creator to customize the space between
history entries.

Fixes #4766.
2023-06-23 01:00:07 -04:00
Tom Rothamel 5505c01d0a Changes to box_reverse.
Per #4765.
2023-06-23 00:41:56 -04:00
Daniel Brookman b423982a28 Correct var in GUI Customization Guide
"gui.choice_text_hover_color" doesn't point to choice_button, so
changing it won't do anything.
2023-06-22 23:28:29 -04:00
Ren'Py Bot 86afb06388 Merge branch 'fix' 2023-06-22 23:27:45 -04:00
Tom Rothamel 0e74637c87 Merge pull request #4767 from dbrookman/doc_choice_button_text_hover
Correct var in GUI Customization Guide
2023-06-22 23:27:32 -04:00
Tom Rothamel 6ca4fc2ae1 Fix image component sorting in the directory.
Make sure each component is a string, but pad out numbers so the
sorting is better (ie, c2 should sort before c12.).

Fixes #4769.
2023-06-22 23:19:54 -04:00
Daniel Brookman 6710dbbde8 Correct var in GUI Customization Guide
"gui.choice_text_hover_color" doesn't point to choice_button, so
changing it won't do anything.
2023-06-22 14:55:41 -04:00
Gouvernathor fb03b82f4c doc: tweaks for timed nw 2023-06-22 13:12:30 +02:00
Tom Rothamel 360277f0fe Document that loadable doesn't search images.
Fixes #4712.
2023-06-22 01:14:39 -04:00
Tom Rothamel 14a09d2cc6 The {nw} text tag takes a number of seconds before the line is dismissed.
Fixes #4763.
2023-06-21 23:07:15 -04:00
Ren'Py Bot 822f1a4da6 Merge branch 'fix' 2023-06-21 04:30:37 -04:00
Tom Rothamel 607c1ac64d A better error message if config.version has a bad character.
Fixes #4758.
2023-06-20 23:52:36 -04:00
Tom Rothamel eb0d4948d0 End an animation immediately if time resets. 2023-06-19 22:21:18 -04:00
Ren'Py Bot bd3d5f9dde Merge branch 'fix' 2023-06-18 23:29:40 -04:00
Tom Rothamel 2c91ada1a6 Restore/improve the handling of mouse events.
* It's now possible to bind a mousedown event to skip, and other
  functions that care about keyup/keydown pairs.

* Mouseup events that are are bound to keyup are ignored.

Fixes #4755.
2023-06-18 22:46:33 -04:00
Tom Rothamel 46b0a05849 Merge pull request #4753 from renpy/tweak-4750
Tweak 1a62894
2023-06-18 14:13:41 -04:00
Gouvernathor 6a663830f8 linkify, tweak phrasings and code 2023-06-18 17:45:03 +02:00
Ren'Py Bot 9a23172671 Merge branch 'fix' 2023-06-18 02:08:44 -04:00
Tom Rothamel 1a62894650 Document the limits to MoveTransition, check for errors. 2023-06-18 02:08:36 -04:00
Tom Rothamel 22b3106504 Merge pull request #4751 from renpy/move-transitions-doc-tweaks
Tweak docstrings for transitions
2023-06-18 00:55:20 -04:00
Gouvernathor 9a1c783895 doc: clarify MultipleTransition API
avoiding rapid unscheduled disassembly of creators' keyboards
2023-06-18 03:14:05 +02:00
Gouvernathor d793750adb doc: tweak docstrings for move transitions
add links, and clarity
2023-06-18 02:33:42 +02:00
Gouvernathor 74b476f8c1 doc: hide Dissolve's alpha parameter
Documented as ignored and kw-only, might as well not exist at all
The other classes in this file had the same done to them, this one was probably forgotten
2023-06-18 01:56:11 +02:00
Gouvernathor 06d6d4b1ef doc: typo 2023-06-17 19:52:33 +02:00
Tom Rothamel 8fe9b7ad89 Add the keep_last_frame parameter to Movie.
This keeps the last frame after the movie ends.

Fixes #4732.
2023-06-17 01:12:37 -04:00
Ren'Py Bot c6456618e4 Merge branch 'fix' 2023-06-16 23:47:53 -04:00
Tom Rothamel 9dc7aa1603 Merge pull request #4722 from Kassy2048/fix_7.6_web
Fix for 7.6 web
2023-06-16 23:31:41 -04:00
Tom Rothamel 98fd979c82 Fix downloads of dlc into the nightly builds. 2023-06-16 23:29:56 -04:00
Tom Rothamel 9723a2b7f8 Merge pull request #4738 from renpy/movie-doc
Tweak the Movie callable documentation
2023-06-16 20:27:16 -04:00
Tom Rothamel 77b1ad7fb1 Merge pull request #4747 from Lezalith/master
Czech Translation of The Question
2023-06-16 20:10:48 -04:00
Lezalith b9bcff650b Czech Language button in Preferences screen. 2023-06-17 02:07:58 +02:00
Lezalith fcc3d2a1b6 The Question czech translation files. 2023-06-17 02:07:29 +02:00
Ren'Py Bot 728f217eb7 Merge branch 'fix' 2023-06-16 04:30:37 -04:00
Tom Rothamel 917ac66cae movie: Ensure the channels exist in any function that can use them.
Fixes #4723.
2023-06-15 22:09:19 -04:00
Mal Graty 30c2a2a269 Avoid cropping widgets during a dissolve (#4717) 2023-06-15 21:17:38 -04:00
Morgan Willcock 79a1890539 Fix changelog entry for 'rpy python' (#4720) 2023-06-15 21:16:48 -04:00
Morgan Willcock ebb9358d87 Fix changelog entry for 'rpy python' (#4720) 2023-06-15 21:15:54 -04:00
Ren'Py Bot 3f5df973bf Merge branch 'fix' 2023-06-15 04:30:37 -04:00
Tom Rothamel e17ef3d265 Merge Ukrainian translation.
By @GVeydzher on twitter.
2023-06-14 22:26:25 -04:00
Ren'Py Bot fb4264f3ee Merge branch 'fix' 2023-06-14 01:38:06 -04:00
Tom Rothamel d72de4ab68 Preserve time when upgrading a save to have a token.
Fixes #4736.
2023-06-14 01:27:45 -04:00
Tom Rothamel a069545bcd retain: Document retained bubbles. 2023-06-13 23:32:08 -04:00
Asriel Senna 79d3951fad doc: reorder parameters to fit their description 2023-06-13 17:30:48 +02:00
Asriel Senna 97fc57d912 Undocument the fps parameter 2023-06-13 17:29:26 +02:00
Tom Rothamel 6ed04f3d5e Merge branch 'fix' 2023-06-13 00:54:35 -04:00
Tom Rothamel 8de1dccf43 Report an error if init is used with a directive, not a statement.
Fixes #4713.
2023-06-12 23:57:24 -04:00
Tom Rothamel 8ec26b7b66 Report parse errors in editor when run from the launcher.
This prevents parse errors from passing hidden when the game
is recompiled during distribution.
2023-06-12 22:35:50 -04:00
Tom Rothamel 1f05d93ea6 bubble, retain: Implement clearing retained bubbles.
This was implemented with a new button in the bubble editor, that
the user can click to clear out all buttons on the screen apart
from the current bubble.
2023-06-12 01:33:40 -04:00
Tom Rothamel c3a2d4745d retain: When retain is in use, each bubble has its own location. 2023-06-11 00:36:05 -04:00
Kassy 6ce1cda92b Fix crash on Web2 because pydoc is not shipped 2023-06-10 23:40:45 +02:00
Kassy 3070a40fce Fix crash on Web2 because WebInput is not implemented 2023-06-10 23:39:58 +02:00
Kassy 0176e42268 Fix crash on Web2 because subprocess.Popen is not implemented 2023-06-10 23:39:34 +02:00
Tom Rothamel afb9729ecf retain: Initial implementation of retained dialogue.
This is intended for used with speech bubbles, but might be useful
in other place. It's a mode where each say statement shows a new
screen, until the screens are cleared by the (to be added)
clear statement.
2023-06-09 20:36:30 -04:00
Tom Rothamel d079dda223 Update piglatin translation. 2023-06-09 00:22:11 -04:00
Tom Rothamel 87b2291f99 Improved translation generation.
* Better filtering of braces, especially nested braces.
* Do not piglatin-ify numbers.
2023-06-09 00:22:11 -04:00
Tom Rothamel 6e7d650f51 doc: Match the fix branch. 2023-06-08 22:09:30 -04:00
Gouvernathor c2c094fbf6 Fix bad automatic comment translation
old ["']##[^\n]+?["']\n\s*(?:# Automatic translation\.\n\s*)?new ["']#?[^#]
updated gift for posterity (see d037830)
2023-06-08 20:56:59 +02:00
Gouvernathor 22cf8d3166 doc: tweaks 2023-06-08 17:28:15 +02:00
Tom Rothamel bb0b7f807f Bump version. 2023-06-08 01:50:27 -04:00
Tom Rothamel 08667dedf1 Re-generate the vc version in add.py.
So the correct version is used for releases.
2023-06-07 22:03:59 -04:00
Tom Rothamel cd5a9b2830 doc: Credits. 2023-06-07 20:57:56 -04:00
Tom Rothamel 4579dbab15 Clean up the fix-branch changelog. 2023-06-07 20:43:11 -04:00
Tom Rothamel 10a9521a19 docgen: Set the search z-index to 1. 2023-06-07 20:38:19 -04:00
Gouvernathor bcc0d211e1 Extend the system cursor preference to config.mouse_displayable (#4706)
* Make the system_cursor preference disable mouse_displayable

* doc: new "system_cursor" behavior

* changelog system_cursor
2023-06-07 20:37:48 -04:00
Tom Rothamel a33f891d65 docgen: Set the search z-index to 1. 2023-06-07 19:55:48 -04:00
Gouvernathor 9b1f23fe4d Extend the system cursor preference to config.mouse_displayable (#4706)
* Make the system_cursor preference disable mouse_displayable

* doc: new "system_cursor" behavior

* changelog system_cursor
2023-06-07 19:55:32 -04:00
Ren'Py Bot bb6ca17bc3 Merge branch 'fix' 2023-06-07 02:17:36 -04:00
Tom Rothamel 7e8ed2dcf7 doc: Update sponsors. 2023-06-07 02:07:15 -04:00
Tom Rothamel 3893bcbc7a doc: Credits. 2023-06-07 01:16:44 -04:00
Ren'Py Bot f33ab6b095 Merge branch 'fix' 2023-06-07 01:06:44 -04:00
Tom Rothamel b0b096bf16 audio: if_changed handles tight looping.
Subject to how if_changed works, as it does queue up a new
loop.

Fixes #4695.
2023-06-07 01:05:22 -04:00
Gouvernathor 7df26f34ed Fix mouse_move documentation (#4700)
* docstring spaces

* doc: fix inconsistencies about the mouse_move preference
2023-06-06 23:58:49 -04:00
Tom Rothamel 454ba1360d Ensure that scrollable bars have the sensitive style.
Fixes #4690.
2023-06-06 23:57:11 -04:00
Tom Rothamel 5116fdaa47 Check atl state for validity where it might have changed.
Fixes #4701.
2023-06-06 21:45:14 -04:00
Ren'Py Bot 26d4b1af50 Merge branch 'fix' 2023-06-06 04:30:56 -04:00
Tom Rothamel 9d1b8c0e29 atl: Run ATL transforms in the animation timebase.
This fixes #4696 while keeping #4634 and #4167 fixed.
2023-06-06 01:15:50 -04:00
Tom Rothamel e740a83764 doc: Changelog. 2023-06-05 23:25:24 -04:00
Ren'Py Bot 25e2dba5b3 Merge branch 'fix' 2023-06-05 04:30:56 -04:00
Gouvernathor b8c4565a38 Dereference utter_restart and move reload-related functions to the reload section (#4657)
doc: deref utter_restart and move reload-related functions
2023-06-05 00:40:03 -04:00
Tom Rothamel 36a2e32401 web: Fix audio end time.
It takes a duration, not the end time itself.

Fixes #4694.
2023-06-05 00:38:12 -04:00
Tom Rothamel b586355a8e Ensure that objects reachable from Context rollback.
Fixes #4687, and a class of potential related problems, by
auditing things that are reachable through Context.
2023-06-04 18:24:02 -04:00
Gouvernathor 1a375c525c Add a warning when creating new projects in renpy 7
not disabled, because it still makes sense for test purposes or to update default files
2023-06-04 11:45:22 +02:00
Ren'Py Bot dd1c162271 Merge branch 'fix' 2023-06-04 04:30:56 -04:00
Tom Rothamel 7171b21fb4 doc: That dropping doesn't respect the alpha channel.
Closes #4686.
2023-06-03 22:11:01 -04:00
Tom Rothamel 30aba15be2 Accept the vscode plugin style changes. 2023-06-03 22:10:25 -04:00
Tom Rothamel 007aa19291 live2d: Determine if _sustain is required after attribute_filter.
As it's possible attribute_filter will introduce a motion that
makes sustain pointless.

Fixes #4660.
2023-06-03 21:36:53 -04:00
Tom Rothamel 7e6560b766 live2d: _choose_attributes should enforce required attributes.
If it can't find all of the required attributes, then it should
not allow the displayable to be shown.

Fixes the first part of #4660.
2023-06-03 20:55:48 -04:00
Tom Rothamel dd2b26807d doc: Changelog e29fdf8cbf. 2023-06-02 23:29:53 -04:00
Ren'Py Bot e6d5b8eef6 Merge branch 'fix' 2023-06-02 23:28:42 -04:00
Tom Rothamel 206431c210 Add links to 8.1.1 and 7.6.1. 2023-06-02 23:22:46 -04:00
Tom Rothamel 61c9ebffa9 Propagate times to ATL transitions, but not other state.
This tries to fix #4634 without breaking #4167, by recognizing
when a transition has started and propagating the adjusted times
into it, but not the state.

This can probably fail, as events and choices won't be propagated,
but those should be rare in transitions, ideally.
2023-06-02 23:01:32 -04:00
Ren'Py Bot f79c052ace Merge branch 'fix' 2023-06-01 22:52:41 -04:00
Tom Rothamel e29fdf8cbf Prevent autoreloading while the git index lock is present.
Fixes #3689.
2023-06-01 22:42:50 -04:00
Moshibit 544cf07739 Fix Spanish tranlation (#4684)
* Update launcher.rpy

* Fix Spansih translation.rpy
2023-06-01 22:26:16 -04:00
Moshibit a88e2a3980 Fix Spanish tranlation (#4684)
* Update launcher.rpy

* Fix Spansih translation.rpy
2023-06-01 22:25:22 -04:00
Ren'Py Bot 1251ce7e36 Merge branch 'fix' 2023-06-01 04:30:56 -04:00
Gouvernathor 360dc4fdbb Make absolute a float again (#4680)
Multiple advantages over the wrapper-class implementation : lighter in memory, don't wrap methods that don't need too, don't spend time converting their parameters, avoid a two-version pickling and unpickling mechanism (with slots), shorter code with less warning silencing.
2023-06-01 00:31:00 -04:00
Tom Rothamel 3396feff33 Rewrite absolute to not inherit from float.
This replaces absolute with a class that contains a float, and
behaves like a float in most circumstances. However, when an
operation is performed on it that would create a float, an
absolute is returned instead.

This is meant to address #4666 and a class of potential issues
that could be similar to it, where absolutes that are operated
on could become a float, and cause layout issues.

I need to think if this is something that should got into the
fix branch, as it's a major change.
2023-06-01 00:31:00 -04:00
Tom Rothamel 7cf287c4f4 docgen: Fix the location of the searchbox.
Fixes #4682.
2023-05-31 23:51:08 -04:00
Tom Rothamel 732b98f7a2 Document that YUV444 is slow.
Per discussion in #4646.
2023-05-31 22:45:17 -04:00
Tom Rothamel 838ce5a82b Fix non-full playback of videos.
Fixes #4646.
2023-05-31 22:41:54 -04:00
Gouvernathor c7083584df Make absolute a float again (#4680)
Multiple advantages over the wrapper-class implementation : lighter in memory, don't wrap methods that don't need too, don't spend time converting their parameters, avoid a two-version pickling and unpickling mechanism (with slots), shorter code with less warning silencing.
2023-05-31 01:31:02 -04:00
Ren'Py Bot b6f1be507b Merge branch 'fix' 2023-05-30 04:30:56 -04:00
Tom Rothamel 690f249481 Rewrite absolute to not inherit from float.
This replaces absolute with a class that contains a float, and
behaves like a float in most circumstances. However, when an
operation is performed on it that would create a float, an
absolute is returned instead.

This is meant to address #4666 and a class of potential issues
that could be similar to it, where absolutes that are operated
on could become a float, and cause layout issues.

I need to think if this is something that should got into the
fix branch, as it's a major change.
2023-05-30 02:01:39 -04:00
midgethetree 13cd7d0ebc fix fonts linting (#4679)
Fixes an issue where fonts located in the fonts/ directory and referenced in .rpy files with just their filename and not the fonts/ prefix would be falsely claimed to be unloadable by the linter despite working just fine in-game. Also fixes the converse issue, where fonts located in images/ directory and referenced without the images/ prefix weren't caught by the linter despite the game crashing when actually attempting to load them.
2023-05-30 00:48:09 -04:00
midgethetree dfc29bb646 fix fonts linting (#4679)
Fixes an issue where fonts located in the fonts/ directory and referenced in .rpy files with just their filename and not the fonts/ prefix would be falsely claimed to be unloadable by the linter despite working just fine in-game. Also fixes the converse issue, where fonts located in images/ directory and referenced without the images/ prefix weren't caught by the linter despite the game crashing when actually attempting to load them.
2023-05-30 00:31:11 -04:00
Tom Rothamel a14b4c3ddc Avoid including the 311 bytecode in the launcher.
As it's not needed there.

Per #4677.
2023-05-29 21:57:16 -04:00
Ren'Py Bot d94c3ef043 Merge branch 'fix' 2023-05-29 12:27:46 -04:00
brainos233 917292b443 fix: launcher\game\tl\schinese\options.rpy (#4676) 2023-05-29 18:16:05 +02:00
Tom Rothamel e02ce6579f docgen: Fix a style issue. 2023-05-29 12:15:15 -04:00
brainos233 d8322a6db7 fix: launcher\game\tl\schinese\options.rpy (#4676) 2023-05-29 18:14:36 +02:00
Tom Rothamel 5201ff3e10 sl2: Better analyze imagemaps.
The issue was that:

    imagemap:
        if cond:
            idle "idle_true"
            hover "hover_true"
        else:
            idle "idle_false"
            hover "hover_false"

        hotspot (0, 0, 100, 100) action Jump("test")

Didn't depend on cond, which meant that the hotspot
would not change when the imagemap was updated.

Test: xagrim-imagemap.
2023-05-29 11:58:23 -04:00
Gouvernathor 64ac9c1a99 BOM and UTF-LF 2023-05-29 12:57:11 +02:00
zedraxlo ff426586b8 SChinese translation update (#4675) 2023-05-29 12:56:53 +02:00
Gouvernathor f3f703b426 BOM and UTF-LF 2023-05-29 12:53:55 +02:00
zedraxlo ac39001a61 SChinese translation update (#4675) 2023-05-29 12:40:58 +02:00
Ren'Py Bot cfd1721d71 Merge branch 'fix' 2023-05-29 04:30:56 -04:00
Tom Rothamel 0cd32aa9a4 (Mostly) revert changes to afm_enable preference handling.
This is a bit special, as it define if afm_enable is used or not.
Since this is baked in to older games, restore the previous values,
but let the default statement override them, which was the goal of
the previous commit.
2023-05-29 02:08:40 -04:00
Ren'Py Bot e33cc4c43c Merge branch 'fix' 2023-05-28 23:07:07 -04:00
Tom Rothamel 9c9c36a723 rapt: Document the key changes. 2023-05-28 23:06:41 -04:00
Morgan Willcock 3762c42604 doc: Fix interpolation example block (#4674)
Corrects the indentation so that the code is valid.

One of the affected lines had a typo ('thje' instead of 'the'), which
is now corrected.
2023-05-28 23:25:59 +02:00
Ren'Py Bot 389e882505 Merge branch 'fix' 2023-05-27 00:38:16 -04:00
Tom Rothamel 75832ccd22 Avoid having preference defaults by default.
The older config.default_.... variables could force a preference
to take on a value, even if the creator used default to set the
preference.

This changres a few of the defaults in preferences.py, and removes
the need for config.default_... variables.

Fixes #4667.
2023-05-26 22:13:45 -04:00
Ren'Py Bot fe2d76bdd3 Merge branch 'fix' 2023-05-25 01:40:53 -04:00
Tom Rothamel 26af404433 Fix typo in nosave list.
Fixes #4664.
2023-05-25 01:40:10 -04:00
Tom Rothamel 8209e61d75 Fix problem with non-resiable windows on macOS.
Apparently, when a window is not resizable on macOS, the MAXIMIZED
flag is always set. Since the window can't actually be maximized,
ignore it.

Fixes #4659.
2023-05-25 00:30:39 -04:00
Tom Rothamel 09ee1cb52f Deal with mac reporting fullscreen windows as maximized.
This can cause a problem when changing modes.

Per #4659.
2023-05-25 00:30:39 -04:00
Ren'Py Bot b152e0b00a Merge branch 'fix' 2023-05-23 13:34:03 -04:00
Gouvernathor 75d0f4dc64 Encode the save directory as bytes on py2 2023-05-23 13:33:57 -04:00
Ren'Py Bot df982c1b4c Merge branch 'fix' 2023-05-23 04:30:46 -04:00
Tom Rothamel bb526f6ae3 doc: Fix doc problem with ui.interact. 2023-05-23 01:51:00 -04:00
Gouvernathor 110e6340e4 doc: remove double variable entry
the second one, which was fixed a week ago (1436e3e), is slightly better phrased
2023-05-22 17:19:43 +02:00
Gouvernathor 166e81b2e5 Revert "doc: move reload-related functions to the dedicated section"
This reverts commit 078ffb9e5a.
2023-05-22 17:02:11 +02:00
Ren'Py Bot a851c97c85 Merge branch 'fix' 2023-05-22 10:51:36 -04:00
Moshibit 217d0e85f8 Update launcher.rpy 2023-05-22 10:51:23 -04:00
Moshibit 09a29a941c Update launcher.rpy 2023-05-22 10:43:06 -04:00
Gouvernathor 078ffb9e5a doc: move reload-related functions to the dedicated section 2023-05-22 16:34:23 +02:00
Ren'Py Bot f9233742a2 Merge branch 'fix' 2023-05-22 01:51:15 -04:00
Tom Rothamel a2adf917aa The window icon is an image.
Fixes #4651.
2023-05-22 01:51:15 -04:00
Gouvernathor 41d0b41518 actual translation 2023-05-22 01:51:15 -04:00
Gouvernathor aded4dd05e french translations 2023-05-22 01:51:15 -04:00
Tom Rothamel 412c56e76b The window icon is an image.
Fixes #4651.
2023-05-22 01:48:41 -04:00
Gouvernathor 15024f32a8 quicken PY3 case 2023-05-21 16:30:29 +02:00
Gouvernathor cdee6e388c actual translation 2023-05-21 16:27:29 +02:00
Gouvernathor 1a820b67a7 french translations 2023-05-21 15:50:29 +02:00
Tom Rothamel 8c21f14bf7 autotl: Better handling of lines beginning with ##. 2023-05-21 01:48:34 -04:00
Tom Rothamel 1660375bde autotl: The description of the nightly fix build. 2023-05-21 01:47:22 -04:00
Tom Rothamel c9ec07f566 Add infrastructure for single-string translations.
This is intended to allow important strings to be automatically
translated while we work on improving the quality of automatic
translations.
2023-05-21 01:47:02 -04:00
Tom Rothamel 19316303b7 Add strings describing the nightly branch. 2023-05-21 00:18:50 -04:00
Tom Rothamel e46d664aed Diagnose issues with a class no longer inheriting from object. 2023-05-20 23:31:49 -04:00
Tom Rothamel ccaf664e3c Allow error handling to deal with exceptions in rollback.
Previously, the exception would occur with the context stack
already altered. As the exception was handled, contexts could
be removed from the stack, leading to a case where there was
no context - which causes crashes.
2023-05-20 22:53:21 -04:00
Tom Rothamel 572ebcc3a8 Make sure Execution.__repr__ always produces a result. 2023-05-20 22:51:35 -04:00
Tom Rothamel 8f5c2526f0 Properly quote replacement text.
Fixes #4631.
2023-05-20 02:32:05 -04:00
Tom Rothamel d93745e2e1 Delete .pyo and .pyc files when reloading a module.
This can fix a problem on Python 2, where a .pyo file would be
loaded in preference to an updated .py file, even if the .py file
was created the first time around.
2023-05-19 23:27:50 -04:00
Tom Rothamel 4f8f3155ef Take the version out of the newly-generation dict. 2023-05-19 00:51:39 -04:00
Tom Rothamel deb4a2c9eb Merge pull request #4645 from brainos233/docs-build-packages
Docs: Fix missing "renpy" list in Packages example
2023-05-18 11:15:51 -04:00
Tom Rothamel 4d26440cbb Remove pyo and pyc files to make sure a reload occurrs. 2023-05-18 04:17:43 -04:00
Brainos cf98746660 Docs: Fix missing "renpy" list in Packages example 2023-05-18 15:47:29 +08:00
Ren'Py Bot 824828f5c8 Merge branch 'fix' 2023-05-17 02:25:34 -04:00
Tom Rothamel 59e427512c fix: Fix text tag issues with the Korean (and maybe Vietnamese) translations.
Fixes #4643.
2023-05-17 01:44:08 -04:00
Tom Rothamel 09c1a84169 Scry fixes.
- Return None of there is no current statement.
- Deal with a scry of None in character.
- Improve documentation.

Fixes #4640.
2023-05-17 01:29:18 -04:00
Tom Rothamel b254c23882 Include libydrogen in the source distribution.
Fixes #4638.
2023-05-17 01:23:01 -04:00
Tom Rothamel da7655642f Include libydrogen in the source distribution.
Fixes #4638.
2023-05-17 01:19:50 -04:00
Tom Rothamel 5c7efe99e6 Merge branch 'fix' 2023-05-17 00:58:53 -04:00
Tom Rothamel 17e743d346 Determine the version if vc_version.py does not exist.
This is likely to only happen if a git checkout exists. In that
case, we determine what branch we're on, and use that to
initialize the version information.
2023-05-17 00:54:34 -04:00
Tom Rothamel 2c898e4581 Merge branch 'fix' 2023-05-17 00:07:05 -04:00
Gouvernathor 1638a89023 Fix incorrect variable name
That was preventing renpy boot when vc_version is not present
Also, differenciate versions not yet named, "tbd", and versions not identified
2023-05-17 04:49:54 +02:00
Gouvernathor 1436e3e4f1 doc: role issues and involuntary comments 2023-05-17 04:10:16 +02:00
Gouvernathor d037830d38 Fix bad automatic comment translations
old ["']##[^\n]+?["']\n\s*(?:# Automatic translation\.\n\s*)?new ["'][^#]
(a gift to posterity)
The machine translate script should remove any prepending "## ", translate the rest, and then prepend it again to the result. Otherwise deepl thinks it's a word.
fixes #4633
2023-05-16 10:36:23 -04:00
Tom Rothamel d8cfb32514 distribute: Changes to support nightly builds.
* The --nightly flag to mark a version as nightly.
* The --print-version flag, to print the computed version.

This will allow distribute to supply version information to the
nightly build process.
2023-05-16 10:36:03 -04:00
Tom Rothamel adddcd6a11 distribute: Changes to support nightly builds.
* The --nightly flag to mark a version as nightly.
* The --print-version flag, to print the computed version.

This will allow distribute to supply version information to the
nightly build process.
2023-05-16 10:15:51 -04:00
Gouvernathor 8c511bcd72 Fix bad automatic comment translations
old ["']##[^\n]+?["']\n\s*(?:# Automatic translation\.\n\s*)?new ["'][^#]
(a gift to posterity)
The machine translate script should remove any prepending "## ", translate the rest, and then prepend it again to the result. Otherwise deepl thinks it's a word.
fixes #4633
2023-05-15 15:46:11 +02:00
Tom Rothamel 06acc1984a Use the runtime python to generate the version information. 2023-05-15 08:52:20 -04:00
Tom Rothamel 14c06dd2e4 Add py2 before py3.
Useful in the github case, to ensure Ren'Py 8 is uploaded last,
and hence is at the top of the list of downloads at github.
2023-05-15 02:40:13 -04:00
Tom Rothamel 516fceb2ab Store the version in vc_version, generate it from the branch. 2023-05-15 02:39:23 -04:00
Tom Rothamel 17b2be083a doc: Update sponsors. 2023-05-13 17:13:31 -04:00
Tom Rothamel 21caff9610 Update keywords. 2023-05-13 17:13:21 -04:00
Tom Rothamel 84db013177 doc: Credits. 2023-05-13 15:20:35 -04:00
Tom Rothamel 479c688851 doc: Polar coordinate changes. 2023-05-13 15:11:59 -04:00
Tom Rothamel 20593ac279 viewport: Allow draggable to become False during drag.
Fixes #4629.
2023-05-13 13:30:59 -04:00
Tom Rothamel 6639c4c162 Merge pull request #4576 from shawna-p/master
Allow None transition for ShowMenu
2023-05-13 13:30:04 -04:00
Tom Rothamel 61f9e2d1f7 Treat an empty at_list like no transform.
Fixes #4628.
2023-05-13 02:02:04 -04:00
Tom Rothamel d346e7a325 Remove more automatic translations of proper nouns. 2023-05-12 01:29:02 -04:00
Tom Rothamel b471addb84 Merge pull request #4617 from nattyan-tv/master
Translation of Japanese
2023-05-12 01:24:04 -04:00
Tom Rothamel a47121d6aa controller: Blocklist a non-working controller.
Fixes #4622.
2023-05-12 01:20:15 -04:00
Tom Rothamel 44eef26342 transform: Alignaround sets anchor.
This makes it behave more like it did in 8.0.3.
2023-05-12 01:13:24 -04:00
Tom Rothamel 5757e2eb72 transform: If a position is a float, it should remain a float.
This ensures that circling to a float position will continue to
cause xpos to be a float, which will help further positioning.
2023-05-12 01:13:24 -04:00
Tom Rothamel bce69d0fb6 atl: Add the anchorradius and anchorangle properties.
Having these makes revolution work much better, as it's no longer
necessary to try to derive them from angle and radius.
2023-05-12 01:13:24 -04:00
Erufailon4 80db4c307a Finnish translation fixes (#4623) 2023-05-11 18:43:39 +02:00
Tom Rothamel 238607d5a1 Allow radius to be a position again.
Looking at some examples in the field, it looks like people are
using radius as a position - so make it work, but improve the
semantics slightly so that the polar coordinates are actually circular.
2023-05-11 01:16:32 -04:00
Tom Rothamel 24a3346670 Remove the changes to polar coordinates, start over.
This removes the ability of radius to be given as a float, which
doesn't make a ton of sense. Is the radius measured compared to
width, height, or something else? Now it's back to being pixels,
which is was in 8.0.

This does make around work better when it is a float, using the
available area.

Polar coordinates now always produce absolutes for xpos and ypos,
allowing radius and around to be in different types.
2023-05-10 23:38:08 -04:00
NattyanTV cf40d10bc0 fix: Translate untranslated parts 2023-05-11 00:23:18 +09:00
NattyanTV 51bc9ed0ee change: changed to better wording 2023-05-11 00:06:27 +09:00
NattyanTV a3cade9a5a add: Japanese translation added 2023-05-10 23:56:26 +09:00
Tom Rothamel 5275ae114c Remove unnecessary calculation. 2023-05-10 00:07:21 -04:00
Tom Rothamel f537b09337 Document the translation changes. 2023-05-09 22:05:00 -04:00
Tom Rothamel 27d28db994 Fixes to alignaround and polar coordinates.
* Fix alignaround to only take floats, and rotate the floats
  properly.

* Make it clear that alignaround really only makes sense with
  (0.5, 0.5) as the argument, and that other values don't make
  sense.

* Make radius occur after the other linear interpolations in ATL,
  to be sure alignaround and around happen before it, which allows
  for correctness without a warning.

Fixes #4613.
2023-05-09 09:08:50 -04:00
Tom Rothamel daab75fb32 Remove debug prints. 2023-05-08 23:52:44 -04:00
Tom Rothamel ae243f44b3 tl: More translation updates. 2023-05-08 00:13:42 -04:00
Tom Rothamel fa7023c8ec tl: Revert more translations. 2023-05-07 23:51:01 -04:00
Gouvernathor cde6882601 Updating translations following minor edit
I won't do it every time.
Some translations were already good and only the english version was updated.
Some were skipped (see you in hell, finnish)
2023-05-08 05:01:47 +02:00
Gouvernathor f429fcb76d Update and fix some french translations 2023-05-08 04:38:21 +02:00
Tom Rothamel 814f93b620 Fix proofreading error. 2023-05-07 22:29:41 -04:00
Tom Rothamel 59508028dc Remove things that shouldn't be auto-translated. 2023-05-07 22:10:59 -04:00
Tom Rothamel 796030c8e5 tl: Un-mark directory names as translations. 2023-05-07 21:52:12 -04:00
Tom Rothamel 74477e0de6 tl: Fix incorrect translations of directory names.
Which shouldn't really be translated in the first place.
2023-05-07 19:39:33 -04:00
Tom Rothamel ccd2abc22b tl: Check in the automatic translation scripts. 2023-05-07 17:38:49 -04:00
Tom Rothamel 37ea587f61 tl: Automatically update the launcher's Ukrainian translation. 2023-05-07 17:32:42 -04:00
Tom Rothamel 29234e0945 tl: Automatically update the launcher's Turkish translation. 2023-05-07 17:25:16 -04:00
Tom Rothamel ba15b08bce tl: Automatically update the launcher's Simplifed Chinese translation. 2023-05-07 17:20:39 -04:00
Tom Rothamel ff1ba8a9f5 tl: Automatically update the launcher's Russian translation. 2023-05-07 17:18:23 -04:00
Tom Rothamel ece67a6ee4 tl: Automatically update the launcher's Portuguese translation. 2023-05-07 17:15:30 -04:00
Tom Rothamel 76dc673898 tl: Automatically update the launcher's Polish translation. 2023-05-07 17:09:45 -04:00
Tom Rothamel e9a12bdc32 tl: Automatically update the launcher's Korean translation. 2023-05-07 17:06:24 -04:00
Tom Rothamel 46d96dea71 tl: Automatically update the launcher's Japanese translation. 2023-05-07 17:01:59 -04:00
Tom Rothamel ff6bdefb7b tl: Automatically update the launcher's Italian translation. 2023-05-07 16:52:40 -04:00
Tom Rothamel b7fce0f30c tl: Automatically update the launcher's Indonesian translation. 2023-05-07 16:43:00 -04:00
Tom Rothamel 70cd64c067 tl: Automatically update the launcher's Greek translation. 2023-05-07 16:38:04 -04:00
Tom Rothamel 48d3e89bd9 tl: Automatically update the launcher's French translation. 2023-05-07 16:30:31 -04:00
Tom Rothamel 5b3dad9476 tl: Automatically update the launcher's German translation. 2023-05-07 16:28:10 -04:00
Tom Rothamel 9abf62cf65 tl: Automatically update the launcher's Finnish translation. 2023-05-07 16:23:09 -04:00
Tom Rothamel 4221cd1e85 live2d: Sort new attributes before older ones. 2023-05-06 19:18:01 -04:00
Tom Rothamel 8048386b4b Extend should have the same statement_name as what's being extended.
This prevents unexpected transitions.

Per #4605.
2023-05-06 18:20:02 -04:00
Tom Rothamel 1341285769 Turn extend from a function into an object.
This will let us declare properties and methods on it.
2023-05-06 17:46:02 -04:00
Tom Rothamel d8262b21c1 character: Set interact=False for the first of multiple displays. 2023-05-06 17:19:58 -04:00
Tom Rothamel 8b14b86702 Merge pull request #4611 from renpy/layeredimage-add
Document LayeredImage.add
2023-05-06 16:42:55 -04:00
Gouvernathor 6cc5ea6e5d doc: typo and preferred syntax 2023-05-06 19:21:48 +02:00
Gouvernathor 7572681097 Save some execution time
Summing those up for every kwarg is absurdly wasteful.
2023-05-06 19:21:03 +02:00
Gouvernathor 7c076fd49f Document LayeredImage.add 2023-05-06 19:16:44 +02:00
Gouvernathor ed471a56cb Comments and exception message format 2023-05-06 14:33:01 +02:00
Tom Rothamel 39f53e200a Merge pull request #4607 from renpy/doc-additive-warning
Remove warning about software rendererers
2023-05-05 23:33:38 -04:00
Tom Rothamel 19d387d3b0 gl2: Fullscreen cancels maximize. 2023-05-05 23:10:27 -04:00
Tom Rothamel bd3c36b3a7 audio: Only fadeout on game quit. 2023-05-05 23:10:27 -04:00
Gouvernathor 57830f35e0 Remove warning about software rendererers 2023-05-06 04:06:49 +02:00
Tom Rothamel 5f1c0590a4 Merge pull request #4604 from renpy/revertable-operators
Update revertable types according to Python's datamodel
2023-05-05 21:58:22 -04:00
Tom Rothamel ead6611e1d Fadeout, rather than quitting audio as the game starts to end. 2023-05-05 21:57:06 -04:00
Tom Rothamel 2d5ba5e840 Revert "audio: Fadeout for the default fadeout on game end."
This reverts commit 7917173b05.
2023-05-05 21:20:29 -04:00
Gouvernathor 0db8ef2b30 Revert changes to list methods
pun intended
2023-05-06 03:09:32 +02:00
Tom Rothamel 13bf13728a audio: More volume changes.
* Make the volume range 40 dB, rather than 60 dB, so more of the
  range is useful.

* When config.quadratic_volumes is enabled, used it everywhere.
2023-05-05 20:55:13 -04:00
Gouvernathor 1831bdaea0 Quicken list dunders
Exact typechecks are quicker than instance checks.

If it's a pure list, it needs to be converted.
If somehow it's a RevertableList, no need to trigger a O(n) copy.
If even more weirdly it's another subclass of list, there's magic in place and no need to account for that case (it's the creator's problem).
Finally, if it's NotImplemented, return it as-is.
2023-05-05 15:36:59 +02:00
Gouvernathor 48662e0be6 Update revertable types according to Python's datamodel 2023-05-05 15:33:05 +02:00
Tom Rothamel 7917173b05 audio: Fadeout for the default fadeout on game end.
This tries to make sure that a pop isn't the last thing the player
hears when Ren'Py ends.
2023-05-05 00:29:02 -04:00
Tom Rothamel f38b407bb7 audio: Reduce the fadeout range further.
With the last commit stopping the popping, fadeout can focus on
the effect itself, which according to Wikipedia tends to be done
in a 30-40dB range.
2023-05-05 00:09:19 -04:00
Tom Rothamel a48624f15e audio: Lowpass-filter volume changes.
This prevents "popping" when dragging the volume slider, and other
volume change events.
2023-05-04 23:57:12 -04:00
Tom Rothamel e08a5691f8 video: Do not fade out sprite movies. 2023-05-04 22:58:11 -04:00
Tom Rothamel e26d42fdee Merge pull request #4601 from Kassy2048/web_movie_fadeout
Implement fadeout for movies on Web.
2023-05-04 18:46:05 -04:00
Kassy e7ff113605 Implement fadeout for movies on Web. 2023-05-04 22:26:02 +02:00
Tom Rothamel ca3b98672f audio: Compute the secondary volume propery when linear_fades is true.
Fixes #4597.
2023-05-04 02:32:14 -04:00
Tom Rothamel ccce4ad081 Reduce the fadeout range to 42 dB.
It's a tradeoff between spending too much time in the low ends of the
range, when all but the loudest sounds will be inaudible, and having
so much sound at the end that there's a pop when the fadeout finishes.

~40dB seems to be a good compromise for all but the loudest headphone
volumes.

Per discussion in #4597.
2023-05-03 22:33:36 -04:00
Tom Rothamel 533299c9bf Merge pull request #4598 from renpy/PEP584
Make `|` methods return RevertableDict's.
2023-05-03 20:53:24 -04:00
Andy_kl 94cab603d8 Make | methods return RevertableDict's. 2023-05-04 04:46:47 +04:00
MigProPlayer 993e90277b Update Portuguese Translations (#4595)
ios - Fixed a broken string which was in Spanish and changed a duplicate string.
preferences - Fixed a typo which said "Open launcher" instead of "Open launcher project".
2023-05-03 19:40:19 +02:00
Tom Rothamel 67050eecc8 Merge pull request #4592 from mal/update-lint-layers
Use computed layer list in lint
2023-05-02 17:25:30 -04:00
Mal Graty fadba7ae56 Use computed layer list in lint 2023-05-02 19:03:22 +01:00
Tom Rothamel 512ae898dc Include thoughtbubble.png in builds. 2023-05-02 01:31:17 -04:00
Tom Rothamel 82fad4f4ff Merge pull request #4589 from qTich/fix/web-preload-cache-preference
typo on `web cache preload` toggle `Preference`
2023-05-01 12:27:40 -04:00
Tichq c3c90b9d43 typo on web cache preload toggle Preference 2023-05-01 19:09:45 +03:00
Tom Rothamel bdcba5cd6f doc: Try to improve keywords.py stability. 2023-05-01 00:28:57 -04:00
Tom Rothamel 8522ff0f7f rapt: Fix documentation for android.json update_keystores. 2023-04-30 22:23:20 -04:00
Tom Rothamel 4117176a0a Check in updated keywords. 2023-04-30 21:32:10 -04:00
Mal Graty 62136111e8 Update preference name in docs 2023-04-30 23:26:25 +01:00
Tom Rothamel 48cfb76607 Update translations. 2023-04-30 14:33:39 -04:00
Tom Rothamel f20ba5e633 bubble: Document the required changes. 2023-04-30 14:32:37 -04:00
Tom Rothamel a2719b9995 bubble: Add a thought bubble to the default game. 2023-04-30 14:19:12 -04:00
Tom Rothamel 9e4417729d Add omitted character. 2023-04-30 09:46:01 -04:00
Tom Rothamel 0f253c15c4 live2d: Add Live2D.blend_opacity.
This can be used in an update_function.
2023-04-29 23:15:26 -04:00
Tom Rothamel 224965c0cc live2d: Add support for x86_64 Android. 2023-04-29 22:44:02 -04:00
Tom Rothamel be2be8c557 live2d: Support multiply and screen.
Fixes #3729.
2023-04-29 22:41:29 -04:00
Tom Rothamel 594bb9d8e0 live2d: Load the csmGetDrawableMultiplyColors and csmGetDrawableScreenColors functions. 2023-04-29 20:28:01 -04:00
Tom Rothamel 31aa071f4a Add deprecations to incompatible changes. 2023-04-29 00:25:40 -04:00
shawna-p 9c5eb15024 Shorten & clean up code 2023-04-28 14:40:11 -04:00
Tom Rothamel 4d40a29350 Merge pull request #4586 from renpy/doc-jsondb
JSONDB doc
2023-04-28 13:07:13 -04:00
Gouvernathor 82c05454be Rephrase and add link 2023-04-28 18:56:44 +02:00
Tom Rothamel 6eefafd5a9 Allow radius to be a position.
As documented, but not implemented. Fixes #4574.
2023-04-28 00:45:00 -04:00
Tom Rothamel d07fe424eb Prevent radius and angle from conflicting.
This is necessary, as it's basically impossible to use these two
properties without them conflicting.
2023-04-28 00:45:00 -04:00
shawna-p 9e7109af81 Rename to prevent name conflict 2023-04-27 12:14:15 -04:00
shawna-p 3162455e14 Check for transition in call method 2023-04-27 12:11:19 -04:00
Tom Rothamel 2f19fe65bd Merge pull request #4582 from renpy/confirm-action
Allow layout.yesno_screen and Confirm to take lists of actions
2023-04-26 23:40:14 -04:00
Gouvernathor d795f03b13 doc interlinks 2023-04-27 05:29:17 +02:00
Gouvernathor 1e5355e727 whitespace 2023-04-27 04:55:49 +02:00
Tom Rothamel c5571e6637 Add config.linear_fades.
This is is a vairable that returns the pre-8.1 fade behavior,
which was linear in amplitude, and so would perceptually barely
fader and then fade out all at once.

Fixes #4580.
2023-04-26 22:55:47 -04:00
Gouvernathor 64aab8a62e use renpy.run instead of calling 2023-04-27 04:55:35 +02:00
Tom Rothamel 774991431e Avoid generating translations for empty extends.
Per #4581.
2023-04-26 19:22:58 -04:00
Andy_kl a687f5ec13 Use collections.deque in walk_memory.
This makes the function way, way faster. Seconds instead of hour to walk 1GB of RAM.
2023-04-27 01:23:37 +04:00
Tom Rothamel 59c9ce1901 Add GetMixer().
This is an action that can display a mixer, either as a value
or in DB.
2023-04-26 00:51:16 -04:00
Tom Rothamel 1edb2c8cde Better document what SVG is supported. 2023-04-25 21:49:36 -04:00
shawna-p bb568d4b5f Merge branch 'renpy:master' into master 2023-04-25 15:09:33 -04:00
shawna-p 24d991ae77 Allow the None transition for ShowMenu 2023-04-25 15:08:55 -04:00
Tom Rothamel 78ba95403f Prevent audio from starting during a global pause.
* Prevent non-looping audio entirely.
* Avoid starting music until unpaused

Fixes #4568.
2023-04-25 01:31:02 -04:00
Tom Rothamel bb798c2db9 Make all hyperlinks active immediately when text is not slow.
Fixes #4569.
2023-04-25 00:17:21 -04:00
Tom Rothamel 9cfbd3a75d Merge pull request #4573 from Kassy2048/web_sync_fix
Fix sync download for web
2023-04-24 18:53:32 -04:00
Kassy 302d4fe1c1 Fix sync download for web 2023-04-24 19:41:17 +02:00
Tom Rothamel 6b0332a566 Merge pull request #4564 from renpy/bubbledoc
Tweak and fix bubble doc
2023-04-24 11:02:11 -04:00
Tom Rothamel e3e78a7524 Always apply the default parameters to a transition.
Fixes #4551.
2023-04-24 09:28:54 -04:00
Gouvernathor c547bf3623 Fix wrong config name, quadratic_volumeS 2023-04-24 15:00:36 +02:00
Tom Rothamel 42bc1ccb79 Fix zzoom.
* Fix the implementation.
* Fix the documentation.

Fixes #4556.
2023-04-24 00:59:41 -04:00
Tom Rothamel 4613ee1fa4 doc: Fix the name of config.quadradic_volumes.
Fixes #4554.
2023-04-23 23:08:29 -04:00
Tom Rothamel 8279f4aad0 Do not create a new scope when going from predicting -> updating.
The scope itself will be shared with constant displayables, so
clear it rather than replacing it with a new object.

Fixes #4563.
2023-04-23 22:55:41 -04:00
Gouvernathor dd00c19708 Update bubble doc 2023-04-23 23:46:57 +02:00
Gouvernathor 510b19018d Update and fix french translations 2023-04-23 22:23:05 +02:00
Moshibit 1784db4663 Update Spanish translation (#4560)
* Update developer.rpy

* Update screens.rpy
2023-04-23 22:00:26 +02:00
Morgan Willcock bfcbb95156 Fix _ren.py format changelog example (#4557) 2023-04-23 16:40:56 +02:00
Tom Rothamel 37f7a397e3 Merge pull request #4553 from Kassy2048/prefix_movie
Apply path prefixes when loading movies for web
2023-04-23 00:40:23 -04:00
Kassy 830b122a1f Apply path prefixes when loading movies for web 2023-04-23 02:31:18 +02:00
Tom Rothamel f43208cce6 doc: Changelog fixes. 2023-04-22 17:31:51 -04:00
Tom Rothamel 8cb2379b25 Merge pull request #4550 from renpy/split-prop-pure
Mark renpy.split_properties as pure
2023-04-22 15:17:48 -04:00
Gouvernathor 811b135690 Mark renpy.split_properties as pure 2023-04-22 21:10:10 +02:00
Tom Rothamel f6460ed448 doc: More credits. 2023-04-22 14:42:46 -04:00
Tom Rothamel 617bd43afb doc: Update sponsor list. 2023-04-22 14:38:38 -04:00
Tom Rothamel 2c9c8205ee doc: Credits. 2023-04-22 14:38:38 -04:00
Gouvernathor 9c2c8c9535 doc: bad include 2023-04-22 20:04:19 +02:00
Tom Rothamel ece477836c doc: Fixes and edits. 2023-04-22 13:04:26 -04:00
Tom Rothamel eb47fc4500 Limit how far we try to scry extend.
Fixes #4548.
2023-04-21 22:52:21 -04:00
Tom Rothamel f322828baf Fix translations. 2023-04-21 21:50:27 -04:00
Tom Rothamel 20f1a76637 doc: Licenses. 2023-04-21 21:43:55 -04:00
Tom Rothamel 9cdd8a2654 doc: Changelog. 2023-04-21 21:24:56 -04:00
Gouvernathor 160fdd8489 Update tutorial translations from the launcher translations 2023-04-22 01:26:51 +02:00
Gouvernathor 48b1aeb5f3 Remove wrongly translatable string 2023-04-22 01:23:11 +02:00
Gouvernathor 54ec403f5b Cleanup french translation files
Using the brand new orphan translation flagging
2023-04-22 01:22:19 +02:00
Gouvernathor b7213f4b78 Forgotten in last 2023-04-22 01:20:29 +02:00
Gouvernathor 211da69d08 Update text_align -> textalign in translations
follow-up to a1f6312
2023-04-22 00:56:24 +02:00
Tom Rothamel c15f4c3487 doc: JSONDB. 2023-04-21 00:51:59 -04:00
Tom Rothamel 417aee0bff doc: Sync actions. 2023-04-21 00:38:56 -04:00
Tom Rothamel 9c130cf149 Doc and changelog areapicker.
And improve the screen language documentation for drag and
draggroup.
2023-04-21 00:29:14 -04:00
Tom Rothamel 49e7e9182e Merge pull request #4543 from renpy/reachme
Reachability tweaks
2023-04-20 20:30:45 -04:00
Tom Rothamel 27fd71815e live2d: Create a second copy of each mesh to use as a mask.
This is because the first copy was getting its shaders changed,
which would cause a problem when that copy was being used as a
mask.

This would cause a problem when a live2d layer both used a mask
and was used as a mask.

Per https://lemmasoft.renai.us/forums/viewtopic.php?f=8&t=66455
2023-04-20 01:00:23 -04:00
Gouvernathor 9db0ec1683 Simplify CDS linting
Use elif instead of if
Merge two loops
Make builtin statements use the weakly_reachable set instead of a separate mechanism
Avoid a set update if the original is not read afterwards
2023-04-19 16:17:01 +02:00
Gouvernathor 1b62055d69 Better document how the reachable method works 2023-04-19 16:10:13 +02:00
Tom Rothamel 3deca06054 Allow statements to mark themselves as weakly reachable.
These are statements that are not reported as unreachable, but
will only pass reachability to the next statement if the statement
is actually reachable.
2023-04-19 01:09:30 -04:00
Tom Rothamel 9a250ccdc5 Add reachable as a method on user statements.
If given, this lets a statement register a function that
determines if it is reachable, and what is reachable
from the statement.
2023-04-18 23:23:39 -04:00
Tom Rothamel fb803ea05c Force a new checkpoint to begin when checkpointing is suspended.
Per #4534.
2023-04-17 23:29:15 -04:00
Tom Rothamel 04d9ea3016 itch: Make the channels configurable.
Fixes #4481.
2023-04-17 01:33:38 -04:00
Tom Rothamel 1f26d829d1 doc: Reload is disabled when autoreload is active. 2023-04-16 21:39:47 -04:00
Tom Rothamel d9b30cf8a1 Merge pull request #4537 from renpy/replay-action
Replay action's lockedness
2023-04-15 23:00:20 -04:00
Tom Rothamel ebcc0ce7dc Believe _choose_attributes when it chooses attributes.
Even if it does odd things, like removing a required attribute
from the list of attributes.

Fixes #4505.
2023-04-15 15:10:04 -04:00
Gouvernathor 8a2c6d4dc4 Better behavior for the locked parameter 2023-04-15 19:21:49 +02:00
Gouvernathor 5c400fdbc9 Accurate doc entry 2023-04-15 19:14:22 +02:00
Tom Rothamel 34a011e79f Python string prefixes must immediately precede delimiters.
Fixes #4535
2023-04-15 12:33:12 -04:00
Gouvernathor 7545b87364 Fix rst comment block
yes, sphinx is *that* annoying
2023-04-15 17:26:16 +02:00
Tom Rothamel 72f0535fb3 Prevent greedy rollbacks from passing through suspend_checkpointing.
Fixes #4534.
2023-04-15 01:28:30 -04:00
Tom Rothamel e776a4c3f5 doc: SVG. 2023-04-14 01:50:22 -04:00
Tom Rothamel e439957896 Document last change. 2023-04-14 01:04:10 -04:00
Tom Rothamel dffbe3521c Allow triple quoted strings to be used in simple expressions.
For example:

text """\
line 1
line 2
line 3"""

is now allowed.
2023-04-13 23:34:55 -04:00
Tom Rothamel 1fad559548 doc: Speech bubble dialogue. 2023-04-13 00:28:46 -04:00
Tom Rothamel e6fec6ea50 doc: Credit. 2023-04-12 01:10:24 -04:00
Tom Rothamel a427a6611b gl2: Restore the window position after a reload. 2023-04-12 00:36:39 -04:00
Tom Rothamel 9932e4e892 Allow Character's kind argument to be a namspace.
The main reason for this is to allow Character(kind=bubble), which
looks way nicer that Character(kind=bubble.character) to me.
2023-04-11 23:42:56 -04:00
Tom Rothamel e702a15785 bubble: Add shift+B as a way of toggling the bubble editor. 2023-04-11 23:40:30 -04:00
Tom Rothamel cf7910687f bubble: Add four speech bubbles by default. 2023-04-11 23:25:39 -04:00
Tom Rothamel 2a6c719678 Clean language dependent data when jumping back after a load.
Fixes #4525.
2023-04-10 22:28:52 -04:00
Tom Rothamel 9f08129084 Fix steam.activate_overlay_to_web_page.
Fixes #4526.
2023-04-10 01:12:38 -04:00
Tom Rothamel 40e81d44a4 bubble: Support expanding beyond what's given.
This will provide room for tails.
2023-04-09 00:39:19 -04:00
Tom Rothamel 40ac61bf23 Merge pull request #4523 from awaken1ng/fix-compat
Fix compat using unknown config option.
2023-04-08 23:24:11 -04:00
Tom Rothamel 16372810e5 Reset the video to the beginning when it is shown again.
As opposed to when it's hidden.

Per the discussion at #4508.
2023-04-08 21:33:43 -04:00
awakening f2a76c5872 Fix compat using unknown config option.
Fixes `Exception: config.timer_blocks_pause is not a known configuration variable.`

7d4610d13d introduces `modal_blocks_timer`
which is probably what was meant to be used here.
2023-04-08 19:44:49 +07:00
Tom Rothamel 3350ffa713 gl2: Add functions to allow a user to create a mesh from Python.
Per request via discord.
2023-04-07 23:27:18 -04:00
Tom Rothamel bf0634f738 Disable skip mode in the launcher. 2023-04-07 14:28:44 -04:00
Tom Rothamel 13f9b3d04c Remove pointless maintenance of ctx.updating. 2023-04-07 14:27:05 -04:00
Tom Rothamel 1d96e7a16f Fix Scroll action.
Fixes #4520.
2023-04-07 00:18:08 -04:00
Tom Rothamel df524315a8 sl2: Do not reuse the scope when showing a 'used' screen.
This fixes the default statement when in a used screen that's
passed different parameters than it was predicted with.

Fixes #4519.
2023-04-06 22:51:13 -04:00
Tom Rothamel 7c082f0fb5 Fixes to applying 3d state properties.
Recent changes made many of the properties incorrectly conditional
on each other, which prevented the properties from working
correctly.

Fixes #4518.
2023-04-06 21:33:29 -04:00
Tom Rothamel 6d637237ff doc: Extend the gl1 timeline slightly further. 2023-04-06 20:26:13 -04:00
Tom Rothamel 2f6556052a doc: Correct version. 2023-04-06 20:09:24 -04:00
Tom Rothamel 9a6448dd94 doc: Pending deprecations.
* Mention the planned removal of gl1 and Python 2/Ren'Py 7.
2023-04-06 19:05:24 -04:00
Tom Rothamel 54f62730a2 Fit the error that occurs if a style statement has two is clauses.
Per #4510

Co-authored-by: <Ayowel@users.noreply.github.com>
2023-04-06 00:31:33 -04:00
Tom Rothamel ca7c78dbcd Only reset a channel if a hide happens.
Fixes #4508.
2023-04-05 22:29:01 -04:00
Moshibit 16fb5ffb85 Update Spanish translation (#4511)
* Update gui.rpy

* Update launcher.rpy

* Update screens.rpy
2023-04-05 18:38:42 +02:00
Gouvernathor aea1129812 Update translations 2023-04-05 06:59:54 +02:00
Tom Rothamel 46320ddcd4 Fix the type of paths on mac.
Fixes #4509.
2023-04-05 00:48:56 -04:00
Tom Rothamel a65cdd6f0e Fix the Android JDK link.
Add a bit of abstraction so it'll only need to be restranslated
once, and route it through renpy.org so the links can't break.
2023-04-05 00:48:56 -04:00
Gouvernathor 9d275e9349 doc: forgotten markup 2023-04-04 20:01:15 +02:00
Gouvernathor 534fb0f9f6 Fix typo in docstring 2023-04-04 19:58:17 +02:00
Gouvernathor 005be375fc french translations 2023-04-04 17:50:28 +02:00
Tom Rothamel b2d5dd87fa Ignore ATL transition arguments when comparing contexts.
The new_widget argument will be different each time the
interaction restarts - but it generally represents the same
thing, and so it makes sense to consider it equal for the
purposes of this test.

Fixes #4167.
2023-04-03 00:08:28 -04:00
Tom Rothamel a6b99364aa Propagate ATL state between transitions when an interaction restarts.
This partially addresses #4167.
2023-04-02 23:38:59 -04:00
Tom Rothamel e5c2e7f88c doc: Last change. 2023-04-02 23:35:45 -04:00
Tom Rothamel 907ba19bea tts: Make it respect the voice volume mixer.
At least more or less, as it generally doesn't go through Ren'Py.
But on all platforms where voice is supported, the amplitude of
voice is controlled by the voice mixer

This also makes the voice volume mixer available on the
accessiiblity screen, so the volume can be adjusted even
if the game doesn't otherwise use voice.

Fixes #4161.
2023-04-02 20:56:15 -04:00
Tom Rothamel 74d8c5c398 gl2: Handle the interaction of maximized, fullscreen, and window size/location.
The maximized flag is persisted, so that if the game is shut down
when maximized, it will start up again maximized.

The size of the game is only stored when non maximized or fullscreen,
so only sensible game sizes are persisten.

Switching from fullscreen to maximized or vice versa goes through
the windowed state.

The first time the window is in the windowed state, it's moved to the
center of the screen - rather than being undefined when the game
starts fullscreen.

Fixes #4155.
2023-04-02 19:06:07 -04:00
Tom Rothamel f65c1a1af3 Merge pull request #4497 from mal/fix-style-optimisation
Let Transforms benefit from style optimisation
2023-04-02 00:14:01 -04:00
Mal Graty b740e723a3 Let Transforms benefit from style optimisation
In ef6173de4f we added the facility for
alt text to be passed through Transforms to allow its use in SL2. A side
effect of this was to always pass alt text, meaning that the underlying
Displayable's properties could never be empty (they'd contain alt=None).
This has been preventing Transforms benefiting from the optimised code
path in Displayable that avoids creating a new anonymous style.

In order to address this, we now filter out arguments passed to
Transform that ought to be propagated up to the parent class, sending
them only when defined, thus re-enabling the optimisation for the vast
majority of Transform instances.
2023-04-02 04:47:41 +01:00
Tom Rothamel 5bdb9b5459 Name Ren'Py 8.1 and Ren'Py 7.6. 2023-04-01 02:03:57 -04:00
Tom Rothamel d70d6b8f26 Merge pull request #4494 from renpy/comments-in-shader-variables
Allow comments in shader variables lists
2023-03-31 22:45:35 -04:00
Gouvernathor 44cdc09745 Allow comments in shader variables lists 2023-03-30 22:56:44 +02:00
Tom Rothamel 1291c3cb26 Slightly adjust controller deadbands (based on my experience). 2023-03-30 02:11:08 -04:00
Tom Rothamel 493edfbb82 Add renpy.load_rgba, loading a rgba string into a surface.
This is intended to support image data being created elsewhere,
loaded in via ctypes, and then passed into Ren'Py.
2023-03-29 23:27:25 -04:00
Tom Rothamel ec6277588d Allow the Ren'Py audio system to be extended. 2023-03-29 23:27:25 -04:00
Tom Rothamel 3f057f159a Make the audio buffer size configurable. 2023-03-29 23:27:25 -04:00
Tom Rothamel 420e167d41 Merge pull request #4491 from renpy/fix-__-munging
Fix name-munging
2023-03-29 12:27:16 -04:00
Gouvernathor 2828f3b517 Fix name-munging 2023-03-29 18:03:53 +02:00
Tom Rothamel c378247a39 Add config.display_start_callbacks.
This is intended to be used to let DLLS gain access to GL functios
before a frame is renderer.
2023-03-29 01:57:15 -04:00
Tom Rothamel 9ab745db85 Increase the contrast of the light GUI.
Fixes #4470.
2023-03-29 01:43:44 -04:00
Tom Rothamel f92022308d Disable ui-less IME.
Which shows the candidate list for languages that require one -
not sure why this isn't the default.

Fixes #4474.
2023-03-28 02:44:59 -04:00
Tom Rothamel 4f0e882d97 Set empty properties on a texture.
Fixes #4488.
2023-03-28 02:04:34 -04:00
Tom Rothamel 46f62133d1 Add movie groups.
When a movie in a group is starting, and doesn't have the first
frame, it checks to see if another movie in the group is playing.
If so, it takes the frame from the other movie - preventing flashes
of transparency when switching movies.

Fixes #4475.
2023-03-28 01:46:15 -04:00
Tom Rothamel 77889607f3 gl2: Use a 1px framebuffer for is_pixel_opaque.
So there's less to clear.
2023-03-27 01:39:24 -04:00
Tom Rothamel f92dcd8068 doc: Anonymous transforms on the first sl line. 2023-03-26 10:20:57 -04:00
Tom Rothamel 815a3999b4 Compat for c492f2f8e6. 2023-03-26 10:16:52 -04:00
Tom Rothamel 11c9b8f34b Revert "Consider all variables in the #4095 fix, not just locals."
This reverts commit d2b5f2fdc9.

This doesn't seem like the right fix, as it has the potential to
cause memory leaks. I'm going to compat the old behavior, and
require it to be explicit.
2023-03-26 09:59:41 -04:00
Tom Rothamel cfe892405e sl2: Allow at transform outside of a block.
This makes for a more compact syntax.
2023-03-26 09:58:52 -04:00
Tom Rothamel d2b5f2fdc9 Consider all variables in the #4095 fix, not just locals. 2023-03-26 03:42:41 -04:00
Tom Rothamel 8c4387bae4 Merge pull request #4486 from KiloOscarSix/master
Fixed incorrect behaviour for ToggleDict.get_sensitive()
2023-03-26 03:05:22 -04:00
Tom Rothamel bfb3955e9e Merge pull request #4483 from Kassy2048/touch_alternate_fix
Cancel long press wait when user stops touching the screen
2023-03-26 03:01:24 -04:00
Oscar Six 1498f625df Fixed incorrect behaviour for ToggleDict.get_sensitive() when using lists 2023-03-26 05:25:39 +01:00
Kassy 9523222b37 Only check for mouseup when long press is being detected 2023-03-26 01:39:27 +01:00
Kassy 9c197abca3 Cancel long press wait when user stops touching the screen 2023-03-26 00:26:00 +01:00
Tom Rothamel d3dbc40749 accelerator: Cythionify, add typing information, and document. 2023-03-25 12:25:12 -04:00
Tom Rothamel 6362ad8550 quaternion: Add cython types. 2023-03-25 10:56:07 -04:00
Tom Rothamel 04a73d2ad4 Remove old theme. 2023-03-25 10:30:54 -04:00
Tom Rothamel ddfcf67486 Make the total texture size a Python object.
(Preventing a crash if we get the calculation wrong.)
2023-03-25 10:29:49 -04:00
Tom Rothamel 8f5a32deeb Merge pull request #4477 from kyouryuukunn/fix_README
add README sphinx_rtd_theme sphinx_rtd_dark_mode
2023-03-25 10:24:55 -04:00
kyouryuukunn 5155c08f54 add README sphinx_rtd_theme sphinx_rtd_dark_mode 2023-03-25 19:09:57 +09:00
Tom Rothamel 7511c3ff42 Move quaternion code into its own pyx file.
This is a combination of it seeming like something meaty enough
that it might grow into more operations, and this taking 5s
for clang to compile.
2023-03-25 02:50:54 -04:00
Tom Rothamel e4ff027499 accelerator: Break up transform_render fully.
Break the ridiculously long transform_render function into a
number of smaller methods in a class, and use fields on that
class to store data used by multiple methods.

This is mostly to speed up compilation time by reducing how much
work clang has to do to compile things.

This is a work in progress - it's not well tested, and typing
information is missing or commented out. But it's enough to
render basic displayables.
2023-03-25 02:32:27 -04:00
Tom Rothamel 1cccdbdaaf Create a class to render transforms.
Basically, to store the variables that had been updated by
the crazy-big transform_render function.
2023-03-24 23:15:15 -04:00
Tom Rothamel 1a100a0006 accelerator: Begin to break up transform_render. 2023-03-24 03:04:19 -04:00
Tom Rothamel 2863bb2d88 live2d: Sort the properties to ensure a stable order. 2023-03-24 01:00:58 -04:00
Tom Rothamel 14f653f0a5 Attributes can't be required and optional.
Fixes #4466.
2023-03-24 01:00:58 -04:00
Gouvernathor 93fe44fa94 Fix wrong SetField use
It does take a fourth parameter, kind, which is private and only used for error messages when the target is not found/writable. It takes a string, so this code doesn't make sense.
My mistake, btw.
2023-03-23 19:40:15 +01:00
Tom Rothamel e73c750ef1 launcher: Make selected text more obvious.
Fixes #4471.
2023-03-22 23:00:05 -04:00
Tom Rothamel b929fa838c Apply pixel_perfect to renders rather than models.
This means that all the models that are underneath the render will be
adjusted together, so that relative blits all wind up in the same
place.

This is mostly the case for text, where things like centering, slow
text, and outlines could cause text to appear in different locations, and then be
drawn separately - only to jump into place when slow text finished and
the Text was drawn as a whole.

Fixes #4103.
2023-03-22 22:53:38 -04:00
Mal Graty d25bd3c01f Fix orientation interpolation
Ended up with an erroneous indent after the recent point_to changes.
2023-03-22 14:46:35 +00:00
Gouvernathor 1a9870ad5a doc: fix wrong role 2023-03-22 14:26:49 +01:00
Tom Rothamel fbbc8e0e34 Replace point_to True with point_to Camera()
The latter seems like a more readable syntax to me, as True doesn't
really feel associated with the camera. (And this provides a place
to store the layer.)
2023-03-22 02:45:01 -04:00
Tom Rothamel cc77af4d9f Move the point_to logic from ATL to Transform.
This is for two reasons:

* It allows point_to True to work in Transforms, at least if we figure
  out a way to refresh Transforms when the camera changes.

* It gets things right if the camera changes position while not
  interpolating point_to.
2023-03-22 02:11:01 -04:00
Tom Rothamel 65ff148898 Merge pull request #4449 from kyouryuukunn/allow_poi_tag_and_camera3
allow point_to to take camera
2023-03-21 22:01:01 -04:00
Tom Rothamel 24ad7c9a01 Merge pull request #4464 from renpy/fix-im-always-doc
Python equivalent of layeredimage's Always layer
2023-03-21 21:58:41 -04:00
Gouvernathor 6ce6a877a5 doc: Python equivalent of layeredimage's Always layer 2023-03-21 20:30:19 +01:00
Tom Rothamel 65bceeddba End ongoing transitions after rollback.
Fixes #4105.
2023-03-21 02:19:05 -04:00
Tom Rothamel 77cb945b9f On Android and iOS, log the Ren'Py version to stdout. 2023-03-20 22:26:50 -04:00
Tom Rothamel eab3d2dab4 Fix how None interacts with the pressed mouse state. 2023-03-20 20:17:59 -04:00
kyouryuukunn 4e3d66b975 remove tag from point_to 2023-03-20 17:36:24 +09:00
Tom Rothamel a192a352e1 sl2: Allow both 'at' and 'at transform' to be given to the same statement.
Fixes #4455.
2023-03-19 23:55:17 -04:00
kyouryuukunn c4e9a64b1e simplify codes around poi 2023-03-20 12:31:09 +09:00
Tom Rothamel 533cbe10e3 gamepad: Process more than one analog axis motion per frame.
Fixes #4178, more or less. This certainly makes the controller more
responsive, though perhaps not as good as desktop.

This also gains a bit of performance by reducing how far the
controller needs to deflect, and introdces hysteresis to
prevent spurious controller events.
2023-03-19 15:44:59 -04:00
Tom Rothamel c492f2f8e6 atl: Only compare contexts based on used variables.
This is useful in screens, where a transform might have a context
contains many variables that are not used by the transform. The
transform shouldn't restart when an irrelevant variable is
changed.

Fixes #4095.
2023-03-19 14:20:38 -04:00
Tom Rothamel 9249c6ffd4 sl2, atl: Compile ATL transforms in screens.
These transforms weren't being compiled before the game started.
2023-03-19 14:20:38 -04:00
kyouryuukunn 98609fe72f remove 2-tuple format from point_to 2023-03-19 13:14:50 +09:00
kyouryuukunn 03bf276e15 fix 2023-03-19 12:44:50 +09:00
Tom Rothamel d52fa74ffd Merge pull request #4454 from valery-iwanofu/input_multiline
Multiline support for input
2023-03-18 12:00:13 -04:00
valery.iwanofu 15d2e037fe Multiline support for input 2023-03-18 21:09:57 +07:00
Tom Rothamel 2da6f8cab0 Avoid cache.get keeping the surface in memory when returning a texture. 2023-03-18 01:08:18 -04:00
Tom Rothamel 8c331b336e gl2: More accurate accounting of texture memory.
This adds a 1.34x multiplier to textures that have mipmaps associated
with them, and only indicates that a texture is consuming memory when
it's been transferred to the GPU.
2023-03-18 00:54:37 -04:00
Tom Rothamel 8e90d2f6ab Add a 1.34x multiplier to account for mipmapping.
Increase the default image cache size to match. This won't actually
increase the amount of memory used by the image cache, just
makes the setting match the memory being used.
2023-03-17 22:27:32 -04:00
kyouryuukunn 01c9e137e0 consider camera anchor when calculating point_to camera 2023-03-17 23:01:30 +09:00
kyouryuukunn 47418aa92d allow point_to to take "tag" or camera 2023-03-17 14:35:16 +09:00
Tom Rothamel c998b456a1 Merge pull request #4447 from renpy/point-to
Rename poi to point_to
2023-03-16 18:46:07 -04:00
Gouvernathor bb34b38432 Update renpy/display/accelerator.pyx
Co-authored-by: Mal Graty <mal.graty@googlemail.com>
2023-03-16 12:50:55 +01:00
Tom Rothamel ca1871863b Only close fds if stdout/stderr/stdin are not being used.
Fixes #4445.
2023-03-16 01:17:42 -04:00
Gouvernathor 9475a0f4b8 Better phrased error message 2023-03-16 05:26:07 +01:00
Gouvernathor 606a196e52 Rename poi to point_to (and simplify code) 2023-03-16 05:18:27 +01:00
Gouvernathor bcfdb73715 Simplify and optimize some code 2023-03-16 05:07:10 +01:00
Tom Rothamel f8673861aa Go back to the default colorspace, but with the full JPEG range.
Per #4263.
2023-03-15 22:56:07 -04:00
Tom Rothamel 1947db8acd Merge pull request #4444 from mal/improve-savedump
Improve savedump
2023-03-15 22:10:55 -04:00
Tom Rothamel 260b8f5f8d Merge pull request #4443 from mal/fix-tint-matrix
Fix TintMatrix to respect alpha
2023-03-15 21:25:17 -04:00
Mal Graty e5f58fe935 savedump: Add function support 2023-03-15 18:38:32 +00:00
Mal Graty cfee63b880 savedump: Keep pickle protocol in-sync 2023-03-15 18:21:58 +00:00
Mal Graty ee817a32f4 savedump: Write warning into cache
Previously it would never have been used.
2023-03-15 17:45:49 +00:00
Mal Graty 8039704b0d savedump: Improve representation of singletons 2023-03-15 17:45:11 +00:00
Mal Graty c0ff662d60 matrixcolor: Fix TintMatrix to respect alpha
Per the documentation, the alpha shouldn't ever have been impacted.

This change instead treats the alpha in the supplied RGBA value as the
tint opacity rather than applying the tint formula to the alpha channel.
The result is the ability to use a colour value of #FF000080 to apply
a 50%-red tint to the target.
2023-03-15 17:23:05 +00:00
Tom Rothamel bfd6f2c9a8 Clear a deferred side image if a say statement runs.
Fixes #4438.
2023-03-15 02:27:27 -04:00
Tom Rothamel faa9155c88 More work on #4263.
Fundamentally, the problem is that ffmpeg's yuv->rgb conversion is
inaccurate, unless it's given flags that cause a ~12x slowdown -
SWS_ACCURATE_RND or SWS_ERROR_DIFFUSION.

That's not tolerable, so we do enable SWS_FULL_CHR_H_INT and
SWS_FULL_CHR_H_INP, which seem to improve things somewhat, without
slowing down conversion by much.

We now also default to the ITU 709 colorspace, which is the default
for HD video.
2023-03-14 23:18:15 -04:00
Tom Rothamel 444d002304 Revert "ffmedia: Convert to YUV444, then RGB."
This reverts commit a516bda700.

This conversion was too slow for practical use.
2023-03-14 23:13:32 -04:00
Tom Rothamel 2f56256a82 doc: Renpy.redraw is documented in cdd.rst. 2023-03-14 18:48:04 -04:00
Tom Rothamel 16cba5ef11 Remove debug print. 2023-03-14 01:29:46 -04:00
Tom Rothamel 53b9879a7a Limit the size of the icon to 1024x1024.
A 2048x2048 icon causes an X11 crash.
2023-03-14 00:37:11 -04:00
Tom Rothamel a628b2dba3 Document that being redrawn cancels redraw. 2023-03-13 23:51:21 -04:00
Tom Rothamel e45a3b18ae Separate angle and radius in ATL.
This allows angle and radius to be computed in parallel.

Fixes #4118.
2023-03-13 22:05:02 -04:00
Tom Rothamel a3b8f75a8d Avoid reverting the slast serial number.
This prevents slast nodes from getting the same serial number
after a shift+R reload.
2023-03-13 00:10:57 -04:00
Tom Rothamel a516bda700 ffmedia: Convert to YUV444, then RGB.
This works around some issues, reported in #4263, where going
from YUV420 to RGB directly produces artifacts. The two-step
conversion process eliminates these artifacts.
2023-03-12 18:29:34 -04:00
Tom Rothamel 44e23a9665 Use bilinear interpolation when resampling video.
This should only kick in when resampling movies that are
chroma subsampled, as the luma should always be full size.

Fixes #4263
2023-03-12 00:02:19 -05:00
Tom Rothamel 45e5535e89 Allow greedy rollback to the statement after renpy.block_rollback.
Previously, it woudn't proceed past the next checkpoint after
renpy.block_rollback, which could be several statements away.

Fixes #4138.
2023-03-11 23:08:11 -05:00
Gouvernathor 652a06c1a8 doc: remove obsolete name-munging in f-strings warning 2023-03-12 02:31:12 +01:00
Tom Rothamel e48cd58b2c Add config.file_slotname_callback and config.autosave_prefix_callback.
The former allows a game to customize the mapping from page and name
(used by the File actions) to slot (used by the save functions).

The latter lets the names of the autosaves Ren'Py generates be
customized to match.

Fixes #4067.
2023-03-11 20:27:03 -05:00
Tom Rothamel 8f2c27979a doc: Changelog f-string variable munging. 2023-03-11 19:21:21 -05:00
Tom Rothamel 0d7e5ec9e5 Munge variables in f-strings beginning with __.
As per the rest of Ren'Py. Rather than parsing f-strings ourselves,
this is done as part of the Python compiler.

Fixes #4084.
2023-03-11 18:14:11 -05:00
Tom Rothamel d89c89f368 Munge a _ren.py file the same as the .rpy file it replaces. 2023-03-11 17:44:01 -05:00
Tom Rothamel ec48202e27 Use equality when comparing InputValues.
This is to match the way equality is used in sl2ast to avoid
updating the displayables.

This could be wrong if two displayables use the same (or equal)
InputValues, but that's likely a rare situation.

Fixes #4042.
2023-03-11 16:45:50 -05:00
Tom Rothamel 245576331b Duplicate the control argument of AlphaDissolve.
So that the transform that's being used doesn't run.

Fixes #4435.
2023-03-10 22:31:18 -05:00
Tom Rothamel d426c80761 doc: Fix typo. 2023-03-10 09:14:10 -05:00
Tom Rothamel 303dadf377 Drag improvements.
* Apply displayable before calling per_interact, fixing set_child.
* In the examples, show the use of add rather than child, as the
  style property is for specialized use.

Fixes #4432
2023-03-09 23:55:58 -05:00
Tom Rothamel f50be5712d Merge pull request #4434 from via-my/master
Logical mistake
2023-03-09 20:56:59 -05:00
LaUwUrence ea76473e81 Logical mistake 2023-03-10 00:32:46 +04:00
Tom Rothamel 6662238338 Merge pull request #4428 from Kassy2048/webloader_voice
Remove useless double iteration
2023-03-09 00:14:32 -05:00
Tom Rothamel c33f5c4d3d Force the browser out of fullscreen on input.
Fixes #4429.
2023-03-08 19:14:29 -05:00
Kassy 54fb3d9be8 Remove useless double iteration 2023-03-08 13:50:26 +01:00
Tom Rothamel 5c0f86c19e Update Android strings. 2023-03-08 02:28:58 -05:00
Gouvernathor 1e5c227909 Say statement equivalents tweaks and refactor (#4294)
* doc: tweak and warn about say statement equivalents

* doc: move things around about say statement equivalents

Drain the part about it from the dialogue page
Add a link from there to the statement equivalents page
Add the warning about skipping seen dialogue
Incorporate other explanations, examples and the dialogue window management equivalents

* doc: add more advice about use of the character store

* Remove out-of-place explanation

* Clarify, reorganize, readd interact info with more

* Move the interact override hierarchy around

but leave the interact being passed automatically in the call in the statement equivalents page

* More information about say_arguments_callback

* Add example for say_arguments_callback

fixes #4319
2023-03-08 02:16:48 -05:00
Tom Rothamel 6c8996207b Remove an isinstance check in per_interact().
By moving it into the Layer displayable, we can save the call.
2023-03-08 00:50:02 -05:00
Tom Rothamel cd8b496876 Visit the image child of a Frame.
Fixes #4005.
2023-03-07 23:05:17 -05:00
Tom Rothamel 2379d75173 py2: Default subprocess.Popen's close_fds to True.
This matches the behavior change in Python 3.

Fixes #4425.
2023-03-07 20:31:13 -05:00
Tom Rothamel 2147242d91 doc: Copyedit documentation for poi, orientation, and {x,y,z}rotate. 2023-03-07 01:26:46 -05:00
kyouryuukunn 3a06f5e7c6 add poi, orientation and x,y,z rotate (#3609) 2023-03-06 22:07:22 -05:00
Gouvernathor 7d000076ed Layeredimage documentation (#4415)
* Add an example of the last advice

* Add an example for auto groups

following feedback

* Integrate info about "poses"

* Fix markup mistake

* Better document Condition and document ConditionGroup
2023-03-06 21:19:58 -05:00
Gouvernathor e0df6d9b0b docgen: Don't get inherited docstrings for subclasses 2023-03-06 02:24:17 -05:00
Tom Rothamel 2a860ca1c4 per-sample: Documentation. 2023-03-06 02:08:35 -05:00
Tom Rothamel d8326fdb36 per-sample: Rename config.fade_music to config.fadeout_audio, and set it.
It's a more accurate name, as the variable isn't limited to music,
but works with all audio.

It's set to 0.016, the duration of one frame, which seems about right
and also minimizes popping sounds when an audio file ends.
2023-03-06 02:08:35 -05:00
Tom Rothamel 8ebeebe7ea per-sample: Enqueue audio immediately, if possible.
This helps ensure that when a short fadeout ends, the next audio
file is available to be played.
2023-03-06 02:08:35 -05:00
Tom Rothamel 328b056410 per-sample: Prevent clicking noises.
There were two causes for these. The first was that if a sound
was queued tight, the fadeout would finish, and both playing and
queued sounds would be removed - meaning nothing would play
until the next time periodic ran. Fadeout now dequeues the
queued sound if the fadeout would finish.

The second was a mistake that looked at the wrong portion of the
stream buffer, with the resulting errors often sounding like
clicks.
2023-03-06 02:08:35 -05:00
Tom Rothamel eb89a9bafb Use a default fadeout of 1ms when stopping or fading music.
This mitigates a high-frequency click that happens when stopping
a sound too fast.

Fixes #3934.
2023-03-06 02:08:35 -05:00
Tom Rothamel a8351b86c2 per-sample: Implement constant power panning.
This uses sine and cosine to keep the power of the sample constant
as it's moved from ear to ear.
2023-03-06 02:08:35 -05:00
Tom Rothamel c78484dfb3 per-sample: Use a slightly different power unit.
This avoids multiplying and dividing.
2023-03-06 02:08:35 -05:00
Tom Rothamel 255fd01f1b per-sample: Implement volumes.
This implements all four volumes that can be applied to a stream -
mixer, relative_volume, secondary_volume, and fade.

The interpolated volumes (secondary and fade) are now interpolated
using power, rather than magnitude, which leads to perceptually
linear interpolation.

There is a bit of a performance enhancement here - instead of
using decibels as our power units, we use a base-2 power unit
that can be calculated faster.
2023-03-06 02:08:35 -05:00
Tom Rothamel ea706a8071 per-sample: Start work on per-sample mixing.
This is a change to audio mixing that will cause all mixing
calculations to be done on a per-sample basis, rather than
trying to perform mixing on blocks of samples at once.

This will fix issues caused by very short fadeouts, and
enable the move to power-based fading.
2023-03-06 02:08:35 -05:00
Gouvernathor ee4d982bd0 doc: fix wrong bullet-list markup
you were right to warn me, Tom
2023-03-05 15:08:20 +01:00
Tom Rothamel 0e3630e602 Make children of a screen reachable.
This ensures that the displayables in a screen are reachable
via rollback.

Fixes #3907.
2023-03-04 19:14:31 -05:00
Tom Rothamel a4a8fa95ee Allow an object to define what's save and what's reachable differently.
This is mostly intended for screens, where displayables might have
to participate in rollback, but aren't saved.
2023-03-04 18:14:52 -05:00
Tom Rothamel 759b17f195 Remove debug print. 2023-03-04 15:03:12 -05:00
Tom Rothamel db123458a3 doc: Make it clearer that define is for constants.
Fixes #4389.
2023-03-04 14:31:53 -05:00
Tom Rothamel 063092875b doc: The translate None changes in previous commit. 2023-03-04 14:28:43 -05:00
Tom Rothamel 7591092518 Deal with translate None statements.
These statements used to be recommended, by they're error prone
and now deprecated, and the replacement (say-with-id) has been
available for a long time.

Now, there are deferred warnings for translate None and for
duplicate ids, as well as some infrastructure for enabling
developer mode in python early blocks.

Fixes #4407. Fixes #4406. Relevant to #4243.
2023-03-04 14:12:58 -05:00
Tom Rothamel 87d598604e pylance: Ignore ecdsa-based type issues. 2023-03-04 12:34:00 -05:00
Tom Rothamel 4f4516f3fc pylance: Ignore a few more type errors. 2023-03-04 10:53:24 -05:00
Tom Rothamel 1f91895624 Filter a spurious message when building for Android.
Per #4413.
2023-03-03 23:41:52 -05:00
Tom Rothamel f019785797 rapt: Remove spurious warning and delay. 2023-03-03 22:50:27 -05:00
Tom Rothamel d2b25deec4 pylance: Type fixes for pressed mouse cursors. 2023-03-02 23:38:36 -05:00
Gouvernathor 0a04eadc55 Doc tweaks - variables in screens, and CDS (#4385)
* doc: explain the different kinds of variables in screens

* doc: tweaks and better explanations in cds

* doc: Add a warning about overriding the default statement

* Clarify that passing None to Return does not work

"must not" could be understood as "doesn't need to", now hopefully it's more clear.
2023-03-02 20:16:24 -05:00
Gouvernathor 91300cdc0e Rewrite the layeredimage page (#4404) 2023-03-02 20:15:24 -05:00
Gouvernathor 151acc6959 Fix docstring for renpy.music.set_pan (#4411)
doc: fic docstring for renpy.music.set_pan
2023-03-02 20:14:12 -05:00
Gouvernathor d598d39520 Remove mentions of ScreenDisplayable from the documentation (#4412)
Remove ScreenDisplayable from the documentation

the returned object should not be implied to be a Displayable nor usable as one
2023-03-02 20:13:58 -05:00
Tom Rothamel bb2b1bc23a Prepend extend-predicted text with {done}.
This hides it from tts, fixes #4410.
2023-03-02 20:12:25 -05:00
Tom Rothamel 6f76c83421 Defer when extend test is applied.
Fixes #4408.
2023-03-01 23:07:37 -05:00
Tom Rothamel bbdff96b49 Predict the extend statment.
This scrys for extend text, and appends it to the text being
shown before layout happens. This then lets the text layout
code take that text into account when determining line breaking
and word placement.

Fixes #3963.
2023-03-01 00:49:24 -05:00
Tom Rothamel c621ec4865 Use the scry system to add extend text that will always be shown.
This is intended to support the solution to #3963.
2023-02-28 22:13:45 -05:00
Tom Rothamel d75a4950cb Avoid stopping a movie channel that doesn't exist.
This is likely due to a movie that was defined in an old version
of the game not existing anymore.

Fixes #4402.
2023-02-27 21:03:22 -05:00
Tom Rothamel 49bdc8819f text: Position text using ints, rather than shorts.
Saving a few bytes isn't worth dealing with overflow issues
that seem to be actually happening.

Fixes #4031.
2023-02-27 01:26:35 -05:00
Tom Rothamel 68e9e02bf8 text: Ensure conversions are in range.
Per #4031.
2023-02-27 00:46:14 -05:00
Tom Rothamel d702a4f62e Add namespace/field support to VariableValue and VariableInputValue.
Fixes #3611.
2023-02-26 19:07:55 -05:00
Tom Rothamel 236d836274 Prevent overflow error.
This can't be absolutely correct, as the underlying problem is
too much text, but should work around the crash caused in #4031.
2023-02-26 18:35:53 -05:00
Tom Rothamel ecf89db683 Avoid resetting the caps and numlock keyboardm modifiers. 2023-02-26 17:28:32 -05:00
Mal Graty 18e54353fe Fix same typo in documented keymap
Pairs with 2ec1e32681.
2023-02-26 16:39:31 +00:00
Tom Rothamel bd8ffe068d Merge pull request #4401 from renpy/doc-monologue-none
Doc and changelog monologue none
2023-02-26 11:35:44 -05:00
Mal Graty 2ec1e32681 Fix typo in new keymap 2023-02-26 16:21:19 +00:00
Gouvernathor 77c342b6ab Changelog rpy-monologue-none 2023-02-26 14:30:52 +01:00
Gouvernathor 69a7b58756 Document rpy-monologue-none 2023-02-26 14:22:45 +01:00
Tom Rothamel 1c9b12c69e Merge pull request #4277 from altskop/new_cursor_types
Support for new cursor types
2023-02-25 19:31:00 -05:00
Tom Rothamel 60bac24065 Merge branch 'master' into new_cursor_types 2023-02-25 19:09:03 -05:00
Tom Rothamel 73a5efcb7c Merge pull request #4398 from lanodan/pep440-version
renpy: Make version PEP440-compatible
2023-02-25 19:05:04 -05:00
Haelwenn (lanodan) Monnier 19cf6b57f6 renpy: Make version PEP440-compatible
Starting with 67.2.0 setuptools enforces PEP440 compliance.
2023-02-25 21:47:14 +01:00
Tom Rothamel 65ee166afb pylance: More type annotations. 2023-02-25 00:24:04 -05:00
Tom Rothamel 3fe4f6ac8f text: Only trigger slow_done when events are available.
Fixes #4392.

This was caused by Text's slow_done callback being triggered when
text was being rendered in the old-side of a transitions. Because
the slow_done callback was running in th new context, the context
was aborting.

This moves running of slow_done into the event handler. Event handling
isn't done on the old-side of transitions, and so the problem does not
trigger.
2023-02-25 00:21:52 -05:00
Tom Rothamel 9be196163c Merge pull request #4313 from renpy/rpy-mononlogue-none
Implement `rpy monologue none`
2023-02-24 22:26:05 -05:00
Tom Rothamel 4574a50590 nw: Delay for both voice and self-voice in self-voice mode.
So that self-voice doesn't cancel voice.
2023-02-23 23:57:16 -05:00
Tom Rothamel a57ac97e10 Rename a Layer's raw_child to untransformed_layer.
That prevents it from interfering with other things being named
raw_child, while still not requiring hasattr and getting rid of
type warnings.

Fixes #4391.
2023-02-23 22:35:44 -05:00
Tom Rothamel 4fb8316903 Revert "pylance: Address more type warnings."
This reverts commit 9f96f132e7.
2023-02-23 22:09:24 -05:00
Tom Rothamel 0b424a8221 Revert "Hotfix 9f96f13"
This reverts commit 4326981a4d.
2023-02-23 22:08:20 -05:00
Gouvernathor 367f32bd06 Other fix for 9f96f13 and #4391 2023-02-23 23:09:41 +01:00
Tom Rothamel 214833b1ec Merge pull request #4393 from renpy/fix-4391
Hotfix 9f96f13
2023-02-23 16:50:16 -05:00
Gouvernathor 4326981a4d Hotfix 9f96f13 2023-02-23 22:01:36 +01:00
Tom Rothamel 9f96f132e7 pylance: Address more type warnings. 2023-02-23 01:25:21 -05:00
Tom Rothamel 51e89cb7bd pylance: Fix more typing problems.
Especially in webaudio.
2023-02-23 01:05:20 -05:00
Tom Rothamel 8a7fc84f96 pylance: Eliminate type errors.
These changes aren't expected to change the behavior of Ren'Py.
2023-02-23 00:29:29 -05:00
Tom Rothamel 0165b94e0e Merge pull request #4386 from shawna-p/master
Fix inertial viewport dragging
2023-02-22 22:41:13 -05:00
Tom Rothamel f1190f7187 persistent: Fix issue that became obvious in the last review. 2023-02-22 22:22:35 -05:00
Tom Rothamel 7cc434691a Merge pull request #4388 from renpy/simplen-persistent
Simplify and quicken code in persistent.py
2023-02-22 22:17:51 -05:00
Tom Rothamel d54c29e2b7 Ensure that both the screen name and tag are available to renpy.showing.
And that the information is properly maintained.

Per #4384.
2023-02-22 22:09:00 -05:00
Tom Rothamel 17c9c6f62c Make {nw} wait for self-voicing to complete.
Per #4387, and trying to make sure that the self-voicing text
completes before advance happens.
2023-02-22 20:59:55 -05:00
Gouvernathor 2e8c59b94a Simplify and quicken code in persistent.py 2023-02-23 01:52:03 +01:00
shawna-p f968c5016b Fix inertial viewport dragging 2023-02-22 14:06:28 -05:00
Tom Rothamel b3406bc9ae oversample: Try to ensure divisions are exact.
Which means we can always do a blit rather than a subpixel blit,
even if bounds are computed.
2023-02-21 23:46:45 -05:00
Tom Rothamel 5a0ca315bf Merge pull request #4083 from renpy/fix-oversample-offset
Fix subsurface offset when oversampling
2023-02-21 23:00:52 -05:00
Tom Rothamel 57a1a9ece6 Merge pull request #4357 from renpy/mipmap-transitions
Document mipmap specifically in transition parameters
2023-02-21 22:55:05 -05:00
Tom Rothamel 85a21e93e3 Merge pull request #4382 from renpy/clear-all-focuses
Enable ClearFocus and renpy.clear_capture_focus to clear all focuses at once
2023-02-21 18:09:21 -05:00
Gouvernathor a559f10792 Enable ClearFocus and renpy.clear_capture_focus to clear all 2023-02-21 18:40:46 +01:00
Tom Rothamel 4e4dc33843 Merge pull request #4359 from Tey/video-warning-fix
Only show warning message when playing a video
2023-02-21 01:34:31 -05:00
Tom Rothamel 51985b8633 doc: Fix the types of xsize and ysize.
Fixes #4373.
2023-02-21 01:32:24 -05:00
Tom Rothamel a0f4ed2ca6 Enable the selected_insensitive state.
And pass insensitive events to transforms.

Fixes #4338.
2023-02-21 01:28:44 -05:00
Tom Rothamel fd3f9102dc Minor changes to #4363.
Use a sentinel value rather than False.
2023-02-20 21:46:33 -05:00
Tom Rothamel 0c03ca25b5 Add a better example of a CTC screen. 2023-02-20 21:34:41 -05:00
Tom Rothamel 1c49408810 Merge pull request #4363 from Kassy2048/audio_wait_web
Wait for audio files to be downloaded before queuing them (web)
2023-02-20 21:14:04 -05:00
Gouvernathor b1cace6a24 doc: fix last 2023-02-21 02:07:18 +01:00
Tom Rothamel f4fd9156c0 Merge pull request #4376 from renpy/config-example
Upgrade example of config variable definition
2023-02-20 20:05:32 -05:00
Tom Rothamel 85f9d77c9d Merge pull request #4379 from renpy/dynamic-kwargs
simplify renpy.dynamic calls
2023-02-20 20:05:05 -05:00
Gouvernathor 6d92653229 simplify renpy.dynamic calls 2023-02-21 00:57:56 +01:00
Gouvernathor e69967fc94 doc: Upgrade example of config variable definition 2023-02-20 19:12:03 +01:00
Tom Rothamel 4fc96ee3ba Resolve bad merge. 2023-02-19 15:13:57 -05:00
Tom Rothamel 646bc8b398 Merge pull request #4369 from renpy/object-init
Fix classes signatures in the documentation (again)
2023-02-19 14:59:06 -05:00
Tom Rothamel a1302ecb3b Merge branch 'master' into object-init 2023-02-19 14:59:00 -05:00
Tom Rothamel ff2302f542 Merge pull request #4368 from renpy/lf
LF everywhere
2023-02-19 14:58:09 -05:00
Tom Rothamel 2bd1c71fd8 Merge pull request #4370 from renpy/doc-4316
Document #4316
2023-02-19 14:57:24 -05:00
Gouvernathor 9c3957a567 doc: changelog slcontinue and slbreak 2023-02-19 17:49:17 +01:00
Gouvernathor 9df7c047e4 doc: slcontinue and slbreak 2023-02-19 17:46:41 +01:00
Gouvernathor 4a53152c96 doc: fix 3746367 2023-02-19 16:00:45 +01:00
Gouvernathor e9be0244ca back to LF 2023-02-19 15:15:48 +01:00
Gouvernathor ff5bb28fe6 docgen: pop the prepending "self" better
args.replace(tuple(args.parameters.values())[1:]) would have been shorter, but would require two memory copies
this should be equivalent
2023-02-19 15:05:26 +01:00
Gouvernathor 89618e957f docgen: ban object.__init__'s signature 2023-02-19 15:03:34 +01:00
Gouvernathor aa9432948f docgen: simplify the issue with revobj's init 2023-02-19 15:02:58 +01:00
Gouvernathor 34c12fd310 doc: typo 2023-02-19 14:17:22 +01:00
Tom Rothamel b4ce3ccf9b Add directory to renpy.open_file and renpy.loadable. 2023-02-19 01:06:18 -05:00
Tom Rothamel a433009de8 Merge pull request #4360 from qTich/typo-images-prefix
fix: typo in common
2023-02-18 23:33:27 -05:00
Tom Rothamel b87b673e0f doc: Better documentation as to how ctc="fixed" works. 2023-02-18 20:32:59 -05:00
Tom Rothamel eff081741a Fix the default modal value for renpy.pause. 2023-02-18 20:22:48 -05:00
Tom Rothamel 6667c50ce4 doc: Deprioritize FLAC in the movie audio codec list. 2023-02-18 20:22:25 -05:00
Tom Rothamel 3ff388c5ed Doc: The addition of AV1. 2023-02-18 19:19:00 -05:00
Tom Rothamel b0ded80c22 doc: Fix improperly documented args. 2023-02-18 18:49:27 -05:00
Tom Rothamel c97c4871a6 Some compatibility for the keymap changes.
Fixes #4362 by preventing problems in released games, and documenting
this in the log.
2023-02-18 01:09:08 -05:00
Tom Rothamel 8c179a88a4 Check for changed language when rolling back.
Fixes #4351.

This also cleares the roll-forward log if the language has changed,
to stop roll-forwards into lines that haven't been shown.
2023-02-17 16:58:01 -05:00
Kassy 384b70a301 Wait for voice file to be downloaded before queuing it
If prediction failed, it is still worth it to play the voice file
late than not at all.
2023-02-17 20:23:02 +01:00
Kassy ba903152a0 Wait for audio file to be downloaded before queuing it
Fix #4113
2023-02-17 20:20:58 +01:00
Tom Rothamel 8668e3c986 Fix NVL-mode paged roll-forward.
By keeping all the roll-forward info, even past the first
checkpoint.

Per #4352.
2023-02-17 00:41:12 -05:00
Tom Rothamel 7039ec5d34 rt: When selecting the project, select int the launcher. 2023-02-16 23:35:14 -05:00
Tom Rothamel 02c1e46cbb launcher: Add a command to select the project. 2023-02-16 23:02:09 -05:00
Tichq d1a91a85e4 fix: 3a9db89382 2023-02-17 01:40:49 +03:00
Gouvernathor 5781e3b4f4 doc: document mipmap as its own thing in transition parameters 2023-02-15 23:36:58 +01:00
Tom Rothamel d6a72cfef3 Use the controller instance_id (not index) to remove controllers.
Fixes #4354.
2023-02-15 02:54:10 -05:00
Tom Rothamel bb791f4a9e Prefer explicity given images to ones found by name.
The thinking is that renpy.show's with argument should always
be the image that is show - it doesn't make sense for a named
image to override it.

Per #4353.
2023-02-15 02:30:22 -05:00
Teyut 2c2d08e5f1 Only show warning message when playing a video 2023-02-15 04:37:34 +01:00
Tom Rothamel 8a55b45cc9 _ren.py: Integrate with navigation.
This is mostly just making sure _ren.py files are considered
to be script files, and not filtered out.

Fixes #3920.
2023-02-14 02:13:20 -05:00
Tom Rothamel 26689f992b Strip BOM from the start of example lines. 2023-02-13 23:59:49 -05:00
Tom Rothamel 80b3e8236e Standardize on LF line endings. 2023-02-13 23:50:51 -05:00
Tom Rothamel a1f631285f Rename text_align to textalign (#4305)
Textalign renaming
2023-02-13 23:48:08 -05:00
Tom Rothamel 3a9db89382 Fix compat. 2023-02-13 23:38:46 -05:00
Teyut deae896fec Cutscene and loop for web (#4324)
* Draw video frames on canvas directly for cutscenes

This replaces the features of "00webvideo.rpy" and adds a way to detect
if autoplay is blocked for Movie() as well (with workarounds).

* Let video loop be handled by the browser

* Check for audio or video playback support

A warning message is shown when audio or video playback is not supported.
Video playback requires OpenGL 2 which should be guaranteed by WebGL v1,
but Ren'Py falls back to OpenGL 1 in some exotic configurations (like a
remote X11 server).

* Remove test condition

* Use wasm to decode audio files when needed without disabling video support

Video channels are marked asap in the webaudio module so it is possible to
know which audio function to call for that channel when audio decoding is not
possible by the browser (i.e., for Safari).

* Add details about video support on Web platform

* Remove useless check
2023-02-13 23:34:38 -05:00
Gouvernathor 70892cdf1d Modernize the inspect module and fix subclasses of RevObject not overriding __init__ (#4348)
* docgen: Modernize signature-reading

Our object's __init__ has a bogus (*args, **kwargs) signature which is actually (), subclasses not overriding it should get a () documented sig
The inspect.getargspec and inspect.formatargspec functions are deprecated in favor of inspect.signature

* Better fix for classes not redefining __init__

Probably faster at execution (although who cares) and does not rely on undocumented identity check
2023-02-13 23:32:06 -05:00
Tom Rothamel b6d51b7b0b Search for audio in audio, fonts in fonts/
And images in images/

Fixes #2077.
2023-02-13 22:31:22 -05:00
Galo223344 b3611b04cd Include an example of a proper usage of time_warp in the docs of ImageDissolve (#4326)
Include an example of a proper usage of time_warp in ImageDissolve

Even though time_warp is mentioned three times in the transition classes document, it's never shown how to actually use it. Since the idea of using the _warper module is not intuitive, and it's mentioned only once at the beginning of the section, I thought it would be best to at least include it in one of the examples.
2023-02-13 19:11:43 -05:00
Gouvernathor beebbf86af Doc misc (tweaks and fixes) (#4349)
* document Function's arguments the usual way

* document that Style's fields are write-only

* rephrase beginning of styles

* Warn about not using default

* typo: misdefined var
2023-02-13 19:11:28 -05:00
Tom Rothamel 9ac23face8 The current screen shouldn't be a HIDE or OLD screen.
There are various actions and values that access displayables
in the current screen. Some of these might be run (for example,
BarValue.get_adjustment()) in a hiding or old(-state-of-transition)
screen.

Almost certainly, those values and actions want the displayables
that are present in the original screen, not the copy, and so
the value is redirected.

Fixes #3998.
2023-02-12 15:59:08 -05:00
Gouvernathor 4e416ffebb Lint orphan translations (#4314) 2023-02-12 01:29:51 -05:00
Tom Rothamel 3e6afe04bb rapt: Update Android documentation to match the latest changes. 2023-02-12 01:27:50 -05:00
Tom Rothamel c96aac25c4 rapt: Update the launcher to match recent changes.
* Key generation is now per-process, and is a different step
  from installing the SDK.
* .android.json is now android.json.
2023-02-12 01:12:39 -05:00
Tom Rothamel 4d6bd0e14e steam: Do not initialize if the dlls do not exist.
Fixes #4344.
2023-02-11 13:29:40 -05:00
Tom Rothamel f7b6001771 py3: Fix old-style backtick repr.
Turns `expr` into repr(expr).
2023-02-11 03:05:14 -05:00
Tom Rothamel 06aff37241 py3: Fix old-style raises.
Transforms a raise of Type, expression into Type(expression).
2023-02-11 02:51:56 -05:00
Tom Rothamel d14bb49be1 When predicting an image for immediate use, push it to the GPU.
This mostly affects the case where Ren'Py is skipping, and hence
the images aren't likely to be loaded onto the GPU, and the idle
frame handler is unlikely to be triggered.

When this happens, prediction doesn't - but images will still be
predicted for immediate use. However, the surfaces were not being
loaded onto the GPU until use.

By immediately loading onto the GPU, the surfaces can be immediately
evicted from CPU memory, reducing the maximum amount of CPU memory
in use.
2023-02-11 00:30:22 -05:00
Tom Rothamel 738e4b30ec Limit how often the presplash is drawn.
Limiting the presplash to being drawn at 24fps speeds up loading
by 4 seconds (halving it) in a game with ~3000 .rpyc files.

Fixes #3962.
2023-02-10 21:21:56 -05:00
Tom Rothamel 7fd8f66145 Ensure there is always a context during rollback.
Fixes #4337.
2023-02-10 00:38:34 -05:00
Tom Rothamel 3ef37f8adf Use a dedicated keymap entry for exiting the console. 2023-02-09 22:10:54 -05:00
Moshibit a168f4be32 doc: Fix typo (#4340) 2023-02-09 15:48:00 -05:00
Tom Rothamel 242431b0b0 Fix the analysis of imagemaps. 2023-02-09 00:08:38 -05:00
Tom Rothamel 9a06311d97 sl2: Analyze for loops with break/continue for constness.
When a for loop has a break or continue in it, it may not
complete all of its executions. The result of that is that
variables that are updated in the loop are no longer constant
in the screen.

This has break and continue mark the loop as non-constant, and
then the loop re-analyzed to mark the variables in it as
non-constant.
2023-02-08 22:09:21 -05:00
Tom Rothamel d89abb44f1 Remove unneeded case that was causing a problem.
Fixes #4334.
2023-02-07 22:27:56 -05:00
Mal Graty f5dd816d1f Allow slow text to be used in screens while TTS is active (#4333)
text: Allow slow mode use while TTS is active

This relaxes the restriction on using slow text in screens while
self-voicing is enabled. As typical say dialogue is handled by Character
it is unaffected by this change.
2023-02-06 22:26:27 -05:00
Tichq 89f17d3aeb fix: missed iteration arg in SLIf.keywords (#4332) 2023-02-06 20:40:03 -05:00
Tom Rothamel 5cb1b0de72 doc: Fix generation. 2023-02-06 09:37:48 -05:00
Tom Rothamel 9a1d7f57d3 Better comments for what LOCAL_CONST means. 2023-02-06 01:24:08 -05:00
Tom Rothamel 1e98a7046b Merge commit 'f2d55f96576710b798a1df4046eec123f55c745b' 2023-02-06 01:22:33 -05:00
Gouvernathor f2d55f9657 doc: typo 2023-02-06 06:02:39 +01:00
Tom Rothamel e0b051cf56 sl2: Add prefer_screen_to_id.
This controls whether properties supplied through the screen
override those supplied through the displayable identifier.

Per #4319.
2023-02-05 23:32:41 -05:00
Gouvernathor 0419548455 doc: add attribute_function parameter to layim language 2023-02-06 05:31:33 +01:00
Tom Rothamel 03d37d24dc sl2: Do not predict branches of for loops that can never be taken.
The previous approach of predicting all branches was incorrect when
a constant branch was taken, as it could lead a locally const variable
to be given a different value, which prevented further optimizations
from working.

Fixes #4163.
2023-02-05 23:06:40 -05:00
altskop a2fdb61f70 Move pressed_ logic to get_mouse_name 2023-02-05 19:32:22 -06:00
altskop 8d6345e04a Resolve merge conflict 2023-02-05 15:43:29 -06:00
altskop 93f8cb30b7 Resolve merge conflict 2023-02-05 15:41:34 -06:00
altskop 94522d104b Remove mousebuttondown in cursor styles and switch to "pressed_" prefix instead. 2023-02-05 15:34:58 -06:00
Gouvernathor 9f1dbf208c Add renpy.is_pixel_opaque (#4315)
* Add renpy.is_pixel_opaque

* Change the signature
2023-02-05 12:31:59 -05:00
Gouvernathor fd86992a0e Make the alt character accept kwargs (#4321)
Make the alt character pass kwargs through
2023-02-05 12:31:37 -05:00
Tom Rothamel d2cb7c82b8 sl2: Improve error handling.
This is mostly intended to provide a better error message if
continue or break is out of place.
2023-02-05 12:08:48 -05:00
Gouvernathor 6052b3ec2c Add break and continue to the screen language for loop (#4316) 2023-02-05 10:55:54 -05:00
Tom Rothamel 2a6fa817de sync: Add buttons to the gui.
This should make it possible to generate a new game that
supports Ren'Py Sync.
2023-02-04 22:14:42 -05:00
Tom Rothamel 28e8203527 Fix an issue that was preventing the gui project from being run. 2023-02-04 22:14:42 -05:00
Gouvernathor 6ec246eaee doc: Changelog (#4322) 2023-02-04 14:22:49 -05:00
Asriel Senna 0e39a75e10 doc: fix typos 2023-02-04 19:42:55 +01:00
Asriel Senna 1a69e9af1b doc: update following #4318 2023-02-04 07:59:47 +01:00
Tom Rothamel 513099ef0f emscripten: Disable audio_when_unfocused and audio_when_minimized.
Fixes #4289.
2023-02-04 01:51:28 -05:00
Gouvernathor d8d5c2889a Oversampling for image manipulators (#4318)
* im.Data, and im.ZipFileImage aren't subject to oversampling, as they aren't "im transforms" - taking an im and returning another
* Composite takes several im parameters, so computing the oversampling of the whole is not trivial. I chose only to support all the images having the same oversampling factor - which is better than nothing, for obsolete functions
* Alphamask already had the constrant of the two images having the same size, they now also must have the same oversampling - seems fair enough to me. If you try it, it will most likely glitch, but that's only if and because Fix subsurface offset when oversampling #4083 is not merged
* All others have been converted.
2023-02-04 01:44:31 -05:00
Asriel Senna 0c076bf365 doc typos and fixes 2023-02-04 05:25:37 +01:00
Gouvernathor a12f7e96f7 Fix french translations 2023-02-03 17:25:18 +01:00
Tom Rothamel 8eff33f250 pyright: Fix some typing issues. 2023-02-03 01:05:57 -05:00
Tom Rothamel 12d337252e gl2: Fix off-by-one errors. 2023-02-03 00:58:55 -05:00
Tom Rothamel 5951976050 Remove unneeded line. 2023-02-03 00:30:00 -05:00
Tom Rothamel cda2f03dc1 Add the delay parameter to the Scroll action.
This lets a scroll button delay/animate scrolling.

Fixes #3747.
2023-02-03 00:26:21 -05:00
Tom Rothamel 5f05df1721 Fixes/improvements to animated adjustments.
* Round the animation target, not the final position.
* Fix math when computing position.
2023-02-03 00:24:47 -05:00
Tom Rothamel 62eadebbee Generate stylesets.pxi stably.
This prevents it from being recompiled each time Ren'Py is run.
2023-02-02 23:59:52 -05:00
Tom Rothamel 6dd9afb0ab Adapt to setuptools. 2023-02-02 23:59:52 -05:00
Asriel Senna 9e0e85bc86 implement rpy monologue none 2023-02-03 05:49:35 +01:00
Gouvernathor 36f41e3d22 doc: fix typo in example 2023-02-03 05:13:33 +01:00
Tom Rothamel 6d9b593555 Replace adjustment intertia with a more generic animation system.
This is to make it easier to animate scroll actions.
2023-02-02 22:31:49 -05:00
Tom Rothamel 28cea14a7f Enable draggable for the tutorial list of choices.
Mostly to test touch scrolling and inertia.
2023-02-02 22:31:49 -05:00
Gouvernathor a45f7c71e3 Add config.font_name_map
This is a variable that maps a short font name to a longer font name, allowing font tags (and other places fonts are used) to be shorter when required.
2023-02-02 20:53:07 -05:00
Gouvernathor eff49c8e43 Check conflicting properties in SL and ATL (#3821) 2023-02-02 20:49:18 -05:00
Gouvernathor 053428b945 Make spacing relative in grids (and vpgrids) (#3850)
Fixes #3840.

---------

Co-authored-by: Tom Rothamel <pytom@bishoujo.us>
2023-02-02 20:47:06 -05:00
Mal Graty 22a1e0525b move: Transformed-layer specific Move transition (#4268)
This alters how the Move transition deals with layers that have been
wrapped in a transform by the "show layer" statement.

Previously raw layers were hung on the layers_root widget, so that the
Move transition could unwrap them when needed. Unfortunately this meant
that it was only possible to do this unwrapping if it was the
layers_root widget being transitioned, rather than individual layers.

The change is to instead hang the raw layer on its transformation
directly, allowing it to be accessed both in the case of transitioning
the layers_root widget and also transitioning a layer in isolation. It
also makes the concept of raw_layers on the root widget redundant, and
so they have been cleaned up.
2023-02-02 20:42:32 -05:00
Gouvernathor 79aedc830c Upgrade the fixed rollback documentation to strip obsolete functions (#4288) 2023-02-02 20:41:34 -05:00
Gouvernathor 1c84857191 Fix recent director regression (#4311)
* Patch check_image_attributes

The last change to now-line 147 require `negative` and the elements of `l` to be the same type,
which they are not because the elements of `l` are not of constant type:
when added by line 134 they're lists, but when added by line 139 they're tuples.
This converts them always to lists - the memory-heavier but safer option.

* Convert all to tuples

* Simplify the code
2023-02-02 20:28:10 -05:00
Tom Rothamel ebc1ed7ab6 Merge pull request #4310 from renpy/better-director-enable
Better director toggle variable
2023-02-02 20:26:27 -05:00
Gouvernathor 8a3b69347a better director opt-out
Replaced a variable meant to change but placed in a constant store, with a query on a variable in the general store.
2023-02-02 16:55:01 +01:00
Tom Rothamel 9b82eaf228 Fix the documentation of config.gamedir and renpy.open_file. 2023-02-02 09:57:43 -05:00
Tom Rothamel 33c86d3b93 Revert "Normalize gamedir to slashes"
This reverts commit c7c7733be3.
2023-02-02 09:37:16 -05:00
Gouvernathor c7c7733be3 Normalize gamedir to slashes 2023-02-02 15:15:50 +01:00
Tom Rothamel 3d7b15c521 Only collapse runs of whitespace consisting of space and \n.
\r doesn't exist in Ren'Py, and if the user picks another kind of
whitespace, it's best to preserve it.

Fixes #4275, closes #4299.
2023-02-02 00:50:26 -05:00
Tom Rothamel 3918cd3e93 Merge pull request #4279 from Tey/webvideo
Add Movie() support for web
2023-02-02 00:42:34 -05:00
Tom Rothamel f42b11ce6b Merge pull request #4301 from renpy/doc-style
Update the Style page
2023-02-01 23:48:07 -05:00
Tom Rothamel e8c11080a5 Merge pull request #4304 from renpy/doc-currying-callbacks
Add an example of currying a character callback
2023-02-01 23:47:32 -05:00
Asriel Senna 194cacf7f2 Update internal use of text_align 2023-02-02 05:37:47 +01:00
Asriel Senna a0dba5ca1d Update good practices in the doc and the tutorial 2023-02-02 05:34:07 +01:00
Asriel Senna 6c89fcb29d Update and compat gui.text_properties 2023-02-02 05:25:23 +01:00
Asriel Senna ad2e80f900 change the documentation from text_align to textalign 2023-02-02 05:24:19 +01:00
Asriel Senna be95fa7412 Enable textalign in screen language 2023-02-02 05:02:38 +01:00
Gouvernathor 7094d87843 doc: add an example of currying a character callback 2023-02-02 04:07:29 +01:00
Moshibit 9e02cf20f4 Update Spanish translation (#4302)
* Update common.rpy

* Update developer.rpy
2023-02-01 18:43:33 +01:00
Gouvernathor d284791ffb doc: minor tweaks and typos on the lifecycle page 2023-02-01 12:24:29 +01:00
Gouvernathor 8637d74c3a doc: some further edits 2023-02-01 12:22:29 +01:00
Gouvernathor 69701070b6 doc: Update styles documentation
Various rephrasings, added links, comparisons with modern renpy statements, remove duplicate entry for the style inspector, and so on.
2023-02-01 11:43:33 +01:00
Gouvernathor 76b8962bc5 Fix last
Weirdly enough defaultdict.pop raises an error if the key doesn't exist
2023-02-01 08:44:09 +01:00
Gouvernathor 2f19f4d3e9 Check that the deferred errors are correct when releasing them 2023-02-01 08:29:12 +01:00
Tom Rothamel 17e1cf0a67 Merge pull request #4296 from renpy/disable-empty-slkeywords
Disable empty keywords in screen parsing
2023-02-01 01:43:50 -05:00
Tom Rothamel 49e531fabb Merge pull request #4295 from renpy/tts-sub
Use presumably faster builtin methods
2023-02-01 01:43:28 -05:00
Tom Rothamel 1bd7bc6d53 Add Lexer.deferred_error, and support for deferred errors.
A deferred error is a parse error that might or might not manifest,
based on configuration variables that need to be set early, but can
be in any file.

These errors are stored in .rpyc files, and might become real parse
errors, or might be discarded.

This is intended to address #4284.
2023-02-01 01:37:45 -05:00
Gouvernathor ed19b3c333 Update french translations 2023-01-31 19:32:17 +01:00
Gouvernathor fb251c362d Error-out on emply screen language keyword 2023-01-31 17:59:04 +01:00
Gouvernathor 3e0a84ee8c doc: fix typos and escape 2023-01-31 15:20:54 +01:00
Gouvernathor db419875b0 Use presumably faster builtin methods 2023-01-31 15:14:58 +01:00
Tom Rothamel a474006d40 Add config.tts_substitutions.
This allows words to be replaced with their pronuncations, for
the purpose of self-voicing.
2023-01-31 00:27:16 -05:00
Gouvernathor d764a100a6 doc: reference typo 2023-01-31 04:44:46 +01:00
Gouvernathor bc2f9c866b doc: forgotten code block 2023-01-31 04:42:07 +01:00
Tom Rothamel a49bd0133c Fix crash on Android 12.
It looks like there were two things happening at once. One might have
been caused by aggressive power saving after onPause returns, and
seems to have been fixed by renpy-build@e73258924e907fe613ea6f243ab4a6bcae561632 .

The second was a crash in renpy.audio.audio.pause_all, that is probably
caused by the Audio Focus system on Android 12 starving the audio
thread, leading to things locking up.

This change pauses the audio without acquiring any locks, and was
stable after tens of pause-resume cycles on my Pixel 7.

Addresses #4286.
2023-01-29 22:55:10 -05:00
Tey 97f67f3cb8 Do not warn if playback is stopped before movie is ready 2023-01-30 03:41:09 +01:00
Tey bec8d214d3 Disable debug output by default 2023-01-30 03:17:15 +01:00
Teyut 7cd3ed824f Merge branch 'renpy:master' into webvideo 2023-01-30 02:35:48 +01:00
Tom Rothamel 7fd6fda193 Fix regression. 2023-01-29 14:58:37 -05:00
Tom Rothamel 0c0b824be6 sync: Finish changing to taking the url. 2023-01-29 14:22:08 -05:00
Tom Rothamel 261e4f9926 py3: Build using setuptools. 2023-01-29 14:15:46 -05:00
Tom Rothamel 221815a3ad Remove the embedded libfribidi.
It's now fine to use the system fribidi, so we use that. This
also upgrades the interface to use Python unicode functions that
are no longer deprecated.
2023-01-29 13:24:07 -05:00
Tom Rothamel 33e740e4ad Fix various warnings produced by GCC or clang. 2023-01-29 13:10:40 -05:00
Tom Rothamel b64c4c0904 Fix warnings emitted during compilation. 2023-01-29 10:43:08 -05:00
Tom Rothamel e00dd6a491 Fix use of undefined behavior with matrixes.
* Use of a zero-length array in the middle of the structure is non-portable,
  so replace it with a pointer.

* Apparently, M_PI is non-portable, so replace it with the constant.
2023-01-29 10:24:40 -05:00
Tey 2a6bfb8878 Add support for movies with mask on web 2023-01-29 04:23:04 +01:00
Tey 90b29854a9 Add "renpy.alpha_mask" shader that sets transparency of a texture using another texture 2023-01-29 04:20:29 +01:00
Tey 9358dbc613 Make cached_texture public so GL2Draw.render_to_texture() can actually use it 2023-01-29 04:18:53 +01:00
Tom Rothamel ea4e9bc144 sync: Fix wording. 2023-01-28 21:38:42 -05:00
Tom Rothamel 280ea1e0e4 Document the sync server protocol. 2023-01-28 21:34:34 -05:00
Tom Rothamel d5a7b257dc Include a hash of save_directory with the upload.
It may be necessary to cut off an API client, so this will allow that.
2023-01-28 21:28:23 -05:00
Tom Rothamel 84238fcca5 sync: Include the save_directory with the sync ids.
This should add a little to the entropy involved.
2023-01-28 21:01:18 -05:00
Tom Rothamel f4990b9f98 Add CurrentScreenName().
This is a screen function that returns the name of the current
screen (ignoring use-es).
2023-01-28 10:28:38 -05:00
Tom Rothamel e0d6230f2f sync: Preserve mtime when unpacking files.
This helps make sure that the right persisten is used, and gets
the save times correct.
2023-01-28 01:50:43 -05:00
Tom Rothamel c0385ce188 sync: Check that as sync belongs to the game being played. 2023-01-28 00:57:19 -05:00
Tom Rothamel e624691fc3 Merge branch 'sync' 2023-01-28 00:21:44 -05:00
Tom Rothamel a173928fe6 token: Allow loading slots where the save token wasn't accepted. 2023-01-28 00:21:05 -05:00
Tom Rothamel 4e06513d07 Update the look of the default sync screens. 2023-01-28 00:19:50 -05:00
Tey a66a521660 Only copy a video frame when a new one is available
This relies on requestVideoFrameCallback() which is available on Chrome and Safari,
but not Firefox.
2023-01-27 23:38:43 +01:00
Tey 7c08938fb9 Copy video frame to WebGL texture to improve performances
Video with alpha masks are not supported yet.
2023-01-27 23:36:59 +01:00
Tey c51c5e0e7d Add a way to generate an empty GLTexture and retrieve its name
This is required for the web platform so the browser copy video frames to it from JS.
2023-01-27 23:32:06 +01:00
Tom Rothamel ca649f95ec sync: Various improvements.
* Allow the sync id to be typed in lower-case.
* Set the correct init.
* Do not depend on the system-wide confirm screen.
* Use gui._scale rather than gui.scale.
2023-01-27 02:48:47 -05:00
Tom Rothamel 247b5d33cd Merge branch 'master' into sync 2023-01-27 01:22:10 -05:00
Tom Rothamel c9bdd74a5c Allow save files without signatures to be loaded. 2023-01-27 01:08:30 -05:00
Tom Rothamel 86be00ff75 Fix issues with maxing focus.
The new max focus was not stored, causing problems. If maxing a focus
happens when a displayable is grabbed, the grab is broken.

Fixes #4092, resolves #4108.
2023-01-26 21:03:01 -05:00
Tey eadff6ee94 Add more debug outputs and a switch to disable them 2023-01-25 21:31:13 +01:00
Gouvernathor 687e1f190d doc: typo 2023-01-25 21:09:15 +01:00
Tom Rothamel d0f293d799 Include libhydrogen in renpy.encryption.
This fixes a linking problem with the python 2 renpyweb, and doesn't
hurt anything else.
2023-01-25 11:20:25 -05:00
Tom Rothamel 32ee3ed517 Include libhydrogen in renpy.encryption.
This fixes a linking problem with the python 2 renpyweb, and doesn't
hurt anything else.
2023-01-25 11:03:28 -05:00
Tom Rothamel 84d12e2a93 sync: Add sync system.
This allows the user to upload their game data to a Ren'Py-run
server, and download it onto a new device.
2023-01-25 00:16:32 -05:00
Tom Rothamel e52ba082bb Fix typo in Setup. 2023-01-25 00:14:15 -05:00
Tom Rothamel b3dd01d50a sync: Add libhydrogen and renpy.encryption.
This is a much lighter set of libraries that will allow
authenticated encryption.
2023-01-24 22:44:52 -05:00
altskop 23122310ae Support for new cursor types
Added support for "mousebuttondown" and "button" states for mouse cursors. Additionally, updated the documentation.
2023-01-24 12:42:49 -06:00
Tom Rothamel 74027bef5d doc: Changelog and more.
This is the result of auditing the history to find items that
didn't get changelogged. There are still a number of big items
that need to be added.
2023-01-24 02:11:18 -05:00
Tom Rothamel aa6cedcc87 Adjust how history_current_dialogue works, enable by default.
Having do_done happen before do_display seemed like it could
cause problems, so put the dialogue onto the history_list, pop
it, and put it back on again in do_done.
2023-01-23 23:59:38 -05:00
Tom Rothamel 2a1ecfd497 sync: Save location improvements.
* It's now possible to specify a list of additional save locations
  that files can be saved to.
* A new method that gets a path to a save or persisten file.
2023-01-23 23:28:54 -05:00
Tom Rothamel fc561141d4 Reinitialize save locations. (And clean up log_clock.) 2023-01-23 23:28:54 -05:00
Tom Rothamel e4c7faf8de Merge pull request #4028 from Noriverwater/4018
Allow adding the current dialogue to history screen
2023-01-23 23:28:46 -05:00
Tey c06da680ed Fix scrolling bars appearing when prompt/error message shows up 2023-01-23 18:13:53 +01:00
Tey 70ef636572 Handle cutscene video load error and show message for web 2023-01-23 18:13:21 +01:00
Tey 3029937cf6 Implement video file rendering for web
Video files are rendered by the browser using a HTML video element. The video
output is drawn to a canvas periodically and the canvas content is copied to
a MEMFS file for Renpy to process it. The file format is TGA to reduce the
CPU load as much as possible (HTML canvas only support exporting data as JPG
or PNG natively).
2023-01-23 05:37:18 +01:00
Tey bba9e06d31 Forward video specific call to JS 2023-01-23 05:29:28 +01:00
Tey 417dd54e49 Handle URL scheme for video files on web 2023-01-23 05:27:21 +01:00
Tey 87fd6ea4f3 Use URL scheme for video files on web 2023-01-23 05:24:47 +01:00
Tey 35cdc01c27 Add video files to remote files list to process them differently 2023-01-23 05:23:52 +01:00
Tom Rothamel a4b1172883 Rename to voice_after_game_menu.
Per comment in #4019.
2023-01-20 23:10:13 -05:00
Tom Rothamel 3c8a31cff2 Add the voice after menu preference.
This allows the voice to continue being played after the user
enters the menu.

Fixes #4019.
2023-01-20 22:04:21 -05:00
Tom Rothamel 780fe50050 Include all commits in version calculations. 2023-01-19 22:27:23 -05:00
Tom Rothamel 094bf6edb5 py: Remove a del that didn't do much.
But did cause problems running under Python 2.
2023-01-19 21:20:39 -05:00
Tom Rothamel ae9d6d2ea3 Merge Layer displayable and detached layers (#4239)
This allows one to create layers that are not part of the normal layer stack, but instead are accessed through a Layer displayable.
2023-01-19 01:26:02 -05:00
Gouvernathor 78d423b9e9 typos
yay for reachability analysis
2023-01-18 19:16:18 +01:00
Tom Rothamel 926f9190be Merge pull request #3929 from renpy/lint-reachability-1
Add lint reachability analysis
2023-01-18 02:18:48 -05:00
Tom Rothamel cecc13498a Release the grab when losing focus while changing context.
Fixes #4172
2023-01-17 22:36:42 -05:00
Tom Rothamel 1051e3f2dc Merge pull request #4252 from renpy/fix-4194
Apply transforms to displayables the proper way
2023-01-17 22:05:44 -05:00
Mal Graty b5bb26fa52 layerdisp: First pass at documentation 2023-01-17 23:41:32 +00:00
Mal Graty 58efd993dd layerdisp: Add config.detached_layers 2023-01-17 23:41:23 +00:00
Mal Graty ddff0df466 layerdisp: Call visit_all callback on self first
The Layer displayable has its child injected using visit_all. That makes
the default behaviour of calling the callback on children first
unhelpful, as it descends the tree before the child is replaced. This
change flips that order for the Layer displayable, calling the callback
first on self (allowing the child be updated) before descending into the
new child.
2023-01-17 23:41:23 +00:00
Mal Graty fbbe9b138b layerdisp: Make Layer displayble public 2023-01-17 23:41:23 +00:00
Mal Graty 2ade8e0449 layerdisp: Capture detached layer transitions
Only care about layers being displayed, either directly or via a Layer
displayable.
2023-01-17 23:41:23 +00:00
Mal Graty 929aedd082 layerdisp: Inject layers into displayables
Reuse the tree traversal done to support per_interact to find Layer
displayables in the tree and replace their contents before calling
per_interact as normal.
2023-01-17 23:41:23 +00:00
Mal Graty f06cac8537 layerdisp: New layer displayable
Uses the clipping keyword argument via properties to avoid making it
usable as a positional argument, and to prevent the creation of a new
style. Additionally the AdjustTimes init is skipped as there's no
benefit to initialising either the times or the child before add is
called by interact_core.
2023-01-17 23:41:23 +00:00
Mal Graty 3b08646baa layerdisp: Compute the layers to process just once 2023-01-17 23:41:23 +00:00
Tom Rothamel b3558d0725 Clear the focus when entering a new context.
It will clear anyway, but doing so explicitly like this makes
sure to run all the unfocused handlers before the context is
entered.

Fixes #4255.
2023-01-16 21:55:05 -05:00
Mal Graty 6387e44694 Fix more suspected typos in MoveTranslation 2023-01-16 08:26:12 +01:00
Gouvernathor 498b0966be Fix probable typo in MoveTransition 2023-01-16 08:25:49 +01:00
Tom Rothamel 6fb620c12a Use a different log message for a second video rejection. 2023-01-16 02:14:46 -05:00
Tom Rothamel da7d90ea41 Merge pull request #4145 from GlacierLab/webvideo
web: auto mute video for autoplay
2023-01-16 02:12:36 -05:00
Tom Rothamel 5893414f21 Only notify for a QuickSave that succeeds.
Fixes #4236. Closes #4238.
2023-01-16 02:04:27 -05:00
Tom Rothamel 3e571d04d2 Allow side to expand to fit its child on render.
This deals with the case where the the insets caused by the
side displayable might cause the center displayab;e to grow in
one dimension. (For example, Text that has an inset on the right
may be bigger vertically than if there was no inset.)

When this happens, the space allocated to the center displayable
will be allowed to expand until everything fits.

Fixes #4253.
2023-01-16 01:28:10 -05:00
Tom Rothamel d2c385a713 Merge pull request #4225 from mal/fix-self-voicing-screen
Restore self-voicing notification callback
2023-01-15 22:18:14 -05:00
Tom Rothamel 9a821eca85 Merge pull request #4250 from renpy/doc-variables
Variables documentation
2023-01-15 22:17:52 -05:00
Tom Rothamel 40472632a9 Merge pull request #4229 from renpy/fix-init-doc
Ban object's __init__ docstring from our documentation
2023-01-15 22:17:15 -05:00
Tom Rothamel 89c07909ef Merge pull request #4251 from renpy/doc-translation-id
Remove wrong example and move things around
2023-01-15 22:16:47 -05:00
Tom Rothamel a55ca53310 Merge pull request #3423 from uyjulian/use_rwops
loader: use RWops object from pygame_sdl2
2023-01-15 20:12:48 -05:00
Gouvernathor fb44010b7f Apply transforms to displayables the proper way 2023-01-15 19:31:47 +01:00
Asriel Senna 6ea0a43e47 doc: remove wrong example and move things around 2023-01-15 18:54:53 +01:00
Asriel Senna 5161728f5e doc: clarify arguments taken by callbacks 2023-01-15 18:27:30 +01:00
Asriel Senna e7bb3967f2 doc: various fixes, tweaks and cross-references 2023-01-15 18:26:45 +01:00
Asriel Senna 637af5a21e doc: secure the signature of renpy.display_menu 2023-01-15 18:22:51 +01:00
ねゆんせ 82dd8ffe95 ren_py: Removed extra quotation mark from example (#4247) 2023-01-15 17:19:13 +01:00
Tom Rothamel 9f24f22206 Replace heapq_merge with sort. 2023-01-14 22:15:09 -05:00
Tom Rothamel 5d069f1589 Merge pull request #3961 from Booplicate/include_module
Add `renpy.include_module`
2023-01-14 21:35:43 -05:00
Tom Rothamel 77692f7a7f Merge pull request #4201 from Moshibit/revert-1-Moshibit-patch-1
Update Spanish translation
2023-01-14 21:20:51 -05:00
Tom Rothamel 0bfa9a022b Merge pull request #4246 from altskop/3dstage.rst.layers
[docs] Elaborate on layer specification in camera statement description
2023-01-14 21:20:13 -05:00
altskop f98221a54f Elaborate on layers in camera statement description 2023-01-14 19:14:58 -06:00
Tom Rothamel b830143788 web: Add AVIF and SVG to formats that are thumbnailed. 2023-01-14 12:37:57 -05:00
Tom Rothamel c404490bd2 Merge pull request #4144 from renpy/actions-as-functions
Classify actions as functions
2023-01-14 01:14:42 -05:00
Tom Rothamel 591c440647 Merge pull request #4226 from renpy/doc-mung
Document name-munging more visually and add warning for f-strings incompatibility
2023-01-14 01:14:08 -05:00
Tom Rothamel a95e59bd7c Merge pull request #4227 from renpy/fix-documented-signatures
Document more function signatures as keyword-only.
2023-01-14 01:13:07 -05:00
Tom Rothamel 458bbe3ba4 Merge pull request #4224 from renpy/show-sig
Document some renpy.show arguments as keyword-only.
2023-01-14 01:12:19 -05:00
Tom Rothamel a40856fdad Merge pull request #4217 from renpy/config-examples
Avoid undocumented config variables in examples
2023-01-14 01:11:30 -05:00
Tom Rothamel adfe4fc712 Merge pull request #4231 from renpy/fix-config.help
Fix and document config.help
2023-01-14 01:09:47 -05:00
Tom Rothamel 1ba031b1c5 Merge branch 'master' into fix-config.help 2023-01-14 01:09:40 -05:00
Tom Rothamel 77236946d0 Document how None and Button sensitive/selected interact.
Which is to say, that None means "take the default", like it does
in other places.

Fixed #4235.
2023-01-13 23:48:37 -05:00
Tom Rothamel f49a7d293a Allow an on "show" to end an interaction.
Fixes #4234.
2023-01-13 23:34:27 -05:00
Tom Rothamel 268de01790 Delete steam_appid.txt when the game does not set it.
This prevents steam_appid.txt from activating steam for legacy
games.

Fixes #4244.
2023-01-13 22:40:25 -05:00
Tom Rothamel beeed03b54 web: Hide exec-ed commands from the store. 2023-01-13 22:30:47 -05:00
Tom Rothamel 8784250be9 Automatically oversample SVGs.
SVGs will be automatically rendered at the drawable resolution,
and then oversampled to reduce them to the appropriate virtual
size. The result is something very similar to the way text is
rendered always sharp.

Fixed #1641.
2023-01-13 01:40:49 -05:00
Tom Rothamel 4f972a5c39 Allow SVG images to be loaded at alternate sizes.
And document the requirement for SDL_image 2.6.
2023-01-11 23:45:46 -05:00
Tom Rothamel 561dcdbe74 Diagnose unsupported formats when loading images.
Based on #3906.

Co-Authored-By: Taeyeon Mori <taeyeon@oro.sodimm.me>
2023-01-11 21:48:36 -05:00
Tom Rothamel 8906015895 Reload .avif and .svg files when they change.
Co-Authored-By: Taeyeon Mori <taeyeon@oro.sodimm.me>
2023-01-11 20:18:38 -05:00
Tom Rothamel 5d6d660e0b Update the image extensions list to include avif and svg. 2023-01-11 01:01:38 -05:00
Gouvernathor 758b5e2f38 whitespace 2023-01-10 21:48:25 +01:00
Gouvernathor 198fc93532 doc: minor corrections
3 configs missing a link, one misordered in the general page, and one inexistent used in an example
2023-01-08 17:19:57 +01:00
Gouvernathor f82f7d82d5 docgen: classify Actions and Values by inheritance check 2023-01-08 17:01:14 +01:00
Gouvernathor 0558efe5d9 Merge branch 'master' of https://github.com/renpy/renpy 2023-01-08 05:40:04 +01:00
Gouvernathor 7b1ea17a91 typos and whitespace 2023-01-08 05:39:57 +01:00
Gouvernathor 99514a9341 doc: document config.help's use as Help's default value
Also fixes Help's doc which was inaccurate - config.help_screen is a fallback, not an override.
2023-01-08 03:30:33 +01:00
Gouvernathor 457ba21aba Remove config.help's first "help on config" implementation 2023-01-08 03:27:35 +01:00
Tom Rothamel 570cbb8b5b Error out early when trying to run live2d on the web platform. 2023-01-07 21:05:32 -05:00
Gouvernathor 665e5760d8 docgen: ban object's __init__ docstring
In py3, an object's method inherits the object's method's docstring.
We don't want that one to pass as one written by us and which should be included in our documentation.
2023-01-08 02:33:30 +01:00
Tom Rothamel 1cb7d09b97 Update the copyright to 2023. 2023-01-07 19:21:14 -05:00
Tom Rothamel 8cb0fd0670 py3: Update copyright script to work with Python 3. 2023-01-07 19:20:59 -05:00
Gouvernathor 922798185c fix typos, remove obsolete information 2023-01-07 23:40:20 +01:00
Gouvernathor 2bd84d93b8 doc: use stars and a slash to secure signatures
Also, the `alpha` parameter, which was documented as "ignored", was removed from transition classes' signatures.
2023-01-07 23:38:26 +01:00
Gouvernathor b2ce4fa349 doc: Warn about name-munging and f-strings
until and unless #4084 gets resolved
2023-01-07 23:00:55 +01:00
Mal Graty 978126612f tts: Restore self-voicing notification callback 2023-01-07 10:34:10 +00:00
Tom Rothamel 1e4298ed61 Remover circuitpython from vscode settings. 2023-01-06 22:26:59 -05:00
Tom Rothamel 6b227619e9 pyright: Fix warning. 2023-01-06 22:26:59 -05:00
Gouvernathor 2a6bda3a3d doc: Improve and secure renpy.show's signature 2023-01-06 18:46:31 +01:00
Tom Rothamel 0628b3c1ae Merge pull request #4222 from renpy/py2-test
Use the regular way of testing py's version
2023-01-06 00:05:18 -05:00
Tom Rothamel 801cee5db1 Fix the encoding when loading bmfonts. 2023-01-05 23:34:05 -05:00
Tom Rothamel ca1c0f94f5 Fix a crash caused by Preferences changing without changing its length. 2023-01-05 21:43:35 -05:00
Gouvernathor c356f177d4 Use the regular way of testing py's version 2023-01-06 03:23:56 +01:00
Gouvernathor 0a434367b3 doc: opt to documenting config.gamedir 2023-01-06 02:55:58 +01:00
Tom Rothamel 250bb26b16 Merge pull request #4212 from renpy/wrong-include
Include functions intended to be documented
2023-01-05 20:49:02 -05:00
Tom Rothamel 3a1b3e75d3 Merge pull request #4213 from renpy/config.language
Unmixup config.language and config.default_language
2023-01-05 20:48:42 -05:00
Tom Rothamel 6f6e40e066 Merge pull request #4215 from renpy/config.console
Add a formal doc entry for config.console
2023-01-05 20:48:28 -05:00
Tom Rothamel eb7ca2d684 Merge pull request #4214 from renpy/config.editor
Undocument config.editor and document Shift+E
2023-01-05 20:42:42 -05:00
Tom Rothamel d376f8cc30 Merge pull request #4216 from renpy/config.perspective
Add an entry for config.perspective
2023-01-05 20:39:45 -05:00
Tom Rothamel 9b051a0918 Merge pull request #4218 from renpy/config.pad_bindings
Add a entry for config.pad_bindings
2023-01-05 20:37:45 -05:00
Tom Rothamel fadff3ae4c Merge pull request #4221 from mal/sticky-layers-redux
Sticky layer tweaks
2023-01-05 20:37:19 -05:00
Tom Rothamel 4f6951e911 Merge pull request #4220 from mal/filmstip-gl2
Update anim.Filmstrip to take advantage of gl2
2023-01-05 19:22:25 -05:00
Mal Graty 8cd3d4553d sticky: Document feature 2023-01-05 23:48:39 +00:00
Mal Graty 0d558d2670 sticky: Parity in clean up between hide and clear
This change ensures that tags are only unstuck when being removed from
the layer to which they were stuck. As they could only have been stuck
to a sticky layer in the first place, there is no need to check if the
layer is sticky.
2023-01-05 23:08:48 +00:00
Mal Graty 7350cd81fd anim: Update Filmstrip to take advantage of gl2
This change results in much better prediction of the source image,
considerably speeding up prediction and loading while reducing I/O.
Previously it would attempt to load the source image for each frame.
2023-01-05 10:10:14 +00:00
Gouvernathor c540df7fd1 doc: add a entry for config.pad_bindings 2023-01-05 07:30:03 +01:00
Gouvernathor 7d17c94251 doc: use the better function (given context) 2023-01-05 07:29:08 +01:00
Gouvernathor 2a18f54179 doc: avoid undocumented configs in examples 2023-01-05 07:22:12 +01:00
Gouvernathor 3b910c8227 doc: Add an entry for config.perspective 2023-01-05 07:02:17 +01:00
Gouvernathor 7b2a55e0a4 doc: Add an entry for config.console 2023-01-05 06:53:33 +01:00
Tom Rothamel 51fcf958e8 doc: New preferences. 2023-01-05 00:49:09 -05:00
Gouvernathor 053d0bc158 doc: Undocument config.editor and document Shift+E 2023-01-05 06:39:06 +01:00
Tom Rothamel 73300ccc27 Rename preferences.pwa_preload to .web_cache_preload.
This matches the name used in Preferences, which will make the
documentation easier to write.
2023-01-05 00:24:09 -05:00
Tom Rothamel 37b000f36c Add a preference that controls if the game plays audio when unfocused.
Defaulting to off, because I personally like keeping the game running
when doing something else. (And because this would ruin the usefulness
of music rooms.)

Fixes #3777.
2023-01-05 00:20:03 -05:00
Gouvernathor 93d3163b01 doc: unmixup config.language and config.default_language 2023-01-05 06:11:23 +01:00
Tom Rothamel 260913703b audio: Reference count pause_all. 2023-01-05 00:09:33 -05:00
Gouvernathor 879c32e538 doc: Fix typo preventing functions from being included 2023-01-05 04:42:23 +01:00
Tom Rothamel c4ff37826a Preserve volumes when muted.
Fixes #3975.
2023-01-04 22:39:38 -05:00
Tom Rothamel 3e14e1f25e Merge pull request #3991 from renpy/fix-3966
Remove bogus onlayer parsing on scene statements
2023-01-04 22:10:47 -05:00
Tom Rothamel 68e2cfb420 Explicity document that it is not required to close text tags.
This has been the behavior of Ren'Py, outside of lint, for quite some
time, and the usability improvements likely make up for the chance
that some errors will pass unnoticed.

Fixes #3926.
2023-01-04 00:45:53 -05:00
Tom Rothamel e531f7561a Add config.after_default_callbacks. 2023-01-04 00:04:09 -05:00
Tom Rothamel 96ff02dff8 Allow creator-defined statements to execute at default-statement time.
Fixes #4041.
2023-01-03 23:12:53 -05:00
Gouvernathor aa7a197771 doc: tweaks to last
Move a warning section that seemed out of place
Fix references to functions (the mistake predates my PR)
2023-01-04 03:26:29 +01:00
Gouvernathor c8e22d8c7f Document new clauses for show screen and other statements (#3601)
* doc: typos and references to new clauses

* doc: new parameters to show screen and hide screen

* revert accidental revert

* doc: document new clauses for call screen

and bring nopredict in line with the others

* doc: fix wrong example

Co-authored-by : Booplicate
2023-01-03 20:51:59 -05:00
Tom Rothamel 5de6385165 Merge pull request #3595 from Booplicate/new_screen_clauses
New screen clauses
2023-01-03 20:50:59 -05:00
ねゆんせ 9b6df453bc doc: fixed double h (#4209) 2023-01-03 18:16:27 +01:00
Asriel Senna b23ecf3603 Fix previous, allow all previously unglitched statements 2023-01-03 15:21:40 +01:00
Gouvernathor d7d53a06b9 Fix wrong config variable name (#4205)
doc: fix wrong config variable name
2023-01-02 21:30:58 -05:00
Gouvernathor bae6672f36 Remove remaining gl2 references (#4206)
doc: Remove remaining gl2 references
2023-01-02 21:30:29 -05:00
Mal Graty 0e0e91495f Sticky layer implementation (#4202)
* Group layer definitions in config.py

* sticky: Initial sticky layer implementation

* sticky: Add sticky argument to renpy.add_layer

* sticky: Compat with older versions without sticky

* sticky: Document config.sticky_layers

* sticky: Use list for config var instead of set

Usability trade off at Tom's request.
2023-01-02 21:30:10 -05:00
Tom Rothamel 329e0f49de Consider pauses in text tags when computing auto-forward time.
Fixes #3958.
2023-01-02 21:29:08 -05:00
Gouvernathor 97d1fd059d doc: remove deleted page from the index
following #4170
2023-01-02 18:07:09 +01:00
Gouvernathor 55858f9f6d doc: fix method syntax and linebreaks 2023-01-02 18:06:08 +01:00
Gouvernathor 1b8269d746 doc: protect unsafe character
it was creating a link for some reason
2023-01-02 18:05:37 +01:00
Moshibit f02ca4c042 Revert "Fix typo" 2023-01-02 07:45:34 -06:00
Moshibit f3e19bd772 Merge pull request #1 from Moshibit/Moshibit-patch-1
Fix typo
2023-01-02 07:37:48 -06:00
Moshibit 76be237d8b Fix typo
config.history_list_length does not exist but config.history_length does.
2023-01-02 07:33:23 -06:00
Moshibit 64dd878b6b Merge branch 'renpy:master' into master 2023-01-02 07:24:45 -06:00
Gouvernathor b1b8b03f12 Persistent improvements and fixes (#4197)
* Update persistent.py

Add the __contains__ syntax
Add the _keys method
Include __ keys in _clear's behavior, and use the new _keys method to avoid code duplication

* Document the new behaviors and explain the __ fields

* Add link anchor

* Undo _keys, turn `in` into _hasattr, document this

* better document __-starting fields' limitations

* doc: Move _hasattr and word things better

* typo
2023-01-02 00:02:41 -05:00
Tom Rothamel d5a816c4fe Allow negating attributes in the interactive director.
This makes the interactive director more useful in cases where
layeredimages are involved.

Fixes #2605.

Co-Authored-By: JackkelDragon <37125112+JackkelDragon@users.noreply.github.com>
2023-01-01 13:46:10 -05:00
Moshibit bef4a6f99e Update common.rpy 2023-01-01 09:04:14 -06:00
Moshibit 72f3513022 Update launcher.rpy 2023-01-01 09:01:12 -06:00
Tom Rothamel 47b82bb2d4 Persistent devtoool.
This makes it possible to visualize the persistent data.
2023-01-01 09:56:05 -05:00
Tom Rothamel 362b22bd4d Merge pull request #4192 from renpy/overlay_functions
Undocument config.overlay_functions
2023-01-01 09:36:27 -05:00
Tom Rothamel 6226a8a78b Viewport inertia.
This is based on the implementation in iOS, as described at
https://ariya.io/2011/10/flick-list-with-its-momentum-scrolling-and-deceleration .

When the user releases their finger from the viewport while it's moving,
inertia will keep the viewport scrolling until either the user begins to
scroll again, or it comes to a natural stop.
2023-01-01 02:09:41 -05:00
Mal Graty e3d443acc3 Reduce duplication in new persistent viewer
By having it reuse the existing variable viewer screen with minor
alterations. Also alters an internal name to better reflect its use.
2022-12-31 22:58:10 +00:00
Gouvernathor 034ebf7d54 Comment-out unused lines 2022-12-31 22:57:31 +00:00
Gouvernathor c54034c7e0 Add persistent menu in developer tools 2022-12-31 22:57:31 +00:00
Gouvernathor 09eb77b56e doc: fix typos and add link 2022-12-31 15:17:44 +01:00
Tom Rothamel be5ad751cf launcher: Choose a language by clicking on it.
I had some feedback that clicking and then clicking on the text-button
was confusing, and it confused me late last night - so move to a single
click model.
2022-12-31 09:03:20 -05:00
Tom Rothamel 2b85a7f1eb token: Ecdsa is now a dependency for Ren'Py. 2022-12-31 08:40:15 -05:00
Tom Rothamel 708c7a52a1 Add config.save_token_keys.
This lets a game developer pre-seed the list of verification keys,
and ship 'blessed' save-games or persistent files that the user's
game will load without asking for verification.
2022-12-31 01:08:48 -05:00
Tom Rothamel b42b24be75 token: Make the tokens keys and signatures.
By making the tokens ECDSA keys, it's possible to include a signature
of the log or persistent data in each file. By doing this, it becomes
impossible to simply transfer a token from one save file to another,
allowing it to prove that the data was generated by someone who knew
the public key.
2022-12-30 23:32:43 -05:00
Tom Rothamel 5a124d6d45 token: Be more explicit about why this is important. 2022-12-30 09:35:46 -05:00
Gouvernathor 98328bd6b9 doc: remove config.overlay_functions 2022-12-30 14:38:55 +01:00
Tom Rothamel a494d160c4 Merge pull request #4191 from renpy/update-config
Futureproof list and dict config variables, and better nomenclature for callable configs
2022-12-30 08:32:42 -05:00
Gouvernathor 91e3fc15c7 doc : futureproof list and dict config variables 2022-12-30 12:40:26 +01:00
Tom Rothamel 2b719a5b86 doc: Save token security. 2022-12-30 01:07:18 -05:00
Tom Rothamel 9ce786d578 token: Confirm loading a save with a different token.
And offer to add the token to the player's current
computer.
2022-12-29 23:24:09 -05:00
Tom Rothamel 994f358ca8 token: Include the save token in a save. 2022-12-29 21:42:16 -05:00
Tom Rothamel cfd17c616c token: Include the save token in persistent data, and check it for validity. 2022-12-29 21:23:24 -05:00
Tom Rothamel 4826741846 token: Use path_to_saves to find the token.
And change the order a bit, so the token is available the first
time persistent is loaded.
2022-12-29 20:30:37 -05:00
Tom Rothamel 258beb1b38 savetoken: Generate save tokens and upgrade games to include them.
Save tokens will be used to warn the user if they're loading a
game that wasn't created on the current computer.
2022-12-29 19:38:58 -05:00
Tom Rothamel c0de244fd9 Do not generate relative imports for renpy.common. 2022-12-29 19:38:38 -05:00
Tom Rothamel a39cb7c8f6 Do not delete os from the store.
It was added, deleted, then added again. This fixes a regression
caused by 9366678fef, which removed
the re-import.
2022-12-29 10:39:55 -05:00
Tom Rothamel f1462bd1e1 Update keywords. 2022-12-29 10:14:31 -05:00
Tom Rothamel c7c713c6de Merge pull request #3946 from renpy/xycenter-style
Add the xycenter proxy style property
2022-12-28 18:19:04 -05:00
Tom Rothamel b9d1660377 text: Do not allow invisible hyperlinks to gain focus.
Fixes #3941.
2022-12-28 18:15:32 -05:00
Tom Rothamel 9366678fef afm, self-voicing: Allow self-voicing and afm to be active simultaneously.
The compromise is that when self-voicing is active, afm will only occur
when the dialogue is focused - it will not occur when another button is
focused.
2022-12-28 17:16:48 -05:00
Tom Rothamel c105989111 web: Remove unneeded disclaimer. 2022-12-28 17:16:48 -05:00
Gouvernathor a4d0b79de4 Complete Text docstring 2022-12-28 21:12:09 +01:00
Tom Rothamel 6e910343e1 Merge pull request #4185 from renpy/clarify-speaking_attribute
doc: fix and clarify confix.speaking_attribute
2022-12-28 08:56:48 -05:00
Tom Rothamel d33317fdb8 Allow Text to take a list of tokens instead of a string.
This helps the implementation of custom text tags that would be
implemented as a displayable containing a Text. Fixes #4102.
2022-12-28 02:05:54 -05:00
Tom Rothamel e020f225f8 Fix regression in how Text("") was rendered.
7d31bed4f6 introduced an issue that
changed how the empty string renders. This restores the longstanding
behavior.
2022-12-28 01:32:53 -05:00
Tom Rothamel a727c0edec Limit the maximum size of a console log result by characters.
Fixes #4031.
2022-12-28 01:16:38 -05:00
Tom Rothamel 546b903660 Fix bad keybinding. 2022-12-28 00:51:06 -05:00
Tom Rothamel 39193405ed Do not include node in LineLog.
This should prevent crashes in the case where a LineLog gets
serialized. Fixes #3871.
2022-12-28 00:17:39 -05:00
Tom Rothamel 351c97bf09 Access __main__ as renpy.__main__.
This allows Ren'Py to be imported separately.
2022-12-27 18:53:28 -05:00
Tom Rothamel b903fc7fb1 Update the keymap.
This takes advantage of any, removes unicode keys that duplicate
key-stroke keys, and makes the keypad useful.

Fixed #4030
2022-12-27 00:28:42 -05:00
Tom Rothamel 067a8b4831 Add the any prefix to covere repeat and no-repeat. 2022-12-26 22:13:19 -05:00
Gouvernathor f766375dd6 doc: fix and clarify speaking_attribute 2022-12-26 16:45:31 +01:00
Gouvernathor 4b56f275f4 typo for parser error messages 2022-12-26 12:43:23 +01:00
Tom Rothamel 6067437ea2 Improve numeric keypad keysyms.
Two changes in this one. The first is to add a quartet of new
modifiers (caps/nocaps, num/nonum) to reflect if capslock or
numlock are turned on.

The second is to create a new type of keysym, beggining with KP,
that expands out to the key with our without the numlock modifier.

Starts work on #4030.
2022-12-26 00:03:05 -05:00
Tom Rothamel 6517d35727 Add the top and bottom layers.
Thes are meant for interface and key handlers, respectivelyy, that
should not be affected by transitions.

Fixes #4818.
2022-12-25 14:25:16 -05:00
Tom Rothamel 7a6f0d6082 Merge pull request #4107 from valery-iwanofu/place_method_patch
Update place method of render
2022-12-25 00:21:15 -05:00
Tom Rothamel d38c505ec8 Merge pull request #4170 from MintiClinti/obsolete-docs
removed obsolete documentation
2022-12-25 00:19:07 -05:00
Tom Rothamel b74c14d93a Merge pull request #4141 from renpy/noblock-better-error
Add colon warning in the noblock lexer error
2022-12-24 22:29:41 -05:00
Tom Rothamel 3cb327ff8d Revert part of the last change.
The part that would prevent reporting an overfull vpgrid.
2022-12-24 22:12:07 -05:00
Tom Rothamel a8f4d149da Allow grids to be underfull.
There are some good reasons for allowing undefull grids (like a
gallery with variable number of images), and not a ton of reasons
not to allow these grids. So this changes the default.
2022-12-24 16:23:32 -05:00
Tom Rothamel 3753cfa417 Merge pull request #4154 from mal/refactor-underfull
Optimize allow_underfull for non-developer mode
2022-12-24 15:45:37 -05:00
Tom Rothamel 1b6ef60a37 doc: config.web_input. 2022-12-24 01:22:45 -05:00
Tom Rothamel 58ed0461f9 web input: Filter tags, implement allow, exclude, mask.
This is fairly simple, with the real meat of this renpy/renpy-build@6f1bdd1 .
2022-12-24 01:01:09 -05:00
Tom Rothamel 93ffeb8c32 Remove debugging. 2022-12-23 02:13:38 -05:00
Tom Rothamel 1feed24f14 webinput: Initial implementation.
This uses a browser's input element to handle renpy.input, on
Python 3.
2022-12-23 01:50:06 -05:00
Tom Rothamel 72a2b88af9 Add a displayable that waits for a Javascript value. 2022-12-22 01:45:09 -05:00
Tom Rothamel ed21a6b21c doc: Wrap the sidebar captions.
Fixes #4175.
2022-12-21 00:53:05 -05:00
Clinton Nguyen 27dbdab522 removed obsolete documentation 2022-12-19 23:57:21 -08:00
Tom Rothamel ecd1fc2803 web3: Deal with webgl context loss.
Specifically by not trying to draw when the context is gone, and
then resetting the display when it comes back.
2022-12-20 01:53:17 -05:00
Gouvernathor a59b0442f9 doc: add precision and fix typo 2022-12-20 00:20:20 +01:00
Tom Rothamel 3c2b35576e web: Process the JS command queue regularly.
This moves the JS command queue processing into the 20hz periodic
event handler. Moving it out of the idle frame handing makes sure
that the command queue runs even if the the idle frame code is
being starved by frequent events or animations.

The js command overhead was measured, and seems to be less than
the browser's cock precision.
2022-12-18 18:47:57 -05:00
Tom Rothamel 40f24c0196 web: Add caching to the webservr. 2022-12-18 09:12:50 -05:00
Tom Rothamel 6bd9819f7f web3: Include all files in the preload files list.
This makes updating the preload cache a bit easier.
2022-12-18 02:50:49 -05:00
Tom Rothamel 477ec726b2 pwa preload: Only preload if the preference is set. 2022-12-18 02:17:38 -05:00
Tom Rothamel 5c56d9c374 web3 pwa: Use smooth scaling to generate the PWA icon set. 2022-12-18 02:11:10 -05:00
Tom Rothamel 717fdd96c8 web3 pwa: Preload files into the the web browser cache.
This adds a new preference that controls if the game is loaded into
the browser cache or not, and implements that preference.
2022-12-18 01:47:23 -05:00
Tom Rothamel d004dfe2bf web: Add the ExecJS action.
This is an action that allows Ren'Py to run Javascript. It'll be
used with the PWA Cache preferences, but might as well make it a
public API.
2022-12-18 00:59:10 -05:00
Tom Rothamel 0e4ff5622e web3 pwa: Various improvements.
* Generate pwa_catalog.json in a way that matches how renpy-pre.js
  uses it.
* Directly update manifest.jso, rather than using search and replace
  to do it.
2022-12-18 00:50:19 -05:00
Tom Rothamel 2249c10d37 web3 pwa: Avoid versioning the cache.
Now that the service worker handles refreshing the cache,
we don't need to version it like this.
2022-12-17 23:51:54 -05:00
Tom Rothamel ac08209e36 Merge pull request #4152 from Vadim-Karpenko/master
web: Generate catalog of all media content for caching in PWA
2022-12-17 19:46:38 -05:00
Tom Rothamel c8b4cf9433 py2: Fix encoding issue that kept Ren'Py from running. 2022-12-16 23:21:14 -05:00
Tom Rothamel 3da93f7abd doc: Fix example of accessing mActivity. 2022-12-16 23:21:14 -05:00
Vadim Karpenko 4a8d9b6b54 Merge branch 'master' into master 2022-12-16 14:24:34 +02:00
Vadim Karpenko d0382be839 Generate MD5 hashes for core files 2022-12-16 09:13:08 +02:00
Tom Rothamel e2c1758667 Merge pull request #4160 from renpy/better-4133
Emscripten module availability
2022-12-16 00:47:40 -05:00
Tom Rothamel e2f3a6bb2b ruby: Doc and compat lenticular bracket ruby. 2022-12-16 00:43:15 -05:00
Tom Rothamel 30a3174c88 web3: Restore compatibility with Ren'Py 7 saves. 2022-12-16 00:17:55 -05:00
琴梨梨 43a08784f7 make prompt as fallback 2022-12-16 14:34:42 +10:00
Tom Rothamel 7d31bed4f6 text: Optimize tokenizing text without tags or newlines. 2022-12-15 23:06:14 -05:00
Tom Rothamel e510cb1ccc lenticular ruby: Implement.
This is a feature where one can write 【東京|とうきょう】 and have
it mean the same thing as {rb}東京{/rb}{rt}とうきょう{/rt}.

Per #4146.
2022-12-15 23:00:00 -05:00
Gouvernathor c7503f13ac doc: emscripten module availability 2022-12-16 03:47:16 +01:00
Andy_kl aec68a96a4 Fix emscripten Import and Export saves functionality 2022-12-16 05:25:29 +04:00
Tom Rothamel 53d293fe12 Merge pull request #4157 from mal/web-video-fix
webvideo: Fix small JS issues with sources
2022-12-15 19:45:56 -05:00
Mal Graty e5558f0527 webvideo: Fix small JS issues with sources 2022-12-15 16:34:33 +00:00
Vadim Karpenko 047937a57d Flip key and value for md5 hash 2022-12-15 17:10:18 +02:00
Vadim Karpenko 452e9ead75 Remove types 2022-12-15 17:06:20 +02:00
Gouvernathor ae74819174 Avoid duplicate extension calculations
A possibly safer way would be to use os.path.splitext, but it would only change anything if the file has no extension - the current implementation could yield an incorrect result, and splitext would return an empty string.
2022-12-15 13:59:41 +01:00
Vadim Karpenko cf0d2c28ec Generate MD5 hashes 2022-12-15 13:40:51 +02:00
Tom Rothamel abeebfa81c web3: Limit pwa to Ren'Py 8, rename the pwa icon. 2022-12-14 20:27:25 -05:00
Tom Rothamel 62e9a7c50c webvideo: Include the mime types with the video and alternative.
This helps the browser choose what to play.
2022-12-14 20:24:42 -05:00
Mal Graty a7c029cd1e Optimize allow_underfull for non-developer mode 2022-12-13 23:36:44 +00:00
Tom Rothamel 7d11c06cbe doc: Allow underfull. 2022-12-13 10:38:08 -05:00
Vadim Karpenko 115f249b75 Update docs of the function 2022-12-13 14:18:33 +02:00
Tom Rothamel c40bae3a5e Avoid appending build-in to package paths with built-in modules. 2022-12-13 00:23:56 -05:00
Vadim Karpenko 197af9d3e4 Remove sort keys 2022-12-13 07:20:44 +02:00
Vadim Karpenko 5e758a3b09 web: Generate catalog of all files for PWA caching 2022-12-13 07:18:50 +02:00
Tom Rothamel 1edeae716a doc: Add credit. 2022-12-12 22:10:46 -05:00
Tom Rothamel 461c5e823c Merge pull request #4151 from xareyli/launcher-ukrainian-typo
Update Ukrainian translation
2022-12-12 20:11:27 -05:00
xareyli 79ef560c06 Update Ukrainian translation 2022-12-12 22:43:20 +03:00
Tom Rothamel 2de0ec9bee Add Thai C90 font support to Ren'Py.
This is an encoding used with Thai fonts that contain precomposed
glyphs in the private use area.

Taken from https://gitlab.com/sahabandha/renpy-thai-font-adjuster ,
per #3864.
2022-12-11 23:44:07 -05:00
Tom Rothamel bd5f682196 Merge pull request #4150 from mal/console-dedupe
console: Only save command if not the same as last
2022-12-11 09:42:48 -05:00
Tom Rothamel 8ec6bb15fe pylance: Remove vars() related warnings.
The warnings seem to come from using vars() to mean object.__dict__,
so replace it with the latter.
2022-12-11 01:26:12 -05:00
Tom Rothamel acdd4ff468 Allow mouse keysyms to take modifiers.
Fixes #4122.
2022-12-10 22:01:06 -05:00
Tom Rothamel 305dd3636b launcher: When a launch fails, log it to the console. 2022-12-09 21:39:54 -05:00
Mal Graty fdd46102f4 console: Only save command if not the same as last 2022-12-10 01:46:27 +00:00
NattyanTV 80b0b2a792 Fix japanese translation case (#4148)
`Ren'PY` -> `Ren'Py`
2022-12-09 18:38:01 +01:00
Tom Rothamel 73f824ab1c py2: Remove use of f-string. 2022-12-09 09:21:58 -05:00
Gouvernathor 556e014e3a fix spaces in docstrings 2022-12-09 12:40:07 +01:00
琴梨梨 91e27ff475 web: auto mute video for autoplay 2022-12-09 16:38:51 +10:00
Gouvernathor 7cafef382b Add colon warning in the noblock lexer error 2022-12-09 01:22:02 +01:00
Tom Rothamel 4b16eebe57 Merge pull request #4126 from Vadim-Karpenko/master
web: Generate PWA icons and prepare files
2022-12-08 18:29:11 -05:00
Vadim Karpenko 3158cc8fba Set the preferred orientation from screen size 2022-12-07 19:04:01 +02:00
Vadim Karpenko 39dfe02350 Replace default project names with actual ones 2022-12-07 18:56:37 +02:00
Vadim Karpenko 385060334e Generate maskable icons, change compression 2022-12-07 09:30:03 +02:00
Tom Rothamel 59a4e6cb0b py311: Ensure python_strict exists.
This fixes an error where it's used in lexer.py, but doesn't exist
on Python 3.
2022-12-06 20:57:29 -05:00
Tom Rothamel d3bc7650fe steam: Rate-limit calls to BOverlayNeedsPresent
Fixes #3978, which is likely caused by a bug in this function on the
Steam Deck.
2022-12-05 01:22:00 -05:00
Tom Rothamel 7a7c4ec7e4 Merge pull request #4131 from renpy/duplicate-thumbnail-vars
Avoid re-defining two config variables
2022-12-04 21:59:26 -05:00
Tom Rothamel 9a68ea37f1 Merge pull request #4132 from renpy/autosphinx-knows-methods
Tag the callables properly when generating sphinx from docstrings
2022-12-04 21:59:09 -05:00
Tom Rothamel 58052bdb46 doc: More work on the dark theme. 2022-12-04 21:44:48 -05:00
Gouvernathor f4da18de2d doc-generation: tag the callables properly 2022-12-04 23:40:17 +01:00
Tom Rothamel 89fcde4dc3 doc: Fix color of pre in dark mode. 2022-12-04 17:34:58 -05:00
Gouvernathor f3d43f110c doc: avoid re-defining two config variables 2022-12-04 22:59:32 +01:00
Gouvernathor 8cdf2b45ee fix typo too 2022-12-04 22:43:35 +01:00
Gouvernathor 25ab46acd3 fix typo 2022-12-04 21:31:50 +01:00
Tom Rothamel 53df5499ea Link the various preplashes together. 2022-12-04 15:25:06 -05:00
Tom Rothamel df48f4d525 Merge pull request #4127 from renpy/web-doc
Web and presplash doc tweaks
2022-12-04 15:16:24 -05:00
Tom Rothamel 495d3bd66c Merge pull request #4128 from renpy/renpy.show-examples
Add doc examples for renpy.show
2022-12-04 15:15:17 -05:00
Tom Rothamel 2ce437871a Stop packaging atom and jedit.
Atom is an extension. Jedit is only available if it's already
present on the system.
2022-12-04 00:35:38 -05:00
Tom Rothamel 216ed01bee doc: Dark mode.
For the emo among you.
2022-12-04 00:35:38 -05:00
Gouvernathor 6f12af24d9 doc: Fix markup issue with code block in function's docstring
The block code inside the arg's block was causing an issue in the rendering of the HTML (for some reason).
The `::` was turned into a `.. code-block:: none` because as it's not proper ren'py syntax, it was issuing a warning about it when building - now it knows there's no proper syntax to expect there.
2022-12-04 01:15:46 +01:00
Tom Rothamel bcac0ed1a8 Merge pull request #4129 from renpy/new-doc-index
Upgrade toctrees for the new doc theme
2022-12-03 18:51:46 -05:00
Gouvernathor 9dc576fd30 orphan-out thequestion_nvl 2022-12-04 00:50:33 +01:00
Gouvernathor 0534264d1b orphan-out thequestion 2022-12-04 00:49:59 +01:00
Gouvernathor 9fc04f1fa4 Upgrade toctrees for the new doc theme 2022-12-04 00:31:53 +01:00
Tom Rothamel 41bba0cb14 doc: Remove over-copying from Patreon. 2022-12-03 09:42:08 -05:00
Gouvernathor 3746367531 doc: add examples for renpy.show 2022-12-03 14:58:28 +01:00
Gouvernathor e1a844a8af Update splashscreen_presplash.rst 2022-12-03 14:38:47 +01:00
Gouvernathor adf22f984e doc: Remove thanks and tweak presplash 2022-12-03 13:48:35 +01:00
Vadim Karpenko 0527380c7b web: Generate PWA icons 2022-12-03 13:11:42 +02:00
Tom Rothamel f793cec5d8 doc: Undocument config.gl2.
It's the primary renderer at this point, and games should not
disable it.
2022-12-03 02:36:36 -05:00
Tom Rothamel ab818456b0 Merge pull request #2934 from Gouvernathor/patch-2
[7.5+] Remove obsolete gl2 references
2022-12-03 02:32:46 -05:00
Tom Rothamel ca2e59e0a9 doc: Build with renpy3 from now on. 2022-12-03 02:28:30 -05:00
Tom Rothamel 923ff6442f doc: Fix rendering of variables. 2022-12-03 02:16:01 -05:00
Tom Rothamel 57e3331d81 doc: More work to make the documentation look good with the RTD theme. 2022-12-03 02:07:00 -05:00
Tom Rothamel cc69d17254 doc: Switch to using sphinx_rtd_theme. 2022-12-03 01:15:11 -05:00
Tom Rothamel 7326afc126 web, doc: Actually check in the web docs. 2022-12-02 18:14:09 -05:00
Tom Rothamel a4876166e4 Make DLC translatable. 2022-12-02 18:13:45 -05:00
Tom Rothamel 6df0957a4a Merge pull request #4121 from Neyunse/master
Differentiate DLC from other types of packages (Build)
2022-12-02 18:10:39 -05:00
Tom Rothamel 74da96c073 doc, android: Add a line about the version of android that is supported.
Fixes #4124.
2022-12-01 22:54:08 -05:00
Tom Rothamel b670f13108 web, docs: Merge web documentation.
Thanks to the Patreon sponsors.
2022-12-01 00:40:43 -05:00
Tom Rothamel c1999ebace web: Zip the game up. 2022-12-01 00:40:43 -05:00
Tom Rothamel 061b57c9ce Merge pull request #4123 from Vadim-Karpenko/master
web: fix to_unlink changes size during iteration error
2022-11-30 20:41:04 -05:00
Vadim Karpenko 5dfcada8ac Move current time out of the to_unlink loop
Improve the performance of the loop by avoiding calling for the current time on every step of the iteration. A few milliseconds won't make any difference and could be neglectable.
2022-11-30 16:15:36 +02:00
Vadim Karpenko 64b0b0bb84 Remove redundant accesses to the to_unlink 2022-11-30 16:05:17 +02:00
Vadim Karpenko b5928b26ed fix to_unlink changes size during iteration error 2022-11-30 08:26:24 +02:00
Tom Rothamel 9b1a20e049 web: Actually check in 00webvideo.rpy. 2022-11-29 22:38:16 -05:00
Tom Rothamel 099f0ffa6f web3: Merge webvideo playback in.
From the June 2022 Patreon article. Thanks, sponsors!
2022-11-29 22:05:59 -05:00
ねゆんせ 8b59103258 added: Differentiating DLC from other types of packages 2022-11-29 22:35:18 -03:00
Andy_kl 95f048272f live2d: Update lib install destination.
Fix mac destination. Remove Windows x32.
2022-11-29 18:25:20 +04:00
Tom Rothamel 24ed86da48 web3: Send wasm files with the wasm type.
This allows for a streaming compile and faster start, and also
prevents an error from being reported.
2022-11-28 00:32:19 -05:00
Tom Rothamel fafb45bbce bubble: Remove test code that snuck in. 2022-11-27 14:49:53 -05:00
Tom Rothamel ad90228ce1 web3: Handle the game title and presplash image. 2022-11-27 01:32:39 -05:00
Tom Rothamel f90a9b56cc web3: Unlock web3 in the launcher.
This makes it possible to use the launcher to make a web3 game.
2022-11-27 00:11:47 -05:00
Tom Rothamel a9a6bc8cf4 Merge pull request #4111 from Moshibit/master
Update Spanish translation
2022-11-25 23:08:42 -05:00
Tom Rothamel d87e8a3b9b web3: Select between web2 and web3 on distribute. 2022-11-25 00:20:19 -05:00
Tom Rothamel f1a6fec980 Only incluede bytecode-<ver>.rpyb for the current Python. 2022-11-24 21:34:43 -05:00
Tom Rothamel 2319e889c6 Include bubble.png in the Ren'PY build.
Fixes #4112.
2022-11-24 10:36:58 -05:00
Tom Rothamel 63caa1d436 Merge pull request #4101 from renpy/lint-blurb
Add a lint blurb to the launcher's splash
2022-11-24 09:39:35 -05:00
Gouvernathor 09b562836a Update blurb 2022-11-24 13:45:54 +01:00
Moshibit 1979fd0b61 Update options.rpy 2022-11-24 06:42:06 -06:00
valery-iwanofu 4b1e1fba88 Update cdd.rst
Added doc for Displayable.place() and updated doc for Render.place()
2022-11-24 13:16:31 +07:00
Tom Rothamel bf125a8795 Merge pull request #4090 from renpy/fix-4077
Fix star-import of substores
2022-11-23 22:33:23 -05:00
Tom Rothamel 444c885785 Merge pull request #4104 from Ayowel/fix/extension_sys_path
Add path cleanup when reloading extensions and extension __file__ context
2022-11-23 22:31:00 -05:00
Tom Rothamel 8af6ec55f1 Merge pull request #4110 from renpy/exports-questions
Fix some mistakes in exports.py
2022-11-23 22:28:56 -05:00
Gouvernathor 9f5df79973 Fix :other: 2022-11-24 00:09:32 +01:00
Gouvernathor b870c5b0dd Update exports.py 2022-11-23 21:33:58 +01:00
Tom Rothamel 21b507dc71 web3: Report progress loading the game script. 2022-11-22 23:22:42 -05:00
valery-iwanofu 4afce1d144 Update place method of render
Method Render.place() now returns d.place() result
2022-11-22 23:26:32 +07:00
Ayowel 185171c5f5 Add path cleanup when reloading extensions and extension __file__ context 2022-11-22 12:37:09 +01:00
Tom Rothamel 94218416d2 Include the python version in the bytecode cache.
This is mostly to support the web version, but it also means
that there won't be fights when Ren'Py 7 and Ren'Py 8 run the
same game.
2022-11-21 23:24:29 -05:00
Tom Rothamel 5ab5ae6e68 web3: Add functions that can be called to zip and unzip savefiles. 2022-11-21 01:23:34 -05:00
Gouvernathor ac663e2f1c Add a lint blurb 2022-11-18 22:27:02 +01:00
Gouvernathor f7ee13724e Use round to have accurate integral offset 2022-11-17 04:25:45 +01:00
Tom Rothamel d7e6438f8f Merge pull request #4081 from renpy/fix-4080
Fix #4080
2022-11-16 20:21:38 -05:00
Tom Rothamel 0a6e9fb1f0 Merge pull request #4097 from renpy/translate-voice-doc
Add examples of multi-language voicing
2022-11-16 20:21:15 -05:00
Tom Rothamel bb53cdb68a Merge pull request #4093 from Ayowel/fix/extension-load-order
Make extension load order reliable
2022-11-16 20:20:47 -05:00
Gouvernathor 8fc417b5e9 doc: clarify that break and continue don't exist in SLFor 2022-11-16 22:19:47 +01:00
Gouvernathor 679184ce79 Update voice.rst 2022-11-14 22:26:45 +01:00
Gouvernathor 4403a0c63c Add ref anchor 2022-11-14 22:22:48 +01:00
Gouvernathor e902707960 Update voice.rst 2022-11-14 22:21:52 +01:00
Ayowel 681cad1a44 Make extension load order reliable 2022-11-12 15:55:06 +01:00
Gouvernathor cf6d2559ec fix translation 2022-11-11 22:24:35 +01:00
Gouvernathor d0067052a8 Fix wrong encoding leading to star-import malfunctions 2022-11-11 14:59:55 +01:00
Tom Rothamel c7ce911edc Merge pull request #4087 from llyama/queue-sound-fadein
Queue sound can now use fadein
2022-11-10 18:19:09 -05:00
llyama ef7c7f1b35 Fixed missing quotes 2022-11-10 17:56:16 +00:00
llyama b839a1e080 Queue sound can now use fadein
Fixes renpy/renpy#4086
2022-11-10 17:26:25 +00:00
Moshibit 3280d36230 Spanish translation update (#4085)
* Update common.rpy

* Update developer.rpy

* Update screens.rpy
2022-11-09 21:12:21 +01:00
Gouvernathor 68a36dae39 Add french translations 2022-11-08 18:57:22 +01:00
Gouvernathor bbb6587495 fix typos in the standard screens.rpy 2022-11-08 18:56:28 +01:00
Gouvernathor 511288f86d Fix typo 2022-11-08 18:44:09 +01:00
Gouvernathor 89342fc956 Fix subsurface offset when oversampling 2022-11-08 16:17:22 +01:00
Gouvernathor f98476e8cf Fix quoting and update sentence translation 2022-11-08 11:46:18 +01:00
Gouvernathor b0cee97f26 Remove the "expansion files" reference 2022-11-08 11:44:05 +01:00
Tom Rothamel 78d839b94a Merge pull request #4075 from renpy/regchandoc
Reserve spaces in register_channel's names
2022-11-08 00:25:21 -05:00
Gouvernathor 75aea66d16 Translate the changed string
Translation source is here https://support.google.com/googleplay/android-developer/answer/186113?hl=fr
2022-11-08 02:16:46 +01:00
Gouvernathor fa63ace6a7 Change the location of the android license key in the Play console 2022-11-08 02:13:18 +01:00
Tom Rothamel 5520142001 web3: Fix webaudio to run under Python 3. 2022-11-07 01:07:41 -05:00
Tom Rothamel ccb075ea53 py311: Fix end_lineno and end_col_offset locations.
These were being set, but being set incorrectly, which violates
the invariant (enforced by Python 3.11) that the end location
must be after the starting location.

This enforces that the end of each node is after it's start,
and after the end of each of the node's children.
2022-11-07 00:18:59 -05:00
Tom Rothamel 6a2d2632ce web3: Do not create threads on renpy.emscripten.
Unlike web2, where we stubbed out the threading module that wasn't
being compiled, on web3 we use the Python threading module and simply
don't create threads. This is because the locking exists, and so
doesn't need to be stubbed - just the thread starts.
2022-11-06 11:47:00 -05:00
Gouvernathor 57d67b78c8 doc: advise the use of valid identifiers
uses a link to the official python doc
2022-11-05 23:29:28 +01:00
Gouvernathor 2aa3e9b6e1 doc: reserve spaces in register_channel 2022-11-05 23:18:37 +01:00
Gouvernathor ce206baa88 doc: fix nested markup
You can't have a ref/link within bold or italics, aka nested markups, see 55b00d4 and https://stackoverflow.com/questions/72773716/
2022-11-05 22:34:18 +01:00
Tom Rothamel fb63d447f0 Add a link from the changelog to the incompatible changes page. 2022-11-05 00:09:54 -04:00
Tom Rothamel 19d4a18315 Merge pull request #4061 from renpy/3994-format-typo
Pylint - Fix wrong formatting in exception raising
2022-11-04 23:58:28 -04:00
Tom Rothamel 31ab083352 Merge pull request #4072 from Elckarow/patch-2
use `zorder 0` for the gl test
2022-11-04 23:58:14 -04:00
Elckarow 8bee5d2a77 use zorder 0 2022-11-04 21:41:50 +01:00
Tom Rothamel 4385af9f75 Merge pull request #4063 from DinakiS/translate_fix
Fix: alternate translation
2022-11-02 23:02:48 -04:00
Tom Rothamel c01dfa32c3 doc: Make it clear that dynamic and context_dynamic take variables. 2022-11-01 21:13:41 -04:00
Tom Rothamel cf7df895a1 Move to notarytool to sign on mac. 2022-11-01 20:02:53 -04:00
Tom Rothamel fb00ffadc4 Merge pull request #4066 from renpy/new-sphinx
Various issues in the doc
2022-11-01 20:01:16 -04:00
Gouvernathor a61f28b0de doc: yet another forgotten label (for the lifecycle page) 2022-11-01 18:53:10 +01:00
Gouvernathor f5ae0db8bd doc: add other missing internal label targets 2022-11-01 18:41:31 +01:00
Gouvernathor 12ba529632 doc: fix dubious internal reference 2022-11-01 18:40:58 +01:00
Gouvernathor bcee7753e6 doc: do not declare the same variable twice
The other is in store_variables.rst .
2022-11-01 18:32:05 +01:00
Gouvernathor 2b913ae540 doc: typos 2022-11-01 18:31:17 +01:00
Gouvernathor a1e4a44069 doc: add missing internal label target 2022-11-01 18:31:08 +01:00
Gouvernathor b36a574f3c doc: use the anonymous inline syntax for hyperlinks 2022-11-01 18:30:49 +01:00
Gouvernathor 15910d0954 Merge remote-tracking branch 'origin/maint-8.0' into new-sphinx 2022-11-01 18:24:26 +01:00
Gouvernathor 5894a59d5c doc: typo 2022-11-01 16:46:21 +01:00
Tom Rothamel 1d9b6414aa bubble: Allow the speech bubble editor to persist through rollback.
Previously, rollbacks (like ones caused by the SBE) would hide the
screen.
2022-10-31 21:02:59 -04:00
Tom Rothamel f476b87a5d mac: Set CFBundleIdentifier when distributing Ren'Py. 2022-10-31 20:14:12 -04:00
Tom Rothamel 8f18cde853 py2: Fix more issues generating json files. 2022-10-31 03:21:17 -04:00
Tom Rothamel 6cf589429d Remove the (long empty) autobuild script. 2022-10-31 02:28:21 -04:00
Tom Rothamel 743bae43c3 py2: Fix creating the rapt/renios hash files. 2022-10-31 02:27:41 -04:00
Tom Rothamel 509f16865a Fix copilot-injected error.
An incorrect import was added.
2022-10-31 02:01:41 -04:00
Tom Rothamel 72815a4915 py3: Avoid compiling renpy.compat.dictviews.
This module won't work on 3.11, but won't be imported there
anyway, so there is no reason to import it.
2022-10-30 20:40:40 -04:00
Tom Rothamel b4a76f1e61 bubble: Check in the default bubble image. 2022-10-30 01:39:22 -04:00
Tom Rothamel d02b5c5fdb Allow the console's help command to be called during doc generation. 2022-10-30 01:34:14 -04:00
DinakiS 9bffa67c7f Fix: alternate translation 2022-10-29 17:24:53 +03:00
Tom Rothamel ec8093f8dc pyright: Fix all current issues. 2022-10-28 18:25:04 -04:00
Gouvernathor a71df01691 Fix wrong formatting in exception raising (7edb69b) 2022-10-28 13:43:48 +02:00
Tom Rothamel 77460ec62f Fix or removed unused variables.
Fixes #4044.
2022-10-27 22:49:54 -04:00
Gouvernathor 7467eb8934 Repeal part of #4050 (hotfix)
The function is actually called inside renpy.compat, so importing sys after importing renpy.compat is already too late.
It could be considered to use `global sys;import sys` in the function, or to import sys just before or after defining the function, but I'd rather keep things the way they were.
2022-10-27 15:22:57 +02:00
Tom Rothamel e5cb5868a7 Merge pull request #4047 from renpy/3994-slots
Pylint - Remove overriden slot name
2022-10-26 21:35:33 -04:00
Tom Rothamel e908bed1e2 Merge pull request #4052 from renpy/3994-bare-except
Fix bare except statements
2022-10-26 21:03:51 -04:00
Tom Rothamel 8da53babbf Merge pull request #4045 from renpy/3994-listcomp
Pylint - Remove useless list comprehensions
2022-10-26 21:03:17 -04:00
Tom Rothamel a0208228bd Merge pull request #4046 from renpy/3994-builtin-literals
Pylint - Use literals instead of builtin types constructors
2022-10-26 21:02:55 -04:00
Tom Rothamel 9516d35b0c Merge pull request #4048 from renpy/3994-with
Pylint - Use the with statements
2022-10-26 21:02:09 -04:00
Tom Rothamel e06925e208 Merge pull request #4049 from renpy/3994-shadow
Pylint - Avoid shadowing the function parameter
2022-10-26 21:01:41 -04:00
Tom Rothamel 0e2dce0976 Merge pull request #4050 from renpy/3994-reimports
Pylint - Avoid unnecessary reimports
2022-10-26 21:01:20 -04:00
Tom Rothamel 2729df6eca Merge pull request #4051 from renpy/3994-unused
Pylint - Flag or remove unused variables
2022-10-26 21:01:01 -04:00
Tom Rothamel 630f673d28 Merge pull request #4053 from renpy/3994-global
Pylint - Remove useless global statements
2022-10-26 21:00:34 -04:00
Tom Rothamel 03bf21141d Merge pull request #4054 from renpy/3994-dict-iter
Pylint - Optimize dict iteration
2022-10-26 20:59:50 -04:00
Tom Rothamel 59898271d0 Merge pull request #4055 from renpy/3944-useless-statements
Pylint - Remove useless statements
2022-10-26 20:59:23 -04:00
Gouvernathor 788ebab40c Fix some french translations 2022-10-26 23:30:12 +02:00
Asriel Senna 5dbc2c1da3 Remove useless statements (8e188cc) 2022-10-26 19:44:36 +02:00
Asriel Senna 257c95e2b2 Optimize dict iteration (9b884d3) 2022-10-26 19:41:20 +02:00
Gouvernathor 402d04d054 Remove useless global statements 2022-10-26 19:38:17 +02:00
Gouvernathor ab6023371c fix bare except statements 2022-10-26 19:33:21 +02:00
Asriel Senna e64242c9a2 Remove unused as e clauses from raise statements 2022-10-26 16:52:48 +02:00
Asriel Senna a8bf2e0246 Mark unused variables from tuple unpackings 2022-10-26 16:52:12 +02:00
Asriel Senna 82fb38560e Avoid unnecessary reimports (2904149) 2022-10-26 16:40:51 +02:00
Asriel Senna 25edfa0542 Avoid shadowing the function parameter (73c8575)
`layer` is passed as parameter, and this loop generates a `layer` 
variable
2022-10-26 16:36:58 +02:00
Asriel Senna f8864d8b90 Use the with statements (58a2950) 2022-10-26 16:31:56 +02:00
Asriel Senna 001ce8acd0 Remove overriden slot name
wastes memory and may break in a future version of python, see point 6 
of this : 
https://docs.python.org/3/reference/datamodel.html#notes-on-using-slots
2022-10-26 16:27:09 +02:00
Asriel Senna 13cf71b2ea Use literals instead of builtin types constructors 2022-10-26 16:23:04 +02:00
Asriel Senna ea95338e69 Remove useless list comprehensions (1d08817) 2022-10-26 16:15:24 +02:00
Tom Rothamel 57721bacb2 Merge pull request #4039 from pazkero/patch-1
Fix bugs on steam.get_session_ticket
2022-10-24 17:17:20 -04:00
Jesusaves 4269d45411 Fix bugs on steam.get_session_ticket
Without these changes imposed by Python3.9, calling get_session_ticket() raises two exceptions.
2022-10-24 14:51:19 -03:00
Tom Rothamel 65e03993dc Only set compresslevel on Python 2. 2022-10-21 21:25:42 -04:00
Noriverwater cb35c75d9c Merge branch 'master' into 4018 2022-10-21 19:20:14 +08:00
Tom Rothamel 01cef5d7df cds: Document that init and execute_init don't play well together.
Fixes #4032.
2022-10-20 23:36:33 -04:00
Tom Rothamel 0f8576f18b Custom statement execute_init now respect init priority.
When looking into #4032, I noticed it didn't.
2022-10-20 23:22:23 -04:00
Noriverwater fbb80afbeb Merge branch 'master' into 4018 2022-10-20 19:31:16 +08:00
Tom Rothamel 92c7691789 Add config.physical_width and config.physical_height.
These are variables that let the creator set the default size
of the game window separately from config.screen_width and
config.screen_height.
2022-10-19 01:50:58 -04:00
Noriverwater 6116646094 Doc:config.history_current_dialogue 2022-10-18 21:50:28 +08:00
Noriverwater 8edaa7cf50 Add config.history_current_dialogue 2022-10-18 21:47:08 +08:00
Noriverwater eccf8a560d Add configuration variables to implement it 2022-10-18 21:42:31 +08:00
Tom Rothamel 8157c5d8c5 Standardize variable naming. 2022-10-18 01:34:44 -04:00
Tom Rothamel 7675251049 Merge pull request #4027 from qTich/fix/persistent-MP
fix & changes: bypassing exception on `MP.save`, some functions, docs for `MP`
2022-10-18 01:33:02 -04:00
Tichq 7a3322740d changes for _MultiPersistent
-- review for naming of variables;
-- add field for `MP`: `_name`, `_save_on_quit`;
-- functions:
-- -- `save_MP` as `save_on_quit_MP` with check on  `_save_on_quit`
-- -- `save_MP` called for every `MP` instances;
-- -- `get_MP` returns `MP` instance` if has already been created before;
-- add some docs.
2022-10-17 22:29:47 +03:00
Tichq 61393dbb0e fix: bypassing exception on try save MP 2022-10-17 22:27:55 +03:00
Tom Rothamel a8896e3d1b oversample: Doc. 2022-10-17 01:06:44 -04:00
Tom Rothamel 7ae59e8ad2 oversample: Make image auto-defining aware of @oversample. 2022-10-16 22:43:20 -04:00
Tom Rothamel 7d20837ee6 oversample: Automatically oversample based on the image filename. 2022-10-16 22:12:10 -04:00
Tom Rothamel d4326ee4a7 Add image oversampling.
This allows an image to be interpreted as a smaller image for the
purpose of layout. For example, a 2048x2048 image with 2x oversampling
will be considered as a 1024x1024 image for layout purposes.

But if the window is scaled up, then the additional detail will be
there.
2022-10-16 00:43:55 -04:00
Tom Rothamel 4e69fcb3ec Merge pull request #3983 from methanoliver/master
Documenting the pitfall of animated shaders.
2022-10-15 10:06:18 -04:00
Tom Rothamel 10b057285c Merge pull request #4022 from qTich/fix/shutil-copyfile
fix: bypassing an exception when trying to copy a save file.
2022-10-14 23:42:15 -04:00
Tom Rothamel b7c2f240a1 bubble: Add the speech bubble editor to the developer menu. 2022-10-14 21:54:50 -04:00
Tichq 0832600b45 fix: bypassing an exception when trying to copy a save file. 2022-10-14 14:25:44 +03:00
Tom Rothamel 2ed24851ad Merge pull request #4017 from renpy/platform-presplash
Document platform-specific presplash images
2022-10-14 00:03:32 -04:00
Tom Rothamel 48a54c7c2a bubble: Copy the bubble image over as part of game generation. 2022-10-13 01:04:32 -04:00
Tom Rothamel 21072e5722 bubble: Add bubble styles and screens to the default project. 2022-10-13 00:23:51 -04:00
Tom Rothamel dfeb401352 bubble: Substantial rewrite.
Previously, properties were configured one at a time. This didn't
allow realistic customizations, which often require groups of properties
to be customized together, so bubble has been rewritten to allow this.
2022-10-12 01:49:27 -04:00
Gouvernathor c4626cbde6 Add android-presplash anchor 2022-10-11 11:03:49 +02:00
Gouvernathor e53f40ab07 Add the web presplash and a ref to the android presplash 2022-10-11 11:02:49 +02:00
Tom Rothamel bfc28665c1 rapt: Include the native symbols in the build directory.
Fixes #3806.
2022-10-11 00:54:44 -04:00
Tom Rothamel 2a8a9fc3a2 Merge pull request #4013 from JeremyRand/gcc
Fix RENPY_DEPS_INSTALL docs for armhf, ppc64, and ppc64le
2022-10-10 19:31:18 -04:00
Tom Rothamel ee18060e25 Add the show_cancels_hide transform property.
This controls if showing a displayable or screen with the same
tag or name cancels a hide transition.
2022-10-09 23:39:29 -04:00
Tom Rothamel 11e72ba9f4 bubble: Avoid showing the narrator window when a bubble is up.
When window auto is true, this will hide the narrator window when
bubbles appear.

This also changes the priority of say-condition-false and say-centered
so the former takes priority, which is more likely correct.
2022-10-08 23:22:40 -04:00
Jeremy Rand 5c3f39b1ff Fix RENPY_DEPS_INSTALL docs for armhf, ppc64, and ppc64le
The correct triplets for various arches are:

x86_64-linux-gnu
arm-linux-gnueabihf
powerpc64-linux-gnu
powerpc64le-linux-gnu

The uname-based instructions produced the following:

x86_64-linux-gnu (correct)
armv7l-linux-gnu (wrong)
ppc64-linux-gnu (wrong)
ppc64le-linux-gnu (wrong)

gcc produces the correct results for all four.  I suspect this will also
fix non-GNU triplets such as musl, but didn't test those.
2022-10-08 14:06:37 +00:00
Tom Rothamel 778ae30bcd bubble: Allow any property to be given an area.
This might make things more flexible, as the area can be supplied to
the screen through a show_ property instead of window_area, if
the creator wants.
2022-10-08 01:06:11 -04:00
Tom Rothamel 7cc7de4199 bubble: More implementation.
* Cycling through the non-area properties.
* Right-click to remove a property.
* Check that ptoperty contents can be saved.
2022-10-08 00:31:23 -04:00
Tom Rothamel 99ea82e20c bubble: Implement window area editing. 2022-10-07 22:55:23 -04:00
Tom Rothamel 1f7c5184af bubble: WIP
* Use the on_show method to set character properties for a speech
  bubble.
* Work on the _bubble_editor screen, which allows a property to be
  selected for editing.
2022-10-07 22:16:17 -04:00
Tom Rothamel 784d978a0d doc: Document that Ren'Py might use all_character_callbacks. 2022-10-07 00:15:21 -04:00
Tom Rothamel 174f784c28 bubble: Allow Character.on_show and Character.on_predict to take extra properties.
These add to the properties that would normally be
suppled by the Character itself, allowing BubbleCharacter
to customize how the screen is displayed.
2022-10-06 23:24:30 -04:00
Tom Rothamel 2df014314a Add RENPY_MAX_TEXTURE_SIZE environment variable.
To make it easier to test issues that only manifest with particular
texture sizes.
2022-10-05 23:48:34 -04:00
Tom Rothamel 4e5739abe1 Merge pull request #4011 from Elckarow/patch-1
fix drag drop screen example
2022-10-05 22:50:37 -04:00
Elckarow 59c2e84aac fix example 2022-10-05 14:10:05 +02:00
Tom Rothamel cb2d32ec4e bubble: Check in WIP speech bubble project.
This currently can generate default values, and propagate them
all the way to dialogue.
2022-10-05 00:30:15 -04:00
Tom Rothamel c73bbff581 Merge pull request #4003 from Andykl/modules-in-tl
Fix wrong .rpymc loading.
2022-10-04 21:08:15 -04:00
Tom Rothamel 3a764acea5 Merge pull request #4008 from Andykl/fix-4007
Fix change_language during menu-with-say.
2022-10-04 00:02:48 -04:00
Andy_kl d2fbf45f71 Fix change_language during menu-with-say. 2022-10-04 05:50:30 +04:00
Tom Rothamel 02531cb4da Merge pull request #4006 from Chrisclone/master
Added help <expr> for existing commands
2022-10-03 19:44:07 -04:00
Chrisclone 0d403f6f9a Added help <expr> for existing commands 2022-10-02 21:01:57 -04:00
Tom Rothamel 791cfdcd5f Remove code left in by mistake. 2022-10-02 16:14:24 -04:00
Tom Rothamel 6ef863793e Rename config.label_callback to config.label_callbacks. 2022-10-01 16:32:47 -04:00
Tom Rothamel 7f9ac2494e Make config.label_callback a list. 2022-10-01 16:27:05 -04:00
Tom Rothamel 8f241763c1 Fix text of syntax errors in a python block.
By offsetting the line number, and retreiving the text from the source.
2022-10-01 15:45:50 -04:00
Tom Rothamel d1aef49c5d Remove obsolete portions of developer.rpym. 2022-10-01 02:00:15 -04:00
Tom Rothamel ac9821b439 Use a single list of image extensions.
For the images directory and the image location picker.
2022-10-01 01:55:31 -04:00
Tom Rothamel d6c7f73dba Rewrite the image location picker in terms of areapicker.
Areapicker is very similar to the custom ilp displayable, so it
makes sense to focus on areapicker and remove the old displayable.
2022-10-01 01:52:45 -04:00
Tom Rothamel f3bfc91311 doc: Update the list of extensions that are automatically defined in the images direcotry.
The .jxl extension is here so I won't forget to change this again
when JXL support lands.

Fixes #4004.
2022-10-01 01:52:45 -04:00
Mal Graty 097da86793 Restore missing at_list assignment
It went walkabout in 6338a144f7.
2022-09-30 21:37:23 +01:00
Tom Rothamel ce8f33d671 areapicker: Include the position callback.
This will allow the image location picker to be rewritten in
terms of areapicker.
2022-09-29 23:06:48 -04:00
Andy_kl d38bc47030 Fix wrong .rpymc loading.
This fixes behavior of renpy.load_module if it exists both
in game and tl directory.
2022-09-30 02:44:20 +04:00
Tom Rothamel 0d876b0367 Add the AreaPicker displayable.
This is a displayable that allows the user (generally the creator)
to pick a rectangular area on the screen. The intended use of this
is to support placing balloon dialogue onto the screen, though
other uses might be possible.
2022-09-28 21:04:29 -04:00
Tom Rothamel 1883815cc5 Various edits to the lifecycle documentation. 2022-09-27 21:55:14 -04:00
Tom Rothamel 2518998099 Document and add a warning to the new console help function. 2022-09-27 21:30:14 -04:00
Tom Rothamel ebe79d1c92 Merge pull request #3995 from renpy/lifecycle
Lifecycle doc page
2022-09-27 21:29:03 -04:00
Tom Rothamel 78a122a24b Merge pull request #3996 from renpy/substore-doc
More documentation for named stores
2022-09-27 21:23:39 -04:00
Gouvernathor ec6f83731e Add renpy.clear_attributes (#3938) 2022-09-27 21:22:36 -04:00
Gouvernathor 6338a144f7 Use easy.to_list and easy.to_tuple (#3948)
This adds two new functions, renpy.easy.to_list and renpy.easy.to_tuple, that convert objects to lists or tuples as required.

Co-authored-by: Mal Graty <mal.graty@googlemail.com>
2022-09-27 21:18:46 -04:00
Tom Rothamel 0b056f1615 Merge pull request #3890 from Andykl/console-help
Add help <expr> into console commands.
2022-09-26 22:13:15 -04:00
Tom Rothamel 1e908ee265 Merge pull request #3998 from renpy/revertable-random-rv
Make random choices and sample methods return revertable lists instead of _list
2022-09-26 22:11:51 -04:00
Gouvernathor e78f5655ef Account for py2 2022-09-26 23:00:53 +02:00
Gouvernathor aa6c2acdff Make random methods return revertable lists instead of _list
works better with the wrapper included
2022-09-26 19:40:18 +02:00
Gouvernathor 4750d5cb15 typo 2022-09-26 14:09:56 +02:00
Tom Rothamel f1fa93e068 jsondb: Prevent JSONDBs from participating in rollback. 2022-09-25 20:52:07 -04:00
Gouvernathor ea474c9705 Add python early and more example 2022-09-25 19:15:12 +02:00
Gouvernathor 021fd6ca32 Add more documentation for named stores 2022-09-25 18:44:50 +02:00
Tom Rothamel 131491e8ac jsondb: Rewrite to have the API reflect the two-level structure.
There are use cases (like multiple dialogue) where it makes sense
to have two levels of information in play.
2022-09-25 01:23:08 -04:00
Tom Rothamel 91ecbb8719 pyright: Triage and fix or ignore type issues in new vscode. 2022-09-24 00:03:35 -04:00
Asriel Senna 1dd0af0aca Tweak explanations 2022-09-24 04:46:06 +02:00
Tom Rothamel c72865e791 Fix type issue using matrixtransform
Fixes #3980 by converting callable TransformMatrix objects into
real Matrix objects.
2022-09-23 22:25:08 -04:00
Asriel Senna 4570ab6023 Add a lifecycle doc page 2022-09-24 04:03:35 +02:00
Tom Rothamel 31e2d8b49b Merge pull request #3984 from renpy/drain-other
Move some functions from the "Others" page to more specific places in the doc
2022-09-23 20:19:33 -04:00
Gouvernathor fccda46404 Remove bogus onlayer parsing on scene statements
The layer variable was never used, c77a11382d contained that mistake all along
2022-09-23 22:53:10 +02:00
Gouvernathor 677d3493d4 typos 2022-09-23 10:45:00 +02:00
Tom Rothamel 9572d20bcb JSONDB improvements.
* Document.
* Allow `key` to be "dialogue"
* Add the `default` argument.
* Run at low init level.
2022-09-22 23:07:39 -04:00
Tom Rothamel 53a28e0cba Add the renpy.get_translation_identifier function.
Which does what it says on the tin.
2022-09-22 23:07:39 -04:00
Gouvernathor 5400aa5db3 doc: remove obsolete reference to jEdit 2022-09-22 00:44:10 +02:00
Adam Trzypolski f55c9f792d Correct syntax. 2022-09-22 01:12:46 +03:00
Tom Rothamel 24dadde724 Add the JSONDB.
This is the intial creation of a new construct for in-game, non-script
programming. For example, a system for displaying dialogue in popup
bubbles could use a JSONDB with the correct key to choose popup
bubble location.
2022-09-21 13:15:55 -04:00
Tom Rothamel 9ee5d24d4b Merge pull request #3985 from renpy/layers-doc
Advise renpy.add_layer instead of config.layers
2022-09-20 21:41:28 -04:00
Gouvernathor d8a56af3da doc: fix CDS example
The error message needs to be reported as an error, otherwise it's pointless.
2022-09-21 02:43:54 +02:00
Gouvernathor f5c7f79db7 doc: remove reference to obsolete framework
per #3987
until/unless the framework is upgraded to more recent standards of renpy code
2022-09-20 12:26:21 +02:00
Tom Rothamel ed831f5e6c Add config.scene_callbacks.
This is a list of functions that are called when the scene statement is
run or renpy.scene is called.
2022-09-19 09:16:08 -04:00
Gouvernathor b7d2220198 doc: tweak layers documentation 2022-09-19 13:06:11 +02:00
Gouvernathor 3b1a612502 Move add_layer from other to displaying_images 2022-09-19 12:56:12 +02:00
Gouvernathor 1c2865b1f5 Move call/invoke_in_new_context in the Contexts group 2022-09-19 12:44:21 +02:00
Gouvernathor da1d3c47b6 Move jump_in_new_context to the Contexts group 2022-09-19 12:41:53 +02:00
Adam Trzypolski c1b6d2de4d Incorporate suggestions. 2022-09-19 13:39:55 +03:00
Gouvernathor b9b34c9bae Move the Contexts group to label
More explanation about what a context is could be a good addition to this part.
2022-09-19 12:30:52 +02:00
Gouvernathor 5bd61be8a6 Move the Contexts group to label (1/2) 2022-09-19 12:30:50 +02:00
Gouvernathor e24ac8c25f Move context_dynamix to the context group 2022-09-19 12:18:34 +02:00
Gouvernathor cbb204cf37 Move substitute from other to text 2022-09-19 12:10:25 +02:00
Gouvernathor 5c3998f7ac Move flush_cache_file from other to displaying_images 2022-09-19 12:00:16 +02:00
Gouvernathor e8e20936e0 Move dynamic from other to label, clarify it, and avoid shadowing 2022-09-19 11:55:32 +02:00
Gouvernathor 8a369831dc Move clear_keympa_cache from other to keymap 2022-09-19 11:31:13 +02:00
Gouvernathor bdc3f51807 Include keymap-related function(s) in the keymap page 2022-09-19 11:29:08 +02:00
Gouvernathor 00cf228d4e Move call_stack_depth from other to label 2022-09-19 11:24:44 +02:00
Gouvernathor 588dac2776 Move get_adjustment from other to screen_python 2022-09-19 11:21:51 +02:00
Asriel Senna e732cf1db3 Update some launcher translations
Some languages wer untouched, as I don't know what part of the sentence 
to remove.
2022-09-19 11:17:01 +02:00
Gouvernathor 27475ae7f8 doc: clarify that language_tailor has nothing to do with Character 2022-09-19 10:52:27 +02:00
Gouvernathor 5775310ea8 Move pop_call from other to label 2022-09-19 10:31:06 +02:00
Gouvernathor b27deb794f doc: update obsolete description 2022-09-19 10:27:42 +02:00
Gouvernathor c57f3ae4cd doc: improve local labels documentation 2022-09-18 21:46:58 +02:00
Adam Trzypolski ca98796799 Documenting the pitfall of animated shaders. 2022-09-18 20:34:53 +03:00
Tom Rothamel 8c6903b552 mac: Use mac-universal programs and libraries.
This allows us to run natively on M1 and M2 Macs.
2022-09-18 00:59:02 -04:00
Tom Rothamel 12f0318b5c doc: Update keywords.py. 2022-09-18 00:57:54 -04:00
Gouvernathor 86b8b208ef doc: reminder for the values of tooltip 2022-09-15 19:02:35 +02:00
Tom Rothamel f3535a6456 Merge branch 'maint-8.0' 2022-09-15 01:37:34 -04:00
Tom Rothamel 49e42c56b3 Merge pull request #3974 from renpy/more-li-doc
More layeredimage documentation
2022-09-15 01:36:45 -04:00
Gouvernathor 6994aa94d0 doc: anchor the ref 2022-09-13 11:56:09 +02:00
Gouvernathor 3036fbd107 Attempt to explain the if_ clauses and tweak explanations 2022-09-13 11:54:22 +02:00
Tom Rothamel 711979985e doc: Document the changes to Viewport. 2022-09-12 21:23:52 -04:00
Tom Rothamel 9b2e6eee39 Merge pull request #3949 from via-my/master
Fix sticky draggable viewport
2022-09-12 21:13:28 -04:00
Gouvernathor f4d184eb41 doc: case(s) when the menu is skipped 2022-09-12 00:39:58 +02:00
Tom Rothamel 889394c7f3 web: Use the correct mime type for mp3 audio.
Fixes #3969.
2022-09-11 14:43:09 -04:00
Tom Rothamel 8d3cd5bb85 doc: Improve config.always_shown_screens. 2022-09-11 14:38:58 -04:00
Totally a booplicate 3b0b01f5f0 add sanity check
in case somebody loads an empty module
2022-09-09 18:39:40 +03:00
Gouvernathor f0aba80b81 doc: reference minimum_presplash_time in presplash 2022-09-09 12:44:17 +02:00
Totally a booplicate 3b7bd5c4b8 remove decorated sort
As of Python 2.3 the sorting algo is guaranteed to be stable and decorate-sort-undecorate approach is not needed anymore
2022-09-09 10:01:08 +03:00
Totally a booplicate 54934084cb remove debug print 2022-09-09 09:57:51 +03:00
Totally a booplicate 4174161a66 also sort load_string nodes 2022-09-09 09:49:13 +03:00
Totally a booplicate bb9bd717c4 implement include_module 2022-09-09 09:48:02 +03:00
Tom Rothamel 814b4abddd Merge branch 'maint-8.0' 2022-09-09 02:11:44 -04:00
Tom Rothamel 23e313d5e0 doc: Changelog. 2022-09-08 22:18:18 -04:00
Gouvernathor 9335935c05 Allows the launcher to performrepair updates 2022-09-08 22:05:48 -04:00
Tom Rothamel 9b1f65b824 Merge pull request #3954 from renpy/allow-repair-updates
Allows the launcher to perform repair updates
2022-09-08 22:05:17 -04:00
Totally a booplicate c7666a4ee0 sort AST before running them 2022-09-08 22:04:19 -04:00
Tom Rothamel b1c5e51b86 Merge pull request #3956 from renpy/more-li-doc
More Layeredimage documentation
2022-09-08 22:03:54 -04:00
Tom Rothamel 15f7626ed2 Merge pull request #3959 from Booplicate/fix_load_module
Fix `renpy.load_module` not respecting init order
2022-09-08 22:01:31 -04:00
Tom Rothamel d8fd60c76f Fix translations. 2022-09-08 22:00:36 -04:00
Tom Rothamel 0944f09a1f Integrate the new Ukrainian translations. 2022-09-08 22:00:05 -04:00
Tom Rothamel 6d1075f03d Add Ukrainian translation of the launcher.
Authored by @smq_denya on Twitter.
2022-09-08 21:46:34 -04:00
Tom Rothamel d912b27723 Add Ukrainian translation of The Question.
Authored by @smq_denya on Twitter.
2022-09-08 21:33:26 -04:00
Tom Rothamel aae939286a Update the Ukrainian translation.
Authored by @smq_denya on Twitter.
2022-09-08 21:02:49 -04:00
Totally a booplicate 8ff3aa697c sort AST before running them 2022-09-09 03:22:00 +03:00
Gouvernathor 2c04b71cc2 More Layeredimage documentation 2022-09-08 12:14:06 +02:00
Tom Rothamel f9d1070da7 Merge branch 'maint-8.0' 2022-09-07 23:49:02 -04:00
Tom Rothamel 5046d3bbf4 doc: Update changelog and sponsors. 2022-09-07 23:27:57 -04:00
Tom Rothamel b9afd575f6 Check in .vscode/settings.json.
Set to hide compiled files.
2022-09-07 09:17:34 -04:00
Tom Rothamel ea963c581c Merge branch 'maint-8.0' 2022-09-07 09:14:23 -04:00
midgethetree 81597000a4 Improve lint for say attributes
Applies config.adjust_attributes to say attributes when linting, so lint won't report errors for say statements which work in-game.
2022-09-07 09:14:12 -04:00
Tom Rothamel 2867d4b347 Merge pull request #3901 from midgethetree/fix-lint-say-attributes
Improve lint for say attributes
2022-09-07 09:11:07 -04:00
Gouvernathor 8c95ed33a5 Allows the launcher to performrepair updates 2022-09-07 13:56:19 +02:00
Tom Rothamel 03bd609d52 doc: Changelog. 2022-09-06 22:11:17 -04:00
LaUwUrence f1ed9d0b18 Additional zero check for renpy_blur (#3951)
* Fix sticky draggable viewport

Forget the initial drag position if the visible dragging was not started and the player unpressed LMB.

* Make it possible to use either bool or variant

* Remove the gap

Removes the gap that was noticeable if `config.viewport_drag_radius` was set to a large value.

* Additional zero check

Do not let the image disappear if the final image weight is zero.

* Removed wrong changes
2022-09-06 22:02:40 -04:00
LaUwUrence 1daceab8ee Additional zero check for renpy_blur (#3951)
* Fix sticky draggable viewport

Forget the initial drag position if the visible dragging was not started and the player unpressed LMB.

* Make it possible to use either bool or variant

* Remove the gap

Removes the gap that was noticeable if `config.viewport_drag_radius` was set to a large value.

* Additional zero check

Do not let the image disappear if the final image weight is zero.

* Removed wrong changes
2022-09-06 21:48:17 -04:00
LaUwUrence 89a569da5a Remove the gap
Removes the gap that was noticeable if `config.viewport_drag_radius` was set to a large value.
2022-09-06 02:31:44 +04:00
LaUwUrence ae823ccb10 Make it possible to use either bool or variant 2022-09-06 02:16:46 +04:00
LaUwUrence c8a25fb409 Fix sticky draggable viewport
Forget the initial drag position if the visible dragging was not started and the player unpressed LMB.
2022-09-06 02:01:56 +04:00
Tom Rothamel 44f50623e7 doc: Changelog {size=*2.0}, etc. 2022-09-05 14:25:42 -04:00
Tom Rothamel 01dba2a574 doc: Reorder the changelog after merging. 2022-09-05 14:21:43 -04:00
Tom Rothamel 5524796509 Merge pull request #3922 from methanoliver/methanoliver-size-patch
Allow multipliers in {size=<value>}
2022-09-05 14:06:11 -04:00
Tom Rothamel 280555ea44 Merge pull request #3923 from renpy/lint-dev-auto
Advise setting config.developer to "auto" in lint
2022-09-05 14:05:21 -04:00
Tom Rothamel 063a9406e9 Merge pull request #3930 from renpy/function-doc
Expand get_ordered_image_attributes doc
2022-09-05 14:04:58 -04:00
Tom Rothamel b64ba23863 Merge branch 'maint-8.0' 2022-09-05 13:32:49 -04:00
Tom Rothamel 9eecf4fec3 distribute: Use version_only.
This runs after things are fully generated, and will include
the nightly 'n' if appropriate.
2022-09-05 13:31:59 -04:00
Tom Rothamel a465b313bc Merge branch 'maint-8.0' 2022-09-05 11:40:28 -04:00
Tom Rothamel c11051f6a8 distribute: Fix the option name. 2022-09-05 11:35:20 -04:00
Tom Rothamel e9448ccf87 distribute: Add an option for appending the version number.
This is intended to support versioned nightly builds.
2022-09-05 11:26:57 -04:00
Tom Rothamel 8eeb921ef3 Merge branch 'maint-8.0' 2022-09-05 10:37:51 -04:00
Gouvernathor 466ba3741c Document xycenter as a style property 2022-09-05 14:34:45 +02:00
Gouvernathor fa6f3d523e Add xycenter to the list of position style properties 2022-09-05 14:27:45 +02:00
Gouvernathor 9069749c44 Add the xycenter synthetic style prop 2022-09-05 14:26:16 +02:00
Tom Rothamel 698b50fd7d doc: Update changelog. 2022-09-04 22:45:42 -04:00
Tom Rothamel 92ae3fe576 Jump to the deferred translate identifier if the translate changes.
This will re-run, and hence re-translate, say statements that have
interact=False, most notably the Say statement that precedes a
menu statement.

This could cause problems if there is a non-idempotent statement
between the say statement and the interaction, like:

    e "This will show dialogue when the screen is shown." interact False

    $ variable += 1

    call screen myscreen

That should be rare enough that a warning will suffice.
2022-09-04 21:47:46 -04:00
Tom Rothamel 78391bf68f Clear the deferred_translate_identifier when the interaction end.
This makes it available for the full interaction, including any
restart due to change_language.
2022-09-04 21:38:19 -04:00
Tom Rothamel 04a69c0d64 Remove debug print. 2022-09-04 17:27:04 -04:00
Tom Rothamel e9d0574f88 Merge branch 'maint-8.0' 2022-09-04 00:55:53 -04:00
Tom Rothamel 7d4610d13d New behavior regarding modal, pause, and timers.
By default, timers trigger even if uderneath a modal screen
- a screen timer is intended primarily to display data, and not
by default, as a means of control. (For example, the default
notify screen uses a timer to hide itself without game effect.)

Pauses, by default, respect modal screens, as pause is part of
the main game's control flow.

Both timers and pauses take a modal property, which overrides
if a modal screen is respected or not.

Fixes #3935.
2022-09-04 00:42:48 -04:00
Tom Rothamel 1fa440feaa Allow files descriptors backing logs to be unflushable.
Fixes #3963.
2022-09-03 20:27:23 -04:00
Gouvernathor c29da607f6 doc: improve and fix say-with-attributes examples 2022-09-03 14:51:15 +02:00
Gouvernathor a36a6cccf0 doc: multipersistent init -> define 2022-09-03 12:19:36 +02:00
Andy_kl 7f45cf4ee8 Fix typo in UserStatement.replace_next 2022-09-03 02:02:00 +04:00
Gouvernathor 1d330d222c truncate when there are too many unreachable lines 2022-09-02 23:46:56 +02:00
Tom Rothamel 75669c545a ffmedia: Do not stop decoding when sending packets hits EOF.
Only stop decoding when there are no more frames to be decoded, or a
real error.

Fixes #3927.
2022-09-02 00:48:00 -04:00
Gouvernathor b3f08bdfeb Expand get_ordered_image_attributes doc 2022-09-02 01:17:30 +02:00
Tom Rothamel c29e7a0e85 Merge branch 'maint-8.0' 2022-09-01 02:20:13 -04:00
Tom Rothamel 8c5f6f22dc Fix credits. 2022-09-01 02:19:45 -04:00
Tom Rothamel 22e58c9a4e Merge branch 'maint-8.0' 2022-09-01 02:19:33 -04:00
Gouvernathor 4640b135a1 Add reachability analysis 2022-09-01 01:32:32 +02:00
Tom Rothamel 0d04423ca9 Fix credits. 2022-08-31 19:18:47 -04:00
Gouvernathor ad5d6d503a doc: end (ish) unfinished sentence 2022-08-31 23:02:05 +02:00
Tom Rothamel af0d90d23c Merge branch 'maint-8.0' 2022-08-30 23:55:41 -04:00
Tom Rothamel 183d18e4fd doc: Update credits. 2022-08-30 21:25:50 -04:00
Tom Rothamel 7cda9a03d9 doc: Changelog Security page, update sponsors. 2022-08-30 21:16:12 -04:00
Gouvernathor d84d6fb387 dic: fox typo 2022-08-31 02:38:46 +02:00
Gouvernathor 43132e9045 doc: make the example easier to understand 2022-08-31 00:11:58 +02:00
Gouvernathor 6d820a5e74 Update lint.py 2022-08-30 13:55:13 +02:00
Adam Trzypolski 1df764065e Document {size=*<float>} 2022-08-30 11:39:03 +03:00
Adam Trzypolski 8836b924d7 Allow multipliers in {size=<value>}
Sometimes, your tag doesn't know what size it will be, but `+`/`-` is not enough. Allowing a multiplier is a two line change.

```
"{size=*2}This is double size{/size} and this is {size=*0.5}half size{/size}"
```
2022-08-30 11:19:25 +03:00
Tom Rothamel 84ad8d4d91 Changelog for 8.0.3/7.5.3. 2022-08-29 22:05:09 -04:00
Tom Rothamel 19a182c7be Update the Ukrainian translation.
This is by twitter user @smq_denya.
2022-08-29 22:02:07 -04:00
Tom Rothamel 9e7d46e5d1 Fix typing problems in Matrix.__eq__.
Fixes #3895.
2022-08-29 19:12:18 -04:00
Gouvernathor 7d5ab8adc0 Use eq and ne for Matrix comparisons 2022-08-29 19:11:59 -04:00
Gouvernathor f003cfdea6 Add py2 support 2022-08-29 19:10:33 -04:00
Gouvernathor 46c0336375 Mark (lambda) arguments as not loaded from context 2022-08-29 19:10:17 -04:00
Tom Rothamel df71854921 Let the creator decide if modal blocks pauses. 2022-08-29 01:14:25 -04:00
Tom Rothamel f11e087838 Error out if a gui preference doesn't have a default.
Catches the mistake in #3909.
2022-08-28 23:39:39 -04:00
Tom Rothamel 233db814ea Document that outlines only work as part of a displayable.
Fixes #3917.
2022-08-28 19:21:03 -04:00
Tichq 43682e0be3 fix: issue-3912 2022-08-28 19:04:32 -04:00
Andykl f2fd54744b Merge pull request #3915 from qTich/fix/issue-3912
Strip parsed arugment default expression.
So it does not appear with \n when the last argument in the multiline parameters does not have a trailing comma.
2022-08-29 00:58:16 +04:00
Tichq e2909848ec fix: issue-3912 2022-08-28 23:14:01 +03:00
Tom Rothamel a2e2f8ba55 Allow quotes inside of triple strings.
Per #3913.

Co-authored-by: Dan Hess <phxntxm1@gmail.com>
2022-08-27 22:26:31 -04:00
Tom Rothamel 841e736cf9 Improvements to viewport dragging.
The biggest change here is that there is a new _draggable field on
Displayable. If True, the displable itself might be draggable, and
so a Viewport won't steal the focus of it.

There are also several changes that make sure the viewport gets and
releases drags as appropriate.

Finally, draggability only enables when the displayable is actually
scrollable in at least on axis.

Fixes #3910.
2022-08-27 22:00:42 -04:00
Tom Rothamel 832560d8dc Merge branch 'maint-8.0' 2022-08-27 00:35:40 -04:00
Tom Rothamel 32e7ca8fd7 Bump versions to 8.0.3/7.5.3. 2022-08-27 00:34:13 -04:00
Tom Rothamel c23466d98d Merge branch 'maint-8.0' 2022-08-27 00:32:38 -04:00
Gouvernathor 9572cd7f0a Update config.version documentation in GUI 2022-08-27 03:50:21 +02:00
Tom Rothamel a89a158b2f Add security documentation. 2022-08-26 20:53:20 -04:00
Tom Rothamel 511cdc1227 Document the fields of version_tuple. 2022-08-26 00:03:51 -04:00
Tom Rothamel fbcb9a102e Allow viewport drag to override child focus.
Now, when a a touch moves by a certain number of pixels when a
button inside a viewport is focused, focus and grab are shifted
onto the viewport, which then can be scrolled.

This also changes several things about how viewports process
events - now, if an event can be handled by the viewport, the
viewport takes precendence.
2022-08-25 23:48:28 -04:00
Tom Rothamel 2214c67706 Allow a displayable to force itself to be focused.
This disables the grab, and then changes the focus. This is mainly
intended for used by Viewport and VPGrid to override child focus
when being scrolled.
2022-08-25 23:48:28 -04:00
Tom Rothamel 207e0b791d Merge pull request #3883 from GiovanH/namedtuple
Use a NamedTuple for version_tuple (for #3755)
2022-08-25 21:11:41 -04:00
Gio 090c3d246c VersionTuple naming 2022-08-25 20:02:43 -05:00
Tom Rothamel d111e24a7b Add a keysym property to dismiss.
Fixes #3903.
2022-08-25 01:52:06 -04:00
Tom Rothamel 2ffe5007c1 Abort if too many interaction restarts occur without progress.
In this case, progress consists of either terminating the current
interaction, processing input, or waiting without processing input.

Fixes #3627.
2022-08-24 22:44:49 -04:00
midgethetree 3fb99d39b3 Improve lint for say attributes
Applies config.adjust_attributes to say attributes when linting, so lint won't report errors for say statements which work in-game.
2022-08-24 00:05:20 -04:00
Tom Rothamel a09c879f8d Update README.rst for Python 3 and Ubuntu 22.04.
Also, help sphinx run in more places.
2022-08-23 23:38:40 -04:00
Gouvernathor 6bf6975e1d doc: correct wrong preference 2022-08-24 03:50:47 +02:00
Gouvernathor 929f4c2468 doc typo and rephrase 2022-08-24 02:00:43 +02:00
Gouvernathor 6ef2571f17 doc: fix example 2022-08-24 01:48:59 +02:00
Gouvernathor 82a6fbbe6d doc: move example, add warning 2022-08-23 13:50:13 +02:00
Tom Rothamel 3028fe28a3 Fix typing problems in Matrix.__eq__.
Fixes #3895.
2022-08-23 01:13:22 -04:00
Tom Rothamel 6b81f958fd translation: Avoid automatically generating an identifier that already exists.
Fixes #3894.
2022-08-22 21:11:52 -04:00
Tom Rothamel 14f535cea8 Ensure the interface starts before displaying an error message. 2022-08-22 01:15:57 -04:00
Tom Rothamel e7f186e12a Merge pull request #3892 from renpy/fix-lambda-in-comp
Fix the ast magic applied on comprehensions when containing lambdas
2022-08-21 22:09:24 -04:00
Gouvernathor 2a90f82f3a Add py2 support 2022-08-22 03:08:16 +02:00
Gouvernathor c54780e088 Mark (lambda) arguments as not loaded from context 2022-08-22 02:41:26 +02:00
Andy_kl 97eb86d6d9 Add help <expr> into console commands. 2022-08-22 04:16:46 +04:00
Gouvernathor 60ad4487ac doc: fix typo 2022-08-22 02:06:54 +02:00
Tom Rothamel 9f6e618ee4 sl2: Do not copy a non-const created slfor list or iterator. 2022-08-21 17:02:31 -04:00
Gouvernathor 236cc0b59f doc: simplify call_screen 2022-08-21 20:11:15 +02:00
Gouvernathor 387cb05892 doc: hide **kwargs for load_module
That's intil/unless it gets documented
2022-08-21 19:47:25 +02:00
valery-iwanofu fb5db21898 Fix jnius example code 2022-08-21 12:04:49 +02:00
Tom Rothamel c91b8f1031 py3, sl2: Copy the value for is iterating over into a list.
This allows it to be iterated multiple times, even if the value
is an iterator. This in turn, allows range, enumerate, and zip to
be marked as pure, and hence potentially treated as constant in
a screen.
2022-08-21 00:28:00 -04:00
Tom Rothamel 6b390c0191 py3: Audit pure builtin functons on Python 3.
Previously, Python 3 builtins weren't included, so this replaces
the functions with a curated list.
2022-08-20 22:17:05 -04:00
Tom Rothamel 087fb97c0b ren_py: Remove debug raise. 2022-08-20 21:51:11 -04:00
Tom Rothamel 5322748f51 ren_py: Rewrite get_line_text to return the transformed text. 2022-08-20 21:48:29 -04:00
Tom Rothamel 156166b3dc Merge pull request #3885 from renpy/_ren.py-crlf
Make _ren.py accept windows-ending (CRLF) files
2022-08-20 21:48:16 -04:00
Gouvernathor ae9c90a25e Use splitlines to avoid errors with CRLF
also, used a better enumerated linenumber
2022-08-21 03:44:02 +02:00
Gio 649c4bc725 WIP namedtuple for version info 2022-08-20 17:25:20 -05:00
Tom Rothamel 402d6779e8 ren_py: Remove potentially over-sensitive test, fix linenumber. 2022-08-19 23:45:15 -04:00
Tom Rothamel 29b191ff05 Merge pull request #3881 from renpy/_ren.py
Add a syntax error to _ren.py parsing, and tweak its doc
2022-08-19 23:43:28 -04:00
Gouvernathor 932bf79fbe Revert allowing triple simple quotes 2022-08-20 05:40:11 +02:00
Gouvernathor 703d775e99 Update ren_py.rst 2022-08-20 05:35:06 +02:00
Gouvernathor 588b447ab2 Merge branch 'master' into _ren.py 2022-08-20 05:26:45 +02:00
Tom Rothamel 4f8cca62fe doc: _ren.py files. 2022-08-19 23:23:32 -04:00
Gouvernathor d5546516fd Expand _ren.py syntax 2022-08-19 11:40:45 +02:00
Tom Rothamel 98b44c7a76 _ren.py: Report files with obvious errors. 2022-08-19 01:10:44 -04:00
Tom Rothamel 22d1af00ef _renpy.py: Error out if foo_ren.py and foo.rpy exist in the same game. 2022-08-18 22:47:05 -04:00
Tom Rothamel 81e21925b2 _ren.py: Change the order that _ren.py files are compiled.
With this change, foo_ren.py is compiled at the same time foo.rpy
would be, and both files produce foo.rpyc, with foo_ren.py taking
precendece over foo.rpy if both exist.

The purpose of this is to make it possible to replace a .rpy file
that contains an init python block with a _ren.py file, and have
the .rpyc file be replaced with the file fron the new source.
2022-08-18 22:32:29 -04:00
Gouvernathor 9fe1b7fb46 doc: don't document invisible parameter
We override :args: not to display `value`, so documenting it looks weird.
We could also choose to let the value argument display in the class signature.
2022-08-18 23:16:59 +02:00
Gouvernathor 553ada3b04 Lint parameters shadowing builtin names 2022-08-18 22:38:43 +02:00
Gouvernathor 0efbf3484b Add comments and internal documentation 2022-08-18 21:52:24 +02:00
Gouvernathor 1fdd09aa4f Replace inline if/else with or, and fix comments
It's a bit quicker in the general case, and avoids repetitions.
2022-08-18 16:19:49 +02:00
Gouvernathor b2fa99872a doc: fix typo 2022-08-18 15:56:57 +02:00
Tom Rothamel b29df78420 ren_py: Initial implementation of ren_py to rpy converter. 2022-08-17 21:52:39 -04:00
Gouvernathor 4d9ffbbfff doc: add ref anchors 2022-08-17 17:33:57 +02:00
Gouvernathor 5b8458591d fix 2022-08-17 17:33:02 +02:00
Gouvernathor 19eeb87c9a doc: add internal references 2022-08-17 17:32:31 +02:00
Gouvernathor 9efd8aaf2d doc: Add internal references 2022-08-17 17:15:17 +02:00
Tom Rothamel 53f5d4aa89 Break the lexer off into its own file.
At 3,000+ lines, parser.py was getting a bit unwieldy. This change
breaks off the file processing and lexing portions of the parser
into lexer.py, and leaves parser.py more for the parser trie and
statement definitions.

This will let me add more functionality (the ren.py transfome)
to lexer.py.
2022-08-17 00:40:10 -04:00
Tom Rothamel 72df151885 Merge branch 'maint-8.0' 2022-08-16 21:09:21 -04:00
Tom Rothamel 289ccaf00d Merge pull request #3873 from renpy/fix-3872
fix wrong interpolation example
2022-08-16 21:08:38 -04:00
Gouvernathor 754731e2b9 fix typo 2022-08-16 21:36:33 +02:00
Gouvernathor b6dd3bb5d8 doc: trim and fix wrong example
renpy.atl_warper and the `customwarper duration property value` needs not be showcased outside of the Warpers section
2022-08-16 20:32:02 +02:00
Tom Rothamel e48c9045e7 Merge pull request #3750 from Tey/web_progressive
Optimizations for building Web packages
2022-08-15 18:37:30 -04:00
Tom Rothamel 077a368386 Merge pull request #3866 from renpy/lint-init-priority
Lint out-of-range init priorities
2022-08-15 01:34:18 -04:00
Tom Rothamel 96be374566 Merge pull request #3869 from renpy/new-matrix-equality
Use eq and ne for Matrix comparisons
2022-08-14 21:18:52 -04:00
Tom Rothamel 164fe5fdb0 doc: Changelog. 2022-08-14 10:54:11 -04:00
Tom Rothamel 612eb11ed3 Include an aarch64 version of the game launcher script.
As it was missing before.
2022-08-14 10:47:23 -04:00
Gouvernathor eac73269de Use eq and ne for Matrix comparisons 2022-08-14 16:04:32 +02:00
Tom Rothamel 12e6c4b7e1 ffmedia: Modernize how ffmpeg is used.
The goal of this was to make sure that ffmedia.c compiles without
any warnings under ffmpeg 4.2. This required a series of
related changes.

The first was more changes of how the Packet queue works. The packet
queue is now in charge of allocated and deallocating AVPacket objects
as required, and is the only place where AVPacket objects are created.
This allowed us to get rid of several AVPackets that were allocated
as part of MediaState, and a lot of copying of data to and from these
objects.

This enables and is enabled by a change to fully embrace the new
avcodec_send_packet/avcodec_receive_frame API, and most notably
that avcodec_send_packet is defined to either fully read a packet,
or not read it at all.There was a lot of complexity inherited
from prior APIs that would only partially read packets, which
these changes do away with.
2022-08-14 01:55:10 -04:00
Tom Rothamel 90dee6d775 ffmedia: Replace AVPacketList in PacketQueue functions.
AVPacketList is deprecated, so this replaces it with the amazingly
similar PacketQueueEntry object.
2022-08-13 22:36:18 -04:00
Tom Rothamel 425feb7909 Merge branch 'maint-8.0' 2022-08-13 00:21:42 -04:00
Tom Rothamel 28088c3a0b doc: Changelog. 2022-08-12 23:55:17 -04:00
Tom Rothamel 1e3b96e1c3 steam: Use pointer instead of byref.
It's not clear byref can be used with cast. (It did work, but might
not be documented as working.)
2022-08-12 23:02:06 -04:00
Tom Rothamel 3b5ac939ce Require --real to run add.py.
To remind me to use scripts/add_all.sh during the warring versions
period.
2022-08-12 22:37:41 -04:00
Gouvernathor 6ba03d3fd6 doc: typo 2022-08-13 04:36:41 +02:00
Tom Rothamel a45c39b5ef steam: Fix ctypes and documentation issues.
Fixes #3865
2022-08-12 22:28:15 -04:00
Gouvernathor 45cdda60c3 Check for out-of-range init priorities 2022-08-13 04:26:47 +02:00
Gouvernathor 88a1461755 doc: typo 2022-08-13 03:59:56 +02:00
Gouvernathor f8d93d939f doc: reword 2022-08-13 01:23:44 +02:00
Tom Rothamel 464b5d8c53 Merge branch 'maint-8.0' 2022-08-12 00:55:53 -04:00
Gouvernathor 5b9148aab8 Don't shorten Image's repr 2022-08-12 00:55:44 -04:00
Tom Rothamel 4629de77f9 Merge pull request #3860 from renpy/image-shorten-repr
Don't shorten Image's repr
2022-08-12 00:55:12 -04:00
Tom Rothamel cb785c3fd5 doc: Changelog last. 2022-08-12 00:54:47 -04:00
Tom Rothamel 48b6f77901 Merge branch 'maint-8.0' 2022-08-11 17:50:31 -04:00
Tom Rothamel c4a7ba3ad9 Merge pull request #3858 from Andykl/pretty-repr-fixes
Fixes of console pretty repr
2022-08-11 17:50:03 -04:00
Gouvernathor f33b715177 doc: anchor the ref 2022-08-11 03:49:16 +02:00
Gouvernathor ccd040599e doc: replace nonexistent function name with ref 2022-08-11 03:48:53 +02:00
Gouvernathor 54f1cae1aa Don't shorten Image's repr 2022-08-11 03:39:02 +02:00
Tom Rothamel d07d61d050 Merge branch 'maint-8.0' 2022-08-10 21:26:37 -04:00
Tom Rothamel 7dc6a7c64b Remove some obsolete debug prints. 2022-08-10 21:23:46 -04:00
Tom Rothamel 5bb746b0e6 Make MouseDisplayable reflect default_mouse.
Fixes #3856.
2022-08-10 21:20:33 -04:00
Andy_kl 66c33029e6 Because dicts are ordered in python 3 by default, do not sort them. 2022-08-10 14:30:42 +04:00
Andy_kl 03ff0ef493 Add pretty repr of dict keys, values and items. 2022-08-10 14:30:42 +04:00
Andy_kl b04ecb88f7 Fix strings and bytes representation in python 3. 2022-08-10 14:30:42 +04:00
Tom Rothamel 5f899a6773 Make achievement.Sync() call renpy.restart_interaction()
Fixes #3854.
2022-08-09 23:09:57 -04:00
Tom Rothamel 30db52f617 Merge pull request #3855 from renpy/operator-mul
Use c-boosted mul function instead of python-defined one
2022-08-09 23:04:50 -04:00
Gouvernathor 4ad0f51594 doc: Fix bullet-point lists
also, sort by alphabetic order
2022-08-10 03:51:18 +02:00
Gouvernathor 6891ad6174 Update _shaders.rpym 2022-08-09 11:40:13 +02:00
Tom Rothamel 609e502a4d Add config.autosave_callback.
A callback or list of callbacks that are called after a background
autosave finishes.

Fixes #3851.
2022-08-09 01:00:24 -04:00
Tom Rothamel bb576eec63 Merge branch 'maint-8.0' 2022-08-08 01:06:00 -04:00
Tom Rothamel d84bb6890a doc: Changelog doc changes. 2022-08-08 01:05:33 -04:00
Tom Rothamel 42f7c9f7e1 doc: Changelog. 2022-08-07 22:13:17 -04:00
Tom Rothamel 2417b43439 doc: Sponsors. 2022-08-07 19:04:25 -04:00
Tom Rothamel 037880acf0 Merge branch 'maint-8.0' 2022-08-07 18:44:05 -04:00
Tom Rothamel 6b32511e33 Visit the mask of an AlphaMask, as well as the child.
Fixes #3832.
2022-08-07 18:21:20 -04:00
Tom Rothamel 948fa59434 vscode: Settings. 2022-08-07 18:06:08 -04:00
Tom Rothamel b4d645e380 Avoid saving before the rollback log is created.
Fixes #3847.
2022-08-07 15:38:57 -04:00
Elckarow ef1b55d760 fixed typo 2022-08-06 23:55:32 -04:00
Tom Rothamel b1fdb7be39 Merge pull request #3848 from Elckarow/patch-4
fixed typo
2022-08-06 23:55:09 -04:00
Elckarow c25e5d31f0 fixed typo 2022-08-07 04:09:13 +02:00
Tom Rothamel 257b49ff3a Merge branch 'maint-8.0' 2022-08-06 00:39:24 -04:00
Tom Rothamel 44300d9a8c audio: Adjust the size of a fadein/out step to ensure sample length is nonzero.
This is an interim fix to #3846.
2022-08-06 00:38:38 -04:00
Tom Rothamel f285009182 Make built-in stores constant, document constant stores.
The goal of this is to improve Ren'Py performance by not checking
stores that will not be changed outside of the init phase for
changes before statements.

The icon store is left alone, as it may be going away soon.
2022-08-05 01:38:40 -04:00
Tom Rothamel 5cc4fd64a1 Allow a namespace to declare the _constant variable.
If true, this variable declares the namespace constant. Constant
namespaces are not saved or loaded, and do not participate in
rollback.

In exchange for this, the namespace does not need to be scanned
for changed variables, saving a lot of time if the namespace has
no variables that will change after init.
2022-08-04 02:11:07 -04:00
Tom Rothamel ef1ae9a562 Merge branch 'maint-8.0' 2022-08-04 01:15:44 -04:00
Tom Rothamel a56e0f9451 pydict: Swap the middle element to the end.
To ensure the partiion routine works correctly.
2022-08-04 00:59:49 -04:00
Tom Rothamel 05bdff3c7f Fix bad merge. 2022-08-04 00:21:44 -04:00
Tom Rothamel 20dc7e5eb3 Merge branch 'maint-8.0' 2022-08-04 00:13:46 -04:00
Gouvernathor f0742bc684 extra space 2022-08-03 20:05:49 -04:00
Gouvernathor c63c77b780 doc: tweak the sentence 2022-08-03 20:05:04 -04:00
Gouvernathor 233cff6d0b doc: tweaks to last
Add a label to avoid confusion between the statements (the first happens at init, the second at runtime), and fix wording.
2022-08-03 20:02:11 -04:00
Gouvernathor 06603d294b doc: use the exception role 2022-08-03 20:00:54 -04:00
Gouvernathor bd87dd520a doc: better example 2022-08-03 20:00:44 -04:00
Gouvernathor c3cd5580be doc: better document user-defined warpers 2022-08-03 20:00:37 -04:00
Gouvernathor e586fea5e6 doc: tweak is_selected and is_sensitive
False -> false, and true -> a true value, because no guarantee is given on the type of the returned value
Also, a list of actions is accepted
2022-08-03 20:00:25 -04:00
Gouvernathor 464184cefa doc: rephrase renpy.scry a bit 2022-08-03 20:00:12 -04:00
Tom Rothamel 2a97b50917 Use the middle element when quicksorting store dicts.
This is a big improvement on Python 3, where store dictionaries can
be created in mostly-sorted order, and hence become the worst-case
for quicksort.

Fixes #3812, which is caused by the store.audio namespace becoming
truly huge, and this bad behavior running Ren'Py out of memory.
2022-08-03 19:32:01 -04:00
Tom Rothamel 894a7133c0 Use the middle element when quicksorting store dicts.
This is a big improvement on Python 3, where store dictionaries can
be created in mostly-sorted order, and hence become the worst-case
for quicksort.

Fixes #3812, which is caused by the store.audio namespace becoming
truly huge, and this bad behavior running Ren'Py out of memory.
2022-08-03 19:10:31 -04:00
Gouvernathor bc696a05c4 doc: rephrase renpy.scry a bit 2022-08-03 08:41:53 +02:00
Gouvernathor f49dd5b48e Fix and simplify "List filenames"
- Avoid sorting dirs because it's pointless
- strip config.gamedir once instead of many times
- only strip it when safe (this one is a little bonus)
- do not turn into a bytes in py3 (I don't even know why it was the case in py2, but I left it just in case) (and even in that case, now it does it only once)
2022-08-03 00:31:45 -04:00
Tom Rothamel e302c2ad62 Merge pull request #3827 from renpy/fix-list-filenames-py3
Fix and simplify the "List filenames" dev action
2022-08-03 00:31:12 -04:00
Tom Rothamel c98f1d2b83 Merge pull request #3823 from shawna-p/master
Expand functionality of drag_offscreen
2022-08-03 00:30:44 -04:00
Asriel Senna f6364a64c3 doc: replace :ref: with :doc: wherever possible
This simplifies many cases where a page has a ref identifier distinct 
from its filename, which makes linking harder to understand when writing 
the doc.
Also, it solves a small scrolling problem in such cases.
Some links in changelog and changelog6 were left alone, and some .. _ 
identifiers too, to ensure compatibility.
2022-08-03 00:21:11 -04:00
Tom Rothamel 77cb7334bc Merge pull request #3820 from renpy/doc-doc
Replace :ref: with :doc:
2022-08-03 00:20:19 -04:00
Tom Rothamel 60d25f62aa Merge pull request #3834 from kyouryuukunn/add_doc_about_scry
add doc about scry
2022-08-02 20:10:55 -04:00
Tichq 3a3c79dc7d fix: At the time of import renpy.import_all the pygame module may not be present. 2022-08-02 20:06:15 -04:00
Gouvernathor cb6a944795 doc: improve console commands list generation
Using replace is probably simpler than using split then join.
Also, the markup using a leading whitespace is the quote markup in sphinx, which is a bit ugly. A bullet list renders better, I think.
2022-08-02 20:05:54 -04:00
Tom Rothamel 24215c9383 Merge pull request #3835 from renpy/better-doc-help-commands
Improve the generation and inclusion of the console commands list
2022-08-02 20:03:18 -04:00
Tom Rothamel 7a3c77d119 Merge pull request #3836 from qTich/fix/undefined-pygame
fix: Unavailable `pygame` in `renpy.display.layout`
2022-08-02 20:02:41 -04:00
Tom Rothamel 1c86b51175 Merge branch 'maint-8.0' 2022-08-01 22:52:47 -04:00
kyouryuukunn 71279094e5 [fix doc]lexer.catch_errors() -> catch_error() 2022-08-01 22:16:10 -04:00
Tom Rothamel 09e56040ab py3: Enable from __future__ import annotations.
Fixes #3822.
2022-08-01 21:37:55 -04:00
Tichq 3a1fbb2859 fix: At the time of import renpy.import_all the pygame module may not be present. 2022-08-01 15:43:34 +03:00
Gouvernathor 50fe062e72 doc: improve console commands list generation
Using replace is probably simpler than using split then join.
Also, the markup using a leading whitespace is the quote markup in sphinx, which is a bit ugly. A bullet list renders better, I think.
2022-08-01 06:12:07 +02:00
kyouryuukunn e6e98c6f41 add doc about scry 2022-08-01 12:52:24 +09:00
kyouryuukunn 69dc800a89 [fix doc]lexer.catch_errors() -> catch_error() 2022-08-01 05:43:15 +02:00
Tom Rothamel 54773f0b3c Update .gitignore to ignore *-dists. 2022-07-31 13:24:40 -04:00
Tom Rothamel 54663341b6 Provide compatibility for modal_blocks_pause. 2022-07-31 13:13:15 -04:00
Tom Rothamel bdb655c62e Add a multiple-version compatibility check.
This is intended for the Ren'Py 8/7 mixed period, and allows a
compat test to be True in Ren'Py 8 and False in some Ren'Py 7
versions.
2022-07-31 11:08:38 -04:00
Tom Rothamel 766820a881 Merge branch 'maint-8.0' 2022-07-31 02:02:46 -04:00
Tom Rothamel e113bafd0b Check for a language change before computing transitions.
Preventing a language change from cancelling transitions that have
already been queued up.

Fixes #3830.
2022-07-31 02:00:52 -04:00
Tom Rothamel 08f3fce3d2 Merge branch 'maint-8.0' 2022-07-31 01:33:47 -04:00
Tom Rothamel 04adf358c0 Revert "Back out half of #3790."
This reverts commit a9d9e0973e.

Per #3824.
2022-07-31 01:33:19 -04:00
Gouvernathor 65dcc864d8 Fix conflicting properties (again) 2022-07-31 03:13:58 +02:00
shawna-p ad04219074 Improve documentation and reduce calls to len 2022-07-30 19:13:32 -04:00
Gouvernathor 3fdb9236ae Fix and simplify "List filenames"
- Avoid sorting dirs because it's pointless
- strip config.gamedir once instead of many times
- only strip it when safe (this one is a little bonus)
- do not turn into a bytes in py3 (I don't even know why it was the case in py2, but I left it just in case) (and even in that case, now it does it only once)
2022-07-30 17:04:35 +02:00
Gouvernathor d5177af212 Fix duplicate label errors 2022-07-30 10:57:34 -04:00
Tom Rothamel 4dd723affa doc: Clarify that define's const-ness extends to fields and indexing.
Fixes #3818.
2022-07-30 10:52:51 -04:00
Tom Rothamel 1f1573c0db Merge pull request #3826 from renpy/fix-3825
Fix duplicate label errors
2022-07-30 10:42:07 -04:00
Gouvernathor 3498c5e24c extra space 2022-07-30 16:35:49 +02:00
Gouvernathor a05f3050d4 Fix duplicate label errors 2022-07-30 16:11:57 +02:00
shawna-p 8f297ce5f1 Add option to keep (width, height) drag on screen 2022-07-29 19:59:09 -04:00
shawna-p 728e5e0b88 Expand functionality of drag_offscreen 2022-07-29 19:19:05 -04:00
Tom Rothamel 16b6fe8a62 Merge branch 'maint-8.0' 2022-07-29 01:12:26 -04:00
Asriel Senna 79706e3489 doc: replace :ref: with :doc: wherever possible
This simplifies many cases where a page has a ref identifier distinct 
from its filename, which makes linking harder to understand when writing 
the doc.
Also, it solves a small scrolling problem in such cases.
Some links in changelog and changelog6 were left alone, and some .. _ 
identifiers too, to ensure compatibility.
2022-07-29 05:28:51 +02:00
Tom Rothamel 7291c4594b Immediately restart if inside a reload at a menu.
Fixes #3799, also for the case where we're in a menu.
2022-07-28 21:44:04 -04:00
Gouvernathor 05516c5eff doc: tweak the sentence 2022-07-28 08:34:38 +02:00
Tom Rothamel b91a67e334 gl2: Create an appropriately-sized texture when drawable_resolution is used. 2022-07-28 01:12:19 -04:00
Tom Rothamel f55091310d gl2: Create an appropriately-sized texture when drawable_resolution is used. 2022-07-27 23:27:24 -04:00
Tom Rothamel bfad014ce4 Merge branch 'maint-8.0' 2022-07-27 01:28:06 -04:00
Tom Rothamel e406247ae1 doc: Redocument config.game_main_transition.
Fixes #3808.
2022-07-27 01:12:19 -04:00
Tom Rothamel f7db1fb471 gl2: Trigger a resize response if the drawable size changes. 2022-07-26 23:00:13 -04:00
Tom Rothamel 7b25b2e9b9 Add a script to merge the maintenance branch to master. 2022-07-26 17:37:30 -04:00
Tom Rothamel 1ca3201ddd Avoid using stylized quotes. 2022-07-26 00:34:54 -04:00
Tom Rothamel 5429223c34 Undocument config.main_game_transition and config.game_main_transition.
In favor of config.intra_transition, which Ren'Py has been using since
the switch to screens.

Fixes #3038.
2022-07-26 00:34:54 -04:00
Tom Rothamel ad140a9ae8 doc: Fix various issue with preferences documentation.
Fixes #3809. Fixes #3810.
2022-07-26 00:34:54 -04:00
Tom Rothamel 8b3e05d75e Avoid using stylized quotes. 2022-07-26 00:12:45 -04:00
Tom Rothamel 267f12b166 Undocument config.main_game_transition and config.game_main_transition.
In favor of config.intra_transition, which Ren'Py has been using since
the switch to screens.

Fixes #3038.
2022-07-25 20:50:37 -04:00
Tom Rothamel 5a60e1cebe doc: Fix various issue with preferences documentation.
Fixes #3809. Fixes #3810.
2022-07-25 20:32:01 -04:00
Gouvernathor 7c8e4475c5 doc: fix typo (#3805)
no need to propagate to maint-8.0 as its doc will probably never be regenerated
2022-07-25 15:04:28 +02:00
Tom Rothamel c5fb0cddb4 Merge branch 'maint-8.0' 2022-07-25 00:44:02 -04:00
Tom Rothamel 7ba45c6dc0 iap: Use strings with iOS class names.
Fixes the same problem as 9239e92042,
but for iOS.
2022-07-25 00:33:40 -04:00
Tom Rothamel 3c741ac051 Add renpy.music.pump.
When called, this causes audio to be processed, as it is at the
start of an interaction. This is intended for cases where audio
is played and then stopped with a fadeout, which default to not
playing anything.

Fixes #3805.
2022-07-24 23:12:27 -04:00
midgethetree 5489a74943 Fixed mouse area hovering
Mouseareas are supposed to not hover if the keyboard is being used for focusing, but this was broken by an if/else statement that changed the is_hovered value again without regard to if it had already been set to false because of keyboard focusing. Changing it to elif/else ensures the value of is_hovered is only changed if it hasn't already been set to false because of keyboard focusing.
2022-07-24 22:19:49 -04:00
Tom Rothamel 7e75d7f61c Merge pull request #3804 from midgethetree/fix-mousearea
Fixed mouse area hovering
2022-07-24 22:19:18 -04:00
Tom Rothamel 0305285661 Improvements to default_focus.
* Only use default_focus when the last interaction was not a mouse
  click, mouse movement, or touch. This prevents focus flickering when
  where default_focus occured, the mouse event was immediately processed,
  and the focus changed.

* When a displayable with a greater default_focus appears, switch to
  it.

* When the displayable with the greatest default_focus disappears,
  switch to the new greatest default_focus when nothing else is
  focused. This allows going to the default item in a lower priority
  menu if a higher priority item disappears.

Fixes #3761.
2022-07-24 21:38:25 -04:00
midgethetree d605c8f1af Fixed mouse area hovering
Mouseareas are supposed to not hover if the keyboard is being used for focusing, but this was broken by an if/else statement that changed the is_hovered value again without regard to if it had already been set to false because of keyboard focusing. Changing it to elif/else ensures the value of is_hovered is only changed if it hasn't already been set to false because of keyboard focusing.
2022-07-24 16:26:53 -06:00
Tom Rothamel aa4a8b4bc6 doc: Update keymap documentation. 2022-07-24 16:16:27 -04:00
Tom Rothamel 817ca31d28 Allow command-c and command-v for copy/paste on mac.
Fixes #3791.
2022-07-24 15:20:58 -04:00
Elckarow c1d41e3a78 fixed typo in 'renpy/sl2/slparser.py' 2022-07-24 19:46:38 +02:00
Gouvernathor b120f1d742 Fix the default input screen 2022-07-24 18:11:57 +02:00
Tom Rothamel b8ab9a002e Merge branch 'maint-8.0' 2022-07-24 00:32:43 -04:00
Tom Rothamel 87dee63bf6 Allow Ren'Py to continue even if audio init fails.
This happens even when config.debug_sound is True, as the current
SDL can fail sound init if no audio devices exist.

Fixes #3768.
2022-07-24 00:14:15 -04:00
Tom Rothamel a16b4a54d5 iap: Use a unicode string with autoclass. 2022-07-24 00:14:15 -04:00
Tom Rothamel e5497b423e Back out half of #3790.
Events (other than modal TIMEEVENTS) should not be delivered to
the pausebehavior when it's behind a screen, and since TIMEEVENTS
can be combined with other events, it needs to be possible to
end the pause on any event.
2022-07-24 00:14:15 -04:00
Tom Rothamel ffd88bf2a8 Allow Ren'Py to continue even if audio init fails.
This happens even when config.debug_sound is True, as the current
SDL can fail sound init if no audio devices exist.

Fixes #3768.
2022-07-23 23:29:21 -04:00
Tom Rothamel 9239e92042 iap: Use a unicode string with autoclass. 2022-07-23 23:15:52 -04:00
Tom Rothamel a9d9e0973e Back out half of #3790.
Events (other than modal TIMEEVENTS) should not be delivered to
the pausebehavior when it's behind a screen, and since TIMEEVENTS
can be combined with other events, it needs to be possible to
end the pause on any event.
2022-07-23 22:46:51 -04:00
Gouvernathor 71385f87d9 Allow transforms to be created in stores (#3678)
This commit adds the ability to include a store name when defining a transform, allowing transforms to be define in stores other than the default.
2022-07-23 21:00:25 -04:00
Tom Rothamel bb90368eef Merge branch 'maint-8.0' 2022-07-22 23:19:44 -04:00
Tom Rothamel 119d7b5277 Adjust how autoreload loading and saving works.
This attempts to address #3799, which I'm guessing is caused by
the game being saved when in an error handling context that's
handling a parse error.

What this does is to try to retain the initial save that is created
until the save is loaded successfuly, or alternatively until the
game quits.

By not creating a new save slot for each reload attempt, this
tries to avoid creating a save when Ren'Py is in an unstable
state.
2022-07-22 23:16:58 -04:00
Tom Rothamel 21e0d7949a doc: Fix #3797. 2022-07-22 21:03:01 -04:00
Andykl d4c784bd1a Merge pull request #3798 from qTich/fix/missed-matrix-parent
fix: missed `DictEquality` parent for `SaturationMatrix`
2022-07-22 19:56:37 +04:00
Tichq d88cefbdef fix: missed DictEquality parent for SaturationMatrix 2022-07-22 18:17:14 +03:00
Gouvernathor 775d291fec doc: tweaks to last
Add a label to avoid confusion between the statements (the first happens at init, the second at runtime), and fix wording.
2022-07-22 15:19:29 +02:00
Gouvernathor b9313ff1d9 Merge pull request #3795 from kyouryuukunn/add_ParameterizedText_sample_code
[Doc] add ParameterizedText sample code
2022-07-22 15:15:50 +02:00
kyouryuukunn a3ae45e3f2 add ParameterizedText sample code 2022-07-22 21:10:20 +09:00
Tom Rothamel 9d5951b9ae Merge branch 'maint-8.0' 2022-07-22 00:41:50 -04:00
Tom Rothamel 9e97d55129 Use open() to open a file when scanning for examples.
This fixes a problem where using renpy.file would open script.rpy
when no translation was in effect, but tl/language/script.rpy would
take priority when a translation was in use.

Fixes #3780.
2022-07-22 00:11:54 -04:00
Tom Rothamel 8d435710df Merge pull request #3792 from kyouryuukunn/contribute_{{_in_extract_dialogue
consider {{ in exatract_dialogue
2022-07-21 22:48:13 -04:00
kyouryuukunn 84a3aa0b49 consider {{ in exatract_dialogue 2022-07-22 08:41:05 +09:00
Tom Rothamel 1191c64e0e Merge pull request #3766 from kyouryuukunn/add_combine_option_to_extract
add combine option to extract dialogue
2022-07-21 11:09:53 -04:00
kyouryuukunn 35b6014ea4 remove the combine option 2022-07-20 20:21:38 +09:00
Tichq dc8c19ef51 Fix: filter_text_tags for tts can accept a displayable text tag that cannot be converted to a string. 2022-07-20 02:00:19 -04:00
Tom Rothamel 8435f57a83 Merge pull request #3753 from qTich/fix/tts-filter_text_tags-displayable
Fix: `filter_text_tags` for `tts`.
2022-07-20 01:59:41 -04:00
midgethetree c995538d90 Make modal pause interactions not time out
Timed pause interactions (interactions triggered by renpy.pause with a specified delay) will now not time out when a modal screen is being shown.
2022-07-20 01:52:39 -04:00
midgethetree 086f2f04e1 Make modal saybehavior not autoforward
If a modal screen like the confirm screen is up, autoforwarding will now be paused.
2022-07-20 01:52:39 -04:00
Tom Rothamel 79fcc13a3a Merge pull request #3790 from midgethetree/fix-modal-behavior
Fix modal behavior
2022-07-20 01:52:06 -04:00
Tom Rothamel edad2f4de7 Merge branch 'maint-8.0' 2022-07-20 01:48:17 -04:00
kyouryuukunn caaab9d49c update tutorial japanese 2022-07-20 01:47:59 -04:00
kyouryuukunn a4accb4a68 update Japanese 2022-07-20 01:47:49 -04:00
kyouryuukunn b0174907b3 update Japanese 2022-07-20 01:47:39 -04:00
Tom Rothamel a27d9183d0 Merge branch 'maint-8.0' 2022-07-20 01:46:28 -04:00
Tom Rothamel 7c3092a37f tutorial: Remove the discussion of child_size.
For about 5 years, child_size has been set automatically based on
the scrollbars, so it's no longer necessary to go into it in
detail.

Fixes #3781.
2022-07-20 01:15:05 -04:00
Tom Rothamel f251262c94 Correct movie channels on load.
Fixes #3785.
2022-07-20 00:44:49 -04:00
midgethetree c1a7591040 Make modal pause interactions not time out
Timed pause interactions (interactions triggered by renpy.pause with a specified delay) will now not time out when a modal screen is being shown.
2022-07-19 18:32:06 -06:00
Tom Rothamel 4e59e4c8cc Align __eq__ and __hash__ for actions and color/transform matrixes.
These functions had gotten out of sync, with __eq__ being defined
and __hash__ being ignored. On Python 2, that mean objects that
would compare equal but have a different hash, while on Python 3,
an error would be raised indicating that the object was unhashable.

This resolves this ambiguity by adding __hash__ to classes that
are non-subclassables and have __eq__ defined, and then by removing
__eq__ from the base subclasses, leaving the default equality,
with is object identity.
2022-07-19 20:27:12 -04:00
kyouryuukunn 6e08fd91e9 Merge pull request #3779 from kyouryuukunn/Japanese_translate_220717
Japanese translate 220717
2022-07-19 17:27:17 +09:00
kyouryuukunn 8a32c2fb24 update tutorial japanese 2022-07-19 17:16:38 +09:00
Tom Rothamel 4d19b114f8 Merge branch 'maint-8.0' 2022-07-19 01:12:22 -04:00
Tom Rothamel 95120fe4a6 Add RENPY_NO_STEAM.
A way of disabling Steam initialization, if we want that.

Mostly a way for me to avoid the error I get everytime I start
Ren'Py without Steam running.
2022-07-18 23:32:23 -04:00
Tom Rothamel 40afe170ce Avoid filtering out ruby/furigana text tags.
Fixes #3778.
2022-07-18 23:12:03 -04:00
Tom Rothamel 6abb77bbfb text: Avoid rendering zero-size Null displayables.
Fixes #3774.
2022-07-18 22:58:49 -04:00
Tom Rothamel bad6bca4e6 Revert "Do not render zero-width displayables in text."
This reverts commit 84945d78ae.
2022-07-18 22:04:37 -04:00
Tom Rothamel 075c48324f Merge branch 'maint-8.0' 2022-07-18 02:09:24 -04:00
Tom Rothamel ebf3773e98 Fix vscode. 2022-07-18 02:08:45 -04:00
Tom Rothamel 84945d78ae Do not render zero-width displayables in text.
Fixes #3772.
2022-07-18 02:08:37 -04:00
Tom Rothamel fbf39a76ee Fix vscode. 2022-07-18 02:07:40 -04:00
Tom Rothamel 11ef81ef89 Do not render zero-width displayables in text.
Fixes #3772.
2022-07-18 01:52:10 -04:00
Tom Rothamel 10600fd307 Remove the obsolete udd.rst, now that there's a server redirect. 2022-07-17 13:23:19 -04:00
Gouvernathor d26bc4f048 doc: use the exception role 2022-07-17 13:38:33 +02:00
kyouryuukunn df7be71e9a update Japanese 2022-07-17 17:54:25 +09:00
kyouryuukunn 90a827bcd5 update Japanese 2022-07-17 17:37:49 +09:00
midgethetree 953375d0aa Make modal saybehavior not autoforward
If a modal screen like the confirm screen is up, autoforwarding will now be paused.
2022-07-16 19:49:05 -06:00
Tom Rothamel 53e8d5c28a Merge pull request #3769 from kyouryuukunn/add_warp
add renpy.warp_to_line func
2022-07-16 16:47:01 -04:00
kyouryuukunn 5ffbbc5531 add renpy.warp_to_line func 2022-07-16 19:34:39 +09:00
kyouryuukunn 1b363a7793 doesn't combine [[. 2022-07-16 09:17:01 +09:00
Tom Rothamel 5dd655eb4a Merge pull request #3758 from renpy/document-warp
doc: better document user-defined warpers
2022-07-15 17:51:59 -04:00
kyouryuukunn a618d3db32 add combine option to extract dialogue 2022-07-16 01:26:39 +09:00
Tom Rothamel c97a29aa02 Add the IF ... ELIF ... ELSE statement.
Per #3760, allows conditional compilation. There are a lot of game
stability caveats to this.
2022-07-15 00:42:08 -04:00
Tom Rothamel 331932ecc1 Revert "ren.py: Add the pass: syntax."
This reverts commit e532e9f9c3.

The solution to #3760 will take care of this by providing a
better syntax.
2022-07-14 19:28:22 -04:00
Gouvernathor c6f59b8144 doc: better example 2022-07-14 16:50:15 +02:00
Gouvernathor 52ee233378 doc: better document user-defined warpers 2022-07-14 16:13:27 +02:00
Tom Rothamel fab154eace ren.py: Load _ren.py files as Ren'Py script files.
This allows files ending with _ren.py to contain Ren'Py script,
be loaded, and operate as part of a normal game. The transformation
from Python to Ren'Py script has yet to be implemented.
2022-07-14 10:00:33 -04:00
Tom Rothamel e532e9f9c3 ren.py: Add the pass: syntax.
When followed by as :, pass takes an optional block that it
then ignores.

This is mostly intended for _ren.py files, where it will be used
as a way of ignoring lines of Python that only exist to make
Python type-checkers happy.

The buried lede - a _ren.py file will be a Python file (that can be
analyzed with Python tooling) that is convered internally to a
.rpy file, and then compiled as Ren'Py. At least, that's the plan.
2022-07-14 00:52:23 -04:00
Andy_kl 0b6112fadb Normalize elided filename in scanstrings before searching in properties.
Before that, on Windows the rules for _compat, _layout and most importantly _developer was failed, so some strings was leaked in common.rpy.
2022-07-14 06:23:46 +04:00
Tom Rothamel ce07604bd6 Merge pull request #3675 from kyouryuukunn/modify_default_transition
mofify alpha, zoom type in default and reset transform
2022-07-13 09:58:42 -04:00
Tichq f9f24b6a36 Fix: filter_text_tags for tts can accept a displayable text tag that cannot be converted to a string. 2022-07-13 02:10:56 +03:00
Tom Rothamel fc73078f54 Merge branch 'maint-8.0' 2022-07-12 16:00:15 -04:00
Tom Rothamel 909e61decb Include tinyfiledialogs in the build. 2022-07-12 15:56:32 -04:00
Tom Rothamel e17f4f3598 linvol: Documentation. 2022-07-12 15:47:07 -04:00
Tom Rothamel c6e360caf6 linvol: Add preferences.set_mixer and preferences.get_mixer.
These get and set the mixer in the new interpolated db format.
2022-07-12 15:46:14 -04:00
Tom Rothamel 5abb96d8fc Merge branch 'maint-8.0' 2022-07-12 09:17:40 -04:00
Tom Rothamel e417aef073 doc: Placeholder changelog entry for 7.5.2 / 8.0.2
Designed to prevent merge conflicts.
2022-07-12 09:17:01 -04:00
Tom Rothamel a7ec32c81d linvol: Use db power when calculating db.
This probably doesn't matter as much in practice, but it's the right
calculation for audio.

A more important change is that the default values for mixers are
now specified as a percentage of a mixer bar.
2022-07-12 09:14:53 -04:00
Tom Rothamel 26d7a4ab9b linvol: Mixer bars use decibels.
Using decibels makes the mixers feel right - the 50% point is
perceptually half volume, even if power-wise it's a lot less
than that.
2022-07-12 09:14:53 -04:00
Tom Rothamel f4dda8db33 linvol: Compatibility for linear volume.
Internally, the volumes are stored as linear volumes, being upgraded
the first time a version of Ren'Py that supports linear volumes is
run.

All other places a volume can come into Ren'Py are updated to consider
the new config.quadratic_volume variable, which will square the volume
to get linear volume.
2022-07-12 09:14:53 -04:00
Tom Rothamel 2dfa05fbcb linvol: Move to linear volume.
As opposed to the previous approach, where volume was squared,
which we're now calling quadratic volume.
2022-07-12 09:14:53 -04:00
Tom Rothamel 9063ad413a Add a multiple-version compatibility check.
This is intended for the Ren'Py 8/7 mixed period, and allows a
compat test to be True in Ren'Py 8 and False in some Ren'Py 7
versions.
2022-07-12 09:14:53 -04:00
Teyut 966cce804e Stop copying the files to be downloaded progressively into the initial ZIP archive 2022-07-12 02:25:42 +02:00
Teyut 6ff68089bd Add a generic files filter from Distributor users 2022-07-12 02:18:31 +02:00
Gouvernathor a1004924ce doc: tweak is_selected and is_sensitive
False -> false, and true -> a true value, because no guarantee is given on the type of the returned value
Also, a list of actions is accepted
2022-07-12 00:31:31 +02:00
Tom Rothamel 0a923be2de Merge branch 'maint-8.0' 2022-07-11 00:15:56 -04:00
Tom Rothamel a364e08d3c Force a recompile of textsupport.pyx.
So the changes in textsupport.pxd are effective.
2022-07-11 00:15:08 -04:00
Andy_kl 8f4d70a836 Fix TypeError when comparing float and None. 2022-07-10 22:45:20 +04:00
Tom Rothamel 0b78b48d8d sl1: Remove the ability to parse SL1 screens.
This had been left in to support potential issues in the change
from SL1 to SL2. That wasn't used, and almost certainly isn't
being used anymore, so the parser can be removed.

SL1 screens can still be loaded if they exist in SL1 files,
as this only affects the parser, not the runtime.

Fixes #3430.
2022-07-10 00:01:23 -04:00
Tom Rothamel 83268109c6 Merge branch 'maint-8.0' 2022-07-09 21:42:38 -04:00
Tom Rothamel d8161ea60e py3: Ensure the method_unpickle function exists on Python 3.
It's needed to load saves, per #3745.
2022-07-09 21:41:46 -04:00
Tom Rothamel 055dd39982 Start 8.1.0 and 7.6.0.
These will live on the main branch.
2022-07-09 16:55:25 -04:00
Tom Rothamel dc45fe1a79 Bump versions to 8.0.2 and 7.5.2.
This is for the benefit of the maintenance branch.
2022-07-09 16:50:05 -04:00
Tom Rothamel e0b23d12eb Allow auto-forward to work with multiple.
The changes here store the text objects that are created as part
of a multiple say statement, then pass those into SayBehavior,
which will use them to determine how long the autoforward will
pause for.

Fixes #3744.
2022-07-07 23:23:47 -04:00
Tom Rothamel b1cacddac7 tts: Fix ordering. 2022-07-07 23:23:47 -04:00
Gouvernathor 6af1212a26 docstring fix
only an internal docstring, not captured by sphinx, but it's better for future readings of the code
2022-07-08 00:48:45 +02:00
Tom Rothamel 1f02e72db9 Update the changelog. 2022-07-06 22:35:13 -04:00
Tom Rothamel 8de40ac154 doc: Minor clarification. 2022-07-06 20:05:22 -04:00
Tom Rothamel 246590d6eb Merge pull request #3741 from renpy/doc-self-voicing
Improve Self-voicing documentation
2022-07-06 19:40:08 -04:00
Tom Rothamel 0cc8ab844b Merge pull request #3743 from Tey/web_audio_opt
Re-use audio data to reduce memory and CPU usage (Web)
2022-07-06 19:39:23 -04:00
Teyut 6e882dcbe3 Use const instead of let/var to declare variables whose assignment will not change 2022-07-06 23:42:38 +02:00
Teyut 0402ffe0e2 Re-use the audio data from the playing file when queuing the same file to reduce memory and CPU usage (Web) 2022-07-06 23:41:22 +02:00
Gouvernathor 3fd958c232 doc: add explanations and fix obsolete name for sv 2022-07-06 22:17:17 +02:00
Gouvernathor f308ea3bfb doc: add example 2022-07-06 16:37:58 +02:00
Tom Rothamel 98e98ff57d Play alt text in first-to-last order by default.
Now that visit is defined to iterate first-to-last, this needs
to match it.

Fixes #3739.
2022-07-05 21:26:00 -04:00
Tom Rothamel d6c5281889 Duplicate the mousedisplayable each time the cursor changes.
Fixes #3736.
2022-07-04 22:06:10 -04:00
Gouvernathor 62dddfe1f3 doc: Update the vpgrid section
fixes #3737
2022-07-05 02:36:12 +02:00
Tom Rothamel bbfd64a25c Merge pull request #3735 from renpy/doc-mousedisplayable
Fix the doc for MouseDisplayable
2022-07-04 20:34:50 -04:00
Gouvernathor bd9d586f71 Fix the docstring integration
For some reason the former one didn't work. The FontGroup class was used as an example.
2022-07-05 00:28:54 +02:00
Gouvernathor 73741573ec doc: Fix wrong ATL syntax 2022-07-05 00:22:45 +02:00
Tom Rothamel a58f4c9ad7 Merge pull request #3698 from renpy/fix-3696
Fix CropMove transitions
2022-07-04 11:29:39 -04:00
Tom Rothamel df4bbb5add Merge pull request #3734 from renpy/trace-per-frame
Add _trace_screen to per_frame_screens
2022-07-04 11:27:32 -04:00
Gouvernathor a525764881 Revert the original per_frame_screen to [ ] 2022-07-04 16:02:56 +02:00
Gouvernathor c8653b2a63 Add _trace_screen to per_frame_screens in its file 2022-07-04 16:01:57 +02:00
Tom Rothamel 5949b9e639 doc: Credits and sponsors. 2022-07-04 01:04:09 -04:00
Tom Rothamel ce54f2b44a Fix translations. 2022-07-03 16:08:16 -04:00
Tom Rothamel 30e4790085 ua: Fix spelling of ukranian, minor issues with the translation. 2022-07-03 16:06:40 -04:00
Tom Rothamel fc2d988ddd Add a Ukranian translation of the launcher.
Credit goes to Matias B.
2022-07-03 15:28:18 -04:00
Tom Rothamel 44facb7d33 Make glyph and ruby public.
Fixes #3733.
2022-07-03 11:05:38 -04:00
Gouvernathor fe76a66555 Add _trace_screen to per_frame_screens 2022-07-03 13:48:53 +02:00
Tom Rothamel c4890fdbd5 OldMoveTransition resets its timing to None rather than 0.
Causing zoomin and zoomout to work.

Fixes #3731.
2022-07-02 18:00:52 -04:00
Tom Rothamel 86d4d2e78f Make it clear that Movie can take a list of movies to play.
This also fixes some issues that show up when playing a list of movies.

Fixes #3710.

Closes #3715, which this is based on.
2022-07-01 22:43:39 -04:00
Gouvernathor d6ae3ba92b Merge pull request #3728 from Neyunse/master
[DOC] fixed translation gui.text_font example
2022-07-01 23:34:53 +02:00
Neyunse 9a4f0bd88d [DOC] fixed translation gui.text_font example 2022-07-01 18:30:30 -03:00
Tom Rothamel 07e2dbcaac doc: Spacing fix to last merge. 2022-06-30 22:10:25 -04:00
Tom Rothamel b06e1c0e0d Merge pull request #3709 from Neyunse/master
[DOC] improved translation ID example
2022-06-30 22:09:45 -04:00
Tom Rothamel 513acc0bdc Merge pull request #3716 from mal/mobilebuild-str-type-fix
py3: Update mobilebuild exception logging
2022-06-30 22:09:12 -04:00
Tom Rothamel b92b057a40 Document that extend doesn't work well with language changes.
Fixes #3724.
2022-06-30 22:08:35 -04:00
Gouvernathor 4e859239aa doc: NotImplemented is not an exception
...and NotImplementedError is not even the exception being raised in that case, it's only Exception("Not implemented")
2022-06-30 11:40:54 +02:00
Tom Rothamel d961eec481 doc: Better documentation for Function. 2022-06-30 00:30:59 -04:00
Tom Rothamel fd3e9ce17d py2: Use object identity to compare Function.callable
The reason for this is that in py2, if a == b, then a.append == b.append.
That's not true in py3. This makes py2 slower, but correct.
2022-06-29 22:07:06 -04:00
Tom Rothamel bccc081971 sl2: Finish the renaming of dump to dump_const. 2022-06-29 21:42:34 -04:00
Tom Rothamel 42cbccfafa Fix comment indentation. 2022-06-29 21:42:34 -04:00
Tom Rothamel 866bb6ce45 Use identity, not equality, when comparing Functions for equality.
This fixes a problem where a Function with equal mutable arguments
would compare equal to another similar function, while not
actually performing the same action.
2022-06-29 21:42:34 -04:00
Tom Rothamel 8aa4a2fedb Merge pull request #3708 from renpy/fix-3701
Document the file parsing order as the unicode order of filepaths, not filenames
2022-06-29 20:08:47 -04:00
Tom Rothamel 08c18e1539 Merge pull request #3717 from zedraxlo/patch-1
Fix GetStat & SetStat.
2022-06-29 20:08:07 -04:00
Tom Rothamel 1eb7650e49 Avoid compiling PyExprs that have been rolled back.
Fixes #3719.
2022-06-29 20:02:12 -04:00
Gouvernathor aa9df2c3b6 doc: fix typo and try another markup 2022-06-30 01:19:10 +02:00
zedraxlo 200ce6212f Fix GetStat & SetStat. 2022-06-29 12:18:43 +08:00
Mal Graty 8923309409 py3: Update mobilebuild exception logging
In py3 the print_exc function prints a str, which files opened in binary
mode do not like. Conversely py2 doesn't seem to mind whether the file
is in binary mode or not.

This matches the approach taken in the rest of the file, where various
logs and outputs are also not opened in binary mode any longer.
2022-06-29 04:36:32 +01:00
Andykl f198e4b94e Merge pull request #3713 from Elckarow/patch-2
Fixed typo in doc string.
2022-06-28 16:33:10 +04:00
Elckarow 1e8165e8d9 fixed typo 2022-06-28 14:31:24 +02:00
Andykl 0246043a1e Merge pull request #3712 from Elckarow/patch-1
fixed tiny typo in renpy.easy.lookup_displayable_prefix
2022-06-28 16:27:47 +04:00
Elckarow d0d0bb4408 fixed typo 2022-06-28 14:24:13 +02:00
Tom Rothamel eae1d8c7ec Prevent the updater from creating .old files.
Instead of creating a .old file that can't be deleted, the files
are moved into updater/deleted. That directory can then have a
delete attempted each time Ren'Py starts, and the files are out
of the way.
2022-06-28 02:26:07 -04:00
Tom Rothamel 03cac8dd87 Include parent directories in distribution packages.
Especially the update packages. Fixes a problem where 8.0.0
couldn't be unpacked because the steam dlc didn't include the
package file the steam dlc existed in.
2022-06-27 23:34:20 -04:00
Tom Rothamel 7726613616 Include a "default" type for Render.modal, and use it for dismiss.
This allows a default focus to be modal, which means it will be modal
for the entire screen without the dismiss itself having to take up
any size.

Fixes an issue where displayables behind the dismiss could still get
mouse focus incorrectly, but weren't clickable.
2022-06-27 21:56:59 -04:00
Neyunse 02b9b84cd4 Added an example of a more visual id
This part may be a bit confusing for some, so I added it inside a start label to make it more understandable.
2022-06-27 22:46:23 -03:00
Asriel Senna cbd0080834 doc: unicode order of filepaths, not filenames 2022-06-28 02:34:18 +02:00
Tom Rothamel 97c686557b Bump versions. 2022-06-27 17:52:03 -04:00
Tom Rothamel 00c2c864e5 Merge pull request #3703 from Numerlor/coverage_module_fix
Add missing field to Module node
2022-06-27 17:51:35 -04:00
Gouvernathor 55b00d4652 doc: fix #3685 markup issues
Markup within links and links within markup are not possible in sphinx.
2022-06-27 18:56:38 +02:00
Tom Rothamel 30dd75bb5c Update itch upload script. 2022-06-27 01:46:49 -04:00
Tom Rothamel b4ff61cb52 Include a command to upload to github. 2022-06-26 20:51:07 -04:00
Numerlor ec8f29c5a2 Add missing field to Module node
the field is required for it to compile in python 3.8+
2022-06-27 01:01:19 +02:00
Gouvernathor 545aae7a38 doc: fix ShowTransient and ToggleScreen 2022-06-27 00:06:59 +02:00
Andy_kl d8d2696f45 nearrect: Fix layout_y calculation. 2022-06-26 16:31:16 +04:00
Gouvernathor 6b135cdcb2 Apply the change to PushMove as well 2022-06-26 03:45:22 +02:00
Gouvernathor 164b43f91c translation: fix typo 2022-06-26 03:29:55 +02:00
Gouvernathor 1cf88bf69a Update transition.py 2022-06-26 03:04:51 +02:00
Tom Rothamel 10d72df6af Use an alternate unelide path for the launcher.
Which can use one of two basedirs.

Fixes #3694.
2022-06-24 22:34:59 -04:00
Tom Rothamel e6fc8f3d62 Include the machine information with a traceback.
To make it easier to diagnose problems caused by 32-bitness.
2022-06-24 19:20:22 -04:00
Tom Rothamel 9ebfdfe27b doc: Set the size of the sidebar.
This prevents it from overlapping the text when the window is small.
2022-06-23 22:40:25 -04:00
Andy_kl f31ce6e508 Avoid saving the game in replay when entering background on Android. 2022-06-23 21:27:15 +04:00
Tom Rothamel 03548139dd Do not take __all__ from minstore.
Doing so causes it to be in the stores that are creates, which
prevents those stores from exporting all their names to
from store.whatever import *

Fixes #3693.
2022-06-23 00:34:06 -04:00
Tom Rothamel bb093ebfed Merge pull request #3642 from kyouryuukunn/fix_doc_issue
fix doc perspective defaut to None
2022-06-22 21:26:08 -04:00
Tom Rothamel ddc4eab5fd Check for unexpected indentation at the start of a file.
Before this change, it was possible for an entire file to be uniformly
indented and still accepted. That's not something that was intended.

This won't lose any games, as the check is only performed at parse
time, and so the source code exists (and can be dedented easily).

Fixes #3691.
2022-06-22 21:14:06 -04:00
Tom Rothamel 6350d00507 Merge pull request #3692 from mal/with-callback-regression
with: Remove previously unreachable code
2022-06-22 20:57:20 -04:00
Mal Graty e25f8a2461 doc: Update with_callback documentation 2022-06-23 01:55:43 +01:00
Mal Graty e4eac02438 with: Remove previously unreachable code
The code being removed was unreachable prior to 7.5/8.0 due to a bug
meaning that the paired parameter was never passed. This meant it could
never be a dict, and that this code was unreachable.
2022-06-23 00:39:20 +01:00
Tom Rothamel e20f8e8253 Fix crashes with movies created outside of the init phase.
Specifically,

    screen test(param):
        add Movie(play=param + ".webm")

    label start:
        call screen test("a b c d")
        return

would crash, as the channel used is based on the movie file name,
which wouldn't be registered in the init phase.
2022-06-22 18:04:21 -04:00
Tom Rothamel 5e3356cde4 Revert "atl: Always report an infinite loop, even if not the first iteration."
This reverts commit f558784835.

Fixes:

    image girl:
        Model().child(Placeholder('girl'), fit=True).shader('test.time')
        pause 0
        repeat
2022-06-21 22:10:23 -04:00
Tom Rothamel 675ec559e2 When a text box is present, ctrl no longer causes skipping.
This prevents a problem where hitting the ctrl key to use the
standard keyboard shortcuts would cause the skip indicator to
toggle on and off.
2022-06-21 21:19:07 -04:00
Gouvernathor ca4388d949 doc: Document renpylint (#3684)
* doc: Add a dedicated lint section

* add link anchor

* doc: add Lint advantage for define and default

* doc: add lint reference in displaying-images

* add a reference to the main lint section

* doc: reference to Lint in statement equivalents

* fix phrasing

* fix wording
2022-06-20 21:46:10 -04:00
Gouvernathor 6a2afb1f0c doc: More internal references within the documentation (#3685)
* Add links in quickstart to other parts of the doc

not too sure about the word "article" though

* linkify Statement Equivalents, and move renpy.pause inside it

* doc: add see-also section to displaying-images

* fix typo

* doc: Add anchors and fix refs

* doc: Add anchors and fix refs

* doc: Add anchors and fix refs

* doc: Add anchors and fix refs

* doc: Add anchors and fix refs

* doc: Add anchors and fix refs
2022-06-20 21:45:36 -04:00
Gouvernathor acdc106a5d doc: fix config.rst 2022-06-21 03:10:41 +02:00
Asriel Senna 54567db70a doc: improve and fix offer_screen doc 2022-06-21 03:09:09 +02:00
Tom Rothamel e924aaccbe pylance: Fix reported type problems. 2022-06-20 20:57:20 -04:00
Tom Rothamel 3c3dcebb27 Pass the gallery by name.
For compatibility with older games.
2022-06-20 20:08:42 -04:00
Tom Rothamel 4cce60842a Merge pull request #3683 from mal/fix-gallery-navigation
Pass gallery object to gallery navigation screen
2022-06-20 20:00:11 -04:00
Andy_kl 78c6df9453 Do not call quit label from the parse errors screen.
quit label may use variables defined in init code or in
runtime, those making it impossible to quit the game.
2022-06-20 14:35:54 +04:00
Mal Graty b01b987cad Pass gallery object to gallery navigation screen 2022-06-19 21:18:25 +01:00
Tom Rothamel d86b9c2cc1 Change the default for copy/paste with renpy.input, document. 2022-06-19 10:50:29 -04:00
Tom Rothamel 3f4bfaf699 Update sponsors. 2022-06-19 10:50:20 -04:00
Tom Rothamel acb83704e6 Add the copypaste parameter to renpy.input.
copypaste in renpy.input() just like the input in screens
2022-06-19 10:48:03 -04:00
Gouvernathor 3b7bbcab73 Clarify Transform's fields' allowed use (#3674)
doc: Clarify when transform fields can be updated.
2022-06-19 10:44:11 -04:00
Tom Rothamel 98a21e949f doc: Update changelog. 2022-06-19 10:08:14 -04:00
Gouvernathor 082457ace0 doc: Update the Resolution screenshot 2022-06-19 14:18:47 +02:00
Tom Rothamel 3340f4f85a Rewrite the butler download to use requests.
Fixes #3679.
2022-06-19 02:31:38 -04:00
Tom Rothamel d06a6f3034 iap: Catch the exception if the Android backend fails to initialize.
This can happen if if the IAP backend is configured to be "none",
but there is still a product configured.
2022-06-19 02:03:36 -04:00
ねゆんせ 825b9eac0b Fixed missing copypaste arg 2022-06-18 14:48:50 -03:00
kyouryuukunn 850fa94c3d mofify alpha, zoom type in default and reset transform 2022-06-18 09:13:06 +09:00
Gouvernathor dc9d32e35f fix typo (non-doc) 2022-06-17 23:01:27 +02:00
Tom Rothamel dea6affaed Allow default_layer to work if the tag is None.
Since that happens in a few places.
2022-06-16 23:16:37 -04:00
Tom Rothamel 389ec654db Use default_layer throughout Ren'Py. 2022-06-16 22:12:21 -04:00
Tom Rothamel fa71842102 Fix shutting down an app on Android.
By actually calling System.exit(0).
2022-06-16 21:38:58 -04:00
Tom Rothamel 0ca3b19a77 Merge pull request #3670 from mal/more-android-lifecycle
android: Notify system that we're finishing
2022-06-16 20:50:11 -04:00
Mal Graty 122efa7821 android: Notify system that we're finishing 2022-06-16 20:17:37 +01:00
Mal Graty 3e854bc7cb Remove duplicated SDK exclusion 2022-06-16 10:28:17 +01:00
Tom Rothamel f4adf1fc93 Merge pull request #3659 from mal/pyi-free-sdk
Avoid distributing python interface files
2022-06-15 22:02:09 -04:00
Tom Rothamel 2a66adb496 Merge pull request #3665 from loafylemon/master
Fix typo in Preference action
2022-06-15 18:57:15 -04:00
LoafyLemon e02ace5813 Fix typo in Preference action 2022-06-15 22:50:41 +01:00
Tom Rothamel 952c234857 Do not allow a deferred rollback when the rollback log is empty.
Fixes #3660.
2022-06-15 00:27:21 -04:00
Tom Rothamel 938fdbd657 Detect all nightlies, including Ren'Py 7/8. 2022-06-14 20:58:50 -04:00
Tom Rothamel 81ae489751 Avoid distributing pyi files. 2022-06-14 01:31:50 -04:00
Tom Rothamel 94b3b92f5b Protect stop functions with try/catch blocks.
In case the audio didn't actually start.

Fixes #3652.
2022-06-14 01:17:05 -04:00
Tom Rothamel 69da1537eb Avoid using PBOs on emscripten.
As it causes a crash.
2022-06-14 01:08:41 -04:00
Mal Graty b2195ee6c9 build: Remove now redundant exclusion
We exclude pyi files when building the SDK, so they should never be
available to end up in games.
2022-06-14 05:37:57 +01:00
Mal Graty 800b5fb003 sdk: Exclude pyi files from distributions 2022-06-14 05:36:41 +01:00
ねゆんせ daa238cadb Copy Paste
If True, it becomes possible to copy and paste into this input. (By default, disabled.)
2022-06-14 01:32:20 -03:00
Tom Rothamel 86576cf07c Delay opening log.txt until renpy.config.logdir is set.
Before the logdir is set, the logfile might be created in the
wrong place. Logging lines before then can be ignored, as they're
likely redirected prints, and once the log is ready logging
begins.
2022-06-13 23:22:35 -04:00
Tom Rothamel f1d9e1d44b Avoid using a PBO on ANGLE.
Fixes #3654, where this was causing the image to not be fully
loaded.
2022-06-13 22:25:05 -04:00
Tom Rothamel 3a7f94e401 Merge pull request #3653 from mal/subfile-expand-api
Fix opening a file with encoding from an archive
2022-06-13 19:19:16 -04:00
Tom Rothamel b4f8a40c86 Merge pull request #3650 from mal/fix-with-callback
Fix paired parameter of with_callback
2022-06-13 19:19:04 -04:00
Mal Graty 6fcc94879c io: Expand SubFile to support more of the file API 2022-06-13 17:43:58 +01:00
Gouvernathor 826ad1c8bc doc: fix typo 2022-06-13 01:20:52 +02:00
Tom Rothamel 6f19db5d5a Work on the Android lifecycle.
On the new Galaxy Tab A7 Lite, I noticed that if a game didn't respond
to the DIDENTERBACKGROUND event fast enough, it would be unable to
execute anything, and stop responding. This responds immediately,
which then allows the game to save before the TERMINATE request
happens.
2022-06-12 18:33:03 -04:00
Tom Rothamel 0e8f99eddb gl2: Copy image data to a pixel buffer object when uploading a texture.
This fixes a problem that was showing up on some samsung devices, like
my Galaxy Tab A7 Lite, where for some reason (potentially due to
alignment restrictions gl doesn't specify) uploading a texture
directly causes a crash.

Per #3643.
2022-06-12 14:29:23 -04:00
Tom Rothamel 352dbebc33 gl2: Avoid an anisotropy call that fails on gles. 2022-06-12 14:04:21 -04:00
Mal Graty ab0462af7c doc: Correct with_callback documentation 2022-06-12 01:40:33 +01:00
Mal Graty 85546d37f0 with: Fix paired parameter of with_callback
Parameter order of renpy.with_statement changed 11 years ago which
resulted in the value intended for the "paired" parameter being passed
to "always" instead.
2022-06-12 01:29:14 +01:00
Tom Rothamel f50dd2f02d gl2: Do not try to set anisotropic on GLES.
Since it's not supported there.
2022-06-11 19:51:07 -04:00
Tom Rothamel 414ae6a299 Add Matrix.origin to the pickled fields.
Fixes #3646.
2022-06-11 17:30:42 -04:00
Tom Rothamel 782df7d83f atl: Execute a function up to twice.
First to determine if it should block, then again with the correct
timestamp.
2022-06-10 20:37:20 -04:00
kyouryuukunn aa4d1cbdd5 fix doc perspective defaut to None 2022-06-11 08:09:11 +09:00
Gouvernathor 131a9b810a doc: fox typi 2022-06-11 01:08:01 +02:00
Tom Rothamel 04d194e673 atl: Allow the function statement to block in some cases. (PR #3640)
Specifically, an ATL function statement is considered to be blocking when running it with st=0 returns non-None, and non-blocking when running it with st=0 returns None.

Fixes #3636
2022-06-10 18:56:59 -04:00
Tom Rothamel db349ffe62 updater: Force the url to be unicode.
Fixes #3641.
2022-06-10 18:53:40 -04:00
Mal Graty a56b0965d8 atl: Compat for previous commit 2022-06-10 20:18:22 +01:00
Mal Graty 11683f9e40 atl: Restore blocking to functions that delay
Adding Tom's fix for #3636.

Co-authored-by: Tom Rothamel <pytom@bishoujo.us>
2022-06-10 19:56:36 +01:00
kyouryuukunn 54c4cfc614 Merge pull request #3638 from kyouryuukunn/Japanese_translation_update_220610
update Japanese translation
2022-06-10 15:00:14 +09:00
kyouryuukunn c5199b9298 update Japanese translation 2022-06-10 14:56:17 +09:00
Tom Rothamel f558784835 atl: Always report an infinite loop, even if not the first iteration. 2022-06-10 00:56:08 -04:00
Tom Rothamel 7e3f4d69c1 Use back->front order when iterating for find_focus.
A relatively small change, but it fixes a focus issue in LSF post 552932.
2022-06-09 21:57:10 -04:00
Gouvernathor f7e2ddbe8f fix french translation 2022-06-09 13:05:40 +02:00
Tom Rothamel 98e9cba947 Merge pull request #3630 from Andykl/atl-py_eval
atl: `Context.eval` now uses `renpy.python.py_eval` instead of Python `eval`
2022-06-08 18:58:46 -04:00
Andy_kl f23f16e403 atl: Context.eval now uses renpy.python.py_eval instead of Python eval
This makes any expression used in ATL cached in bytecode.rpyb
2022-06-09 01:08:19 +04:00
Tom Rothamel 068b2a9194 Merge pull request #3628 from Moshibit/master
delete unnecessary comment
2022-06-08 12:20:21 -04:00
Moshibit a5d5be6a45 Update screens.rpy 2022-06-08 02:05:21 -05:00
Moshibit 6a9ba27917 Update screens.rpy 2022-06-08 02:03:52 -05:00
Moshibit 0e2fa5b20a Update screens.rpy 2022-06-08 01:56:58 -05:00
Tom Rothamel 65d433c43a A modal saybehavior should not stop skipping.
This restores the behavior of 7.4.10 and earlier, and it makes
sense - a modal screen blocks the saybehavior's functionality in
its entirety.

Fixes #3624.
2022-06-07 19:09:19 -04:00
Tom Rothamel cdc94c11b9 Invert how mark_modal works.
The find_focus method iterates from back to front, and so when
mark modal is called, the focuses behind it (that have already
been given to the callback) are the ones that can't be given focus.

The previous implementation got that wrong - the displayables in
front were the ones that couldn't be given focus, which lead to
random problems.

Fixes #3617.
2022-06-07 02:21:05 -04:00
Tom Rothamel 808cd21b0e Check that the correct data is present before showing the console trace screen.
Fixes #3621.
2022-06-06 22:26:58 -04:00
Tom Rothamel 7b481439df Only allow unfocusing to restart the interaction once.
This is something of a compromise, to prevent games that cause
interaction restarts in their unfocus handlers from preventing
the game from interacting at all.

Fixes #3617.
2022-06-06 01:02:10 -04:00
Tom Rothamel 106dc3dcc9 Restore code removed by mistake. 2022-06-05 19:15:57 -04:00
Tom Rothamel 5611f46c37 Call per_interact on the actual child of an ImageButton.
Fixes #3618.
2022-06-05 16:42:29 -04:00
Gouvernathor d943f56a40 doc: fix typo 2022-06-05 20:15:58 +02:00
Gouvernathor 6de4a958d1 doc: fix typo 2022-06-05 19:28:34 +02:00
Tom Rothamel 5a9efaa85f doc: Fix typo. 2022-06-05 12:44:35 -04:00
Tom Rothamel 4174030a71 Avoid prefixing the markets package with a directory.
I've had multiple requests for this, as it improves the Steam
workflow, and the infrastructure is there now.
2022-06-05 12:43:09 -04:00
Tom Rothamel b0bbed2ef2 Use the correct parameter when setting pan.
Fixes renpy/renpyweb#30.
2022-06-04 18:25:02 -04:00
Andy_kl 0b62964465 Fix Russian translation 2022-06-03 21:57:40 +04:00
Tom Rothamel 22929a4deb Prevent a divide-by-zero error when changing the volume during fade.
Fixes #3603.
2022-06-03 00:03:20 -04:00
Tom Rothamel 355bdc6e50 Store a scope with DynamicImage.
This allows the scope to be used when the image needs to be updated.

Fixes #3604.
2022-06-02 02:04:01 -04:00
Tom Rothamel e4a5b29452 Document that input only supports alphabetic input on Android. 2022-06-01 22:38:20 -04:00
Tom Rothamel 2a8bc376a0 Document that config.history_allow_tags needs to include noalt. 2022-06-01 22:38:20 -04:00
Gouvernathor 2489cc306b Readd ## to comment translation
fix the second part of #3608, independently of its android issue
hopefully it's the only comment missing it
2022-06-02 01:37:46 +02:00
Tom Rothamel c83a90ab1d Add the bare- versions to the check in build. 2022-05-30 11:32:32 -04:00
Tom Rothamel 8cd4b59552 Add the ability to create bare zip and tar.bz2 files.
Per creator request to make it easier to package games for
Steam.
2022-05-30 10:51:42 -04:00
Tom Rothamel ca87d36cee Remove spurious files introduced by last merge. 2022-05-29 21:56:10 -04:00
Tom Rothamel 310ae4bc60 Merge pull request #3598 from Diapolo10/update_finnish
Updated Finnish translation
2022-05-29 21:54:32 -04:00
Gouvernathor 64a7b16082 doc: reshape misc config variables and add others 2022-05-30 03:06:28 +02:00
Gouvernathor a90ca9c56d doc: add page ref anchor 2022-05-30 03:03:58 +02:00
Gouvernathor 1420001d49 doc: add page ref anchor 2022-05-30 03:02:29 +02:00
Gouvernathor 045afed74c doc: add page ref anchor 2022-05-30 03:01:05 +02:00
Tom Rothamel 927b604cdd Ignore empty lines in the deferred update file. 2022-05-29 20:58:45 -04:00
Gouvernathor 919c8737f7 doc: remove double :var: definition 2022-05-30 02:43:47 +02:00
Tom Rothamel cdbf7bb267 Add some logging to deferred rename errors. 2022-05-29 20:18:24 -04:00
Tom Rothamel 78a10967e8 Switch away from using Aspera to upload. 2022-05-29 20:18:24 -04:00
Moshibit b800fa27fb Add scattered configuration variables to main list (#3599)
* Update config.rst
2022-05-30 02:10:29 +02:00
Gouvernathor 1c04813b21 doc: typos and grammar 2022-05-30 01:49:32 +02:00
Lari Liuhamo 5396ae43a1 [PATCH] Launcher Finnish translations 2022-05-29 23:43:26 +03:00
Gouvernathor f4da1ab3fe doc: add use for zorder 2022-05-29 22:35:11 +02:00
Gouvernathor e4d69b8437 doc: Typos and light rephrasing 2022-05-29 22:01:06 +02:00
Tom Rothamel 9d507b0e9a More defensive coding around Apple notarization server failures. 2022-05-29 10:49:38 -04:00
Tom Rothamel b9dbc05bb9 Mark empty styles as built. 2022-05-28 22:35:36 -04:00
Tom Rothamel d10619b1f3 Merge pull request #3589 from renpy/doc-language-action
Link Language and other scattered actions to the main list of actions
2022-05-28 22:22:33 -04:00
Tom Rothamel 252014f1ae Merge branch 'master' into doc-language-action 2022-05-28 22:22:21 -04:00
Tom Rothamel 83f89058b3 Merge pull request #3590 from renpy/doc-actions
Link to the Action class at the end of the actions list
2022-05-28 22:21:11 -04:00
Tom Rothamel 476de24fc8 Merge pull request #3591 from renpy/see-also
Add See also sections in the doc
2022-05-28 22:20:43 -04:00
Tom Rothamel 98e2cb8568 Merge pull request #3592 from renpy/doc-3577
Document renpy.show_screen's kwargs in screen-related actions
2022-05-28 22:20:24 -04:00
Tom Rothamel 97242506f4 Merge pull request #3588 from renpy/sysmodules-copy
Iterate over a copy of sys.modules
2022-05-28 22:18:27 -04:00
Tom Rothamel fde197f7da doc: Raspberry Pi. 2022-05-28 18:15:54 -04:00
Tom Rothamel afbc15fbcf doc: Changelog and ChromeOS. 2022-05-28 18:04:45 -04:00
Totally a booplicate 133a5a8c76 Improve lint 2022-05-28 22:35:50 +03:00
Totally a booplicate aa08660ca6 Fix regression from 3dd71cc
Prevent `_zorder` from leaking to screens scope
2022-05-28 22:23:42 +03:00
Totally a booplicate 93cce0fcf8 New screen statement clauses
Adds `onlayer`, `zorder`, and `as`
2022-05-28 22:18:32 +03:00
Tom Rothamel 3addbbf9d2 Only sign/notarize the mac app once when distributing Ren'Py. 2022-05-28 10:15:10 -04:00
Tom Rothamel 5598d4ff9c Retry notarization wait.
To better deal with Apple's flaky servers.
2022-05-28 08:08:58 -04:00
Tom Rothamel b67c185d9b Add aarch64 and armv7l to the build system, as appropriate.
This adds a new download, sdkarm, that's meant for running on
the Raspberry Pi and ARM Linux.

It also modifies the linux build to include ARM versions if the
ARM directories are present in lib.
2022-05-28 02:03:18 -04:00
Tom Rothamel 0a4bb0af8b Add a script to rsync a minimal Ren'Py over to a computer.
This is mostly used for testing on my chromebook, but might be
good in other places.
2022-05-27 21:44:32 -04:00
Tom Rothamel 0077e555f9 Multiple editor changes.
* Look for editors in renpy_base rather than basedir, allowing
  the editor system to be used even if the launcher is launched
  directly.

* For VSCode-Linux, use renpy.arch to locate a platform-specific
  version of the editor.

* Do not present Atom as a valid choice when running on a platform
  where we don't support Atom.

* Only offer jEdit to users that have it already installed - it's so
  obsolete at this point, that it's only a confusing extra option.
2022-05-27 21:39:33 -04:00
Tom Rothamel 0c90ed0599 Add support for launching arm and arm64 versions of code. 2022-05-27 21:38:12 -04:00
Tom Rothamel 8bca8e664c Add renpy.arch.
This reports the architecture portion of RENPY_PLATFORM, or unknown
if it's not known.
2022-05-27 20:30:55 -04:00
Gouvernathor eff0947326 doc: Document show_screen's kwargs in actions 2022-05-27 03:23:40 +02:00
Gouvernathor 936f75be9f doc: Add see-also section in Displayables 2022-05-27 03:09:39 +02:00
Gouvernathor ab4ce0e927 doc: add screen-python beacon 2022-05-27 03:06:13 +02:00
Gouvernathor 676f08c75e doc: Add see-also section in screens 2022-05-27 03:04:47 +02:00
Gouvernathor 77e320dcb2 doc: fix double include with links 2022-05-26 23:18:35 +02:00
Gouvernathor 830dd12714 Update screen_actions.rst 2022-05-26 22:51:51 +02:00
Gouvernathor f9be934b08 doc: Add Language to the main list of actions 2022-05-26 14:20:23 +02:00
Gouvernathor 2e604a4f07 Remove iteration over uncopied sys.modules 2022-05-26 13:54:16 +02:00
Gouvernathor f879a89888 Iterate over a copy of sys.modules 2022-05-26 11:40:00 +02:00
Tom Rothamel 95b856747b Fix translations. 2022-05-26 01:14:42 -04:00
Tom Rothamel 559e6d81d0 py3: Port fix_translations.py 2022-05-26 01:14:24 -04:00
Tom Rothamel 4158169dab Let config.has_autosave disable forced autosaves, too.
Fixes #3378.
2022-05-25 21:35:55 -04:00
Tom Rothamel a77456cb59 Raise version requirements.
Fixes #3553.
2022-05-25 21:25:21 -04:00
Tom Rothamel 03fb91d5fc Clear up where nearrect works the best.
Fixes #3584.
2022-05-25 21:05:39 -04:00
Tom Rothamel f83b30cea3 pyright: Fix warnings. 2022-05-25 20:58:39 -04:00
Gouvernathor 6b7aa8c6bc Remove creating screens with python and most ui functions from the documentation (#3547)
* Remove python creation of screens from the doc

* doc: Undocument various ui functions and renpy.define_screen

* doc: Move and rephrase renpy.predicting's documentation

* Clarify renpy.variant

and remove reference to screen creation and style setup

* doc: Remove unnecessary interstitial addition

* Changelog the removal of python screen creation
2022-05-25 19:33:58 -04:00
Gouvernathor 80bc93d417 Doc additions (#3532)
* Linkify config.show and config.scene

* Deindent stuff

* Specify that label is a string (and deindent)

* Add explanation for the channels

It was asked for...

* better

* Add a link to the audio actions section

* Change args of Rollback and tweak HideInterface

...and deindent

* Document setdict with lists, and clarify names

...and deindent

* Update displayables.rst

* Replace the part removed from displayables.rst

fixes part 2 of #3500

* Document Text's slow_done arg

per #3500

* Document Texts **properties and clarify its mipmap

finalize #3500

* remove unnecessary backslash
2022-05-25 19:33:21 -04:00
Gouvernathor 2695658d6f Document the way the volume works (#3536)
* Add the volume section to the Audio page

* Document the mixer parameter as required

and add explanations

* Mark "all mute" as deprecated

* Remove "main mute"

* Add and edit content in the volume section

* Update preferences audio functions

* Add set_mute

* Update list of mixers

* Update list of mixers

* Fix rst
2022-05-25 19:31:27 -04:00
Gouvernathor f31957e1ec Clarify the build/distribute functions (#3550)
* doc: Expand build.archive's documentation

* doc: Document build.classify's second argument

how it creates new valid file_lists

* doc: Separate the archive names from the file_list

* doc: Finish separating archive and file_list names

* doc: clarify build.classify

* doc: Document build.archive's second argument

how it creates new valid file_lists too

* doc: expand build.package's example

Co-authored-by: raspberry-soft <87047775+raspberry-soft@users.noreply.github.com>

Co-authored-by: raspberry-soft <87047775+raspberry-soft@users.noreply.github.com>
2022-05-25 19:30:39 -04:00
Tom Rothamel 9d4bc9b878 Merge pull request #3576 from renpy/shader-name-collision
Add warning about names interference between shaders
2022-05-25 19:29:52 -04:00
Tom Rothamel a337b0b998 Merge pull request #3574 from kigyo/patch-2
Update most commonly used German terms
2022-05-25 19:29:33 -04:00
Gouvernathor 896854c287 doc: explain and fix typo 2022-05-25 21:29:09 +02:00
Tom Rothamel 88eeb27a77 nearrect: Properly hide non-transform displayables.
This makes sure hiding can take a single frame, so that a redraw
is not required to hide nearrect.

Per #3584.
2022-05-25 10:44:43 -04:00
Tom Rothamel 95ab55ef04 Add a callback to modify the gl2 window flags. 2022-05-25 09:11:33 -04:00
Tom Rothamel dff1bad5e9 Write android json in text mode.
As required by Python 3.

Fixes #3564.
2022-05-25 01:30:15 -04:00
Totally a booplicate 99f8cdd744 Add ToggleFocus.
This combines CaptureFocus and ClearFocus, as required.

Closes #3575.
2022-05-25 01:00:00 -04:00
Tom Rothamel f6a741d59e Enable f-strings in simple_expression contexts.
By making python_string() match f-strings.

Fixes #3559.
2022-05-25 01:00:00 -04:00
Tom Rothamel 5f787403a4 Merge pull request #3581 from renpy/fix-3580
Additional None-check for run_periodic
2022-05-25 00:21:47 -04:00
Tom Rothamel 94c074160b Allow GetTooltip to return the last tooltip.
This helps in certain cases, like fading away tooltips that are
shown with focus rectangles and nearrect.
2022-05-25 00:20:27 -04:00
Tom Rothamel c47ea7e92b nearrect: Make more reliable with transforms. 2022-05-25 00:18:10 -04:00
Tom Rothamel aa0dedf451 nearrect: Improve nearrect to work with transforms.
It will now deliver show and hide events to a transform that is
the child of the nearrect.
2022-05-24 23:25:43 -04:00
Tom Rothamel 31247a372d Merge pull request #3579 from Booplicate/nearrect_fixes
NearRect fixes
2022-05-24 22:28:01 -04:00
Tom Rothamel df6386d8b4 Fix Steam typos. 2022-05-24 21:27:02 -04:00
Gouvernathor 88727b02b9 Additional None-check for run_periodic 2022-05-25 01:09:38 +02:00
Gouvernathor 32517838ee fix typo 2022-05-25 00:07:38 +02:00
Totally a booplicate 9cce5abd43 raise if config.developer as this is probably a mistake 2022-05-25 00:48:40 +03:00
Totally a booplicate d0b0b7ddf6 doc: clarify how nearrect should be used 2022-05-25 00:46:16 +03:00
Totally a booplicate a787d97d30 access the attribute, not the method 2022-05-24 22:40:00 +03:00
Totally a booplicate a8ac2c7c0d offsets can't be None 2022-05-24 22:38:58 +03:00
Gouvernathor 2e6b9f7b02 doc: Add warning about shaders' interference 2022-05-24 17:10:47 +02:00
kigyo ae0343280b Update most commonly used German terms 2022-05-24 15:38:30 +02:00
Tom Rothamel 390dd299cc Remove now-meaningless exception catching. 2022-05-24 09:14:50 -04:00
Tom Rothamel 0f054876a5 Merge pull request #3573 from renpy/bare-except
Rmove bare excepts from the repository - 2
2022-05-24 09:13:24 -04:00
Tom Rothamel b38815b2de compat: Stub sys.setdefaultencoding.
Which is actually called by Python 2 games.
2022-05-24 09:11:55 -04:00
Asriel Senna 840029ff6f revert changes to the C file 2022-05-24 15:02:06 +02:00
Tom Rothamel b875ef182f compat: Fix reordering globals in a function.
Minor problems with the previous implementation.
2022-05-24 08:59:22 -04:00
Gouvernathor ffc12da530 doc: update obsolete link
Python 2.3.4 ?
2022-05-24 13:19:33 +02:00
Gouvernathor 025f7447ae Fix tpref fit's list-table indent 2022-05-24 12:59:21 +02:00
Asriel Senna e36ac33d40 remove bare excepts from the repository 2022-05-24 12:43:49 +02:00
Tom Rothamel 084b01745e Rename renpy.file to renpy.open_file, and allow it to take an encoding.
The name brings it inline with the Ren'Py verb_noun naming style,
and is useful now that file() isn't part of Python 3. The encoding
is useful in Python 3, and by allowing a default encoding to be
set, help port Python 2 games to Python 3.
2022-05-24 02:20:42 -04:00
Tom Rothamel 1a18fe502b compat: Reorder globals within a function.
Newer versions of Python 3 enforce the condition that a global
statement has to come before variables are assigned, while older
Python versions didn't enforce this.

Since games rely on this to work, this pass finds all the global
statements inside the function, replaces them with pass statements,
and then creates a new global statement at the start of the function.

This isn't needed for nonlocal, as no games currently use that
statement.
2022-05-24 01:55:52 -04:00
Tom Rothamel 1c8dcefe26 Fix the Python 2 spaceship operator.
This converts it into !=.
2022-05-24 00:21:55 -04:00
Tom Rothamel 1438d5a295 Remove the Python 2 print statement when compiling for Python 3.
It seems a decent number of Ren'Py 7 games have print statements,
and so removing those statements makes it possible to run those
under Ren'Py 8, at least if no other problems show up.
2022-05-24 00:17:04 -04:00
Tom Rothamel 2a9f18d650 Fix rollback purging (mal's #3570)
Attempt to take and run with the ideas from a851baf.

Fixes #3563.
2022-05-23 19:31:09 -04:00
Mal Graty c8f4110c14 rollback: Exclude module and type instances
As per a851baff1b.
2022-05-24 00:27:39 +01:00
Mal Graty 566dafa44e rollback: Check reachable membership
Based on Tom's work in a851baff1b.

- Checks for membership in reachable which is a cheaper option than
  checking for a not None lookup, at the cost potentially permitting the
  o_id of None itself.

- Adds o_id to seen before type checking, so that if we see them again
  we can short-circuit the type check.

- Type checks o, rather than reachable[o_id], saving a lookup.
2022-05-23 23:57:58 +01:00
Mal Graty 452c9b0ecd Revert "Fix reachability analysis."
This reverts commit a851baff1b.
2022-05-23 23:41:08 +01:00
Tom Rothamel d5a16d33bb Merge pull request #3569 from renpy/fix-3561
Re-enable TODO in the launcher
2022-05-23 18:11:53 -04:00
Gouvernathor add79241ab Wrap obsolete decoding in PY2 block 2022-05-24 00:10:46 +02:00
zedraxlo 87d62b689a Update SChinese for Ren'Py 7.5/8.0 Prerelease (#3562) 2022-05-23 10:34:50 +02:00
Tom Rothamel a851baff1b Fix reachability analysis.
Due to a bad test, objects of revertable types that were not
reachable could be marked as such. This lead to multiple problems,
like unsaveable types being saved, and objects that weren't
supposed to be rolled back (like the console) being rolled
back.
2022-05-23 01:48:51 -04:00
Tom Rothamel c608bb5c1c Release the GIL while getting a video frame.
Py3 doesn't let the thread that owns the GIL get it again, and
so it needs to be released before an operation that can read
from a file, which this one seems to be able to.
2022-05-23 00:15:54 -04:00
Tom Rothamel 894652095b Add the has_key method back to RevertableDict.
It's been seen in the wild in games, despite having been
obsolete for quite some time. No harm adding it bak.
2022-05-23 00:15:08 -04:00
Tom Rothamel 0436105f74 doc: Copyedit. 2022-05-22 20:31:33 -04:00
Tom Rothamel d32d39f010 Check in release scripts. 2022-05-22 20:31:33 -04:00
Andy_kl cf07bf47de Fix destination of Atom extension executable in Atom.edit.py
This fixes #3560
2022-05-23 03:18:52 +04:00
Gouvernathor d6ef47bfa7 doc: Fix typos 2022-05-22 21:34:07 +02:00
Lari Liuhamo 02d02eef3b Merge branch 'renpy:master' into master 2022-05-22 21:09:56 +03:00
Tom Rothamel ed03f6703a Fix encodings when checking hash.txt. 2022-05-22 00:25:08 -04:00
Tom Rothamel f164ed896f Break apart the long and short the_question versions. 2022-05-21 21:58:54 -04:00
Tom Rothamel a0baff6811 Only include the correct version of raspi. 2022-05-21 21:56:01 -04:00
Tom Rothamel a4184d240f Merge pull request #3558 from renpy/the-question-version
Bump The Question's version
2022-05-21 21:34:54 -04:00
Tom Rothamel 48aca87c69 Fix launching xcode.
The project name is a bit unpredictable now, so search for it by
its extension.
2022-05-21 21:33:19 -04:00
Tom Rothamel c578c0d679 Check in keywords. 2022-05-21 21:33:09 -04:00
Asriel Senna 697ec0044a better cleanup 2022-05-22 01:29:58 +02:00
Asriel Senna 3820732100 back to hardcoding it 2022-05-22 01:25:34 +02:00
Asriel Senna 3602445e0b update translations 2022-05-22 01:08:25 +02:00
Asriel Senna 424ed2721f index config.version on version_tuple 2022-05-22 01:07:46 +02:00
Andy_kl a5d6050dae Update Russian translation 2022-05-22 01:56:39 +04:00
Andykl a10482161f Merge pull request #3555 from Moshibit/master
Update Spanish translation
2022-05-22 01:43:22 +04:00
Moshibit 495d31816a Update launcher.rpy 2022-05-21 16:35:59 -05:00
Andy_kl 0eef38749e Update Russian translation 2022-05-22 01:26:15 +04:00
Tom Rothamel 38554f9658 Merge pull request #3554 from Moshibit/master
Update Spanish translation
2022-05-21 16:45:53 -04:00
Moshibit d85316bcbc Update launcher.rpy 2022-05-21 15:44:20 -05:00
Moshibit 5eae6e35e8 Update launcher.rpy 2022-05-21 15:43:07 -05:00
Moshibit 23f8ff32cd Merge branch 'renpy:master' into master 2022-05-21 15:37:52 -05:00
Tom Rothamel 6a93524a11 doc: Update credits. 2022-05-21 16:19:42 -04:00
Tom Rothamel 255e68c791 Name Ren'Py 7.5. 2022-05-21 16:19:42 -04:00
Tom Rothamel c55c24e2fb Merge pull request #3552 from Andykl/fix-screen-expression
Fixes for show/call/hide screen expression
2022-05-21 13:53:05 -04:00
Andy_kl 98951ce469 Fixes for show/call/hide screen expression 2022-05-21 21:45:14 +04:00
Tom Rothamel c8d99c905b doc: Various fixes. 2022-05-21 12:36:32 -04:00
Tom Rothamel 61732e6488 doc: Changelog last. 2022-05-21 11:47:53 -04:00
Tom Rothamel db7e5c1d7d Merge pull request #3551 from Booplicate/screen_expression
Implement show/call/hide screen expression
2022-05-21 11:34:10 -04:00
Tom Rothamel ad2393d7c1 Merge pull request #3545 from renpy/tweak-language-prompt
Tweak the launcher language prompt
2022-05-21 11:26:57 -04:00
Totally a booplicate f327575c89 doc: document call/show/hide screen expression 2022-05-21 18:17:58 +03:00
Totally a booplicate b0cb3ec9cc implement show/call/hide screen expression 2022-05-21 16:38:12 +03:00
Gouvernathor 878e2b3a93 doc: fix typo 2022-05-21 12:23:01 +02:00
Tom Rothamel b74f9d2d09 Compile games on distribute.
This is mainly intended for the side effect of deleting obsolete
.rpyc files.
2022-05-21 02:00:37 -04:00
Tom Rothamel ad1e766cf6 Prevent characters from being truncated.
Fixes #3540, which was caused by emoji having their code points
truncated to 16-bits, and becoming totally wrong.
2022-05-21 01:55:12 -04:00
Gouvernathor e33226382a Add required font tags 2022-05-21 02:35:00 +02:00
Gouvernathor 0e824c1c98 doc: Improve the im.Tile workaround 2022-05-21 02:30:02 +02:00
Gouvernathor 20e60a08d3 Center the language prompt 2022-05-21 01:44:14 +02:00
Gouvernathor 4df8f89724 Update launcher.rpy 2022-05-21 01:43:14 +02:00
Tom Rothamel 5fe1cb84a7 Document the language-specific part of launcher translations. 2022-05-20 18:55:37 -04:00
Tom Rothamel c6178c8c75 piglatin: Remove from the language picker.
It's a little too in-your-face for a test language and easter egg.
2022-05-20 18:44:27 -04:00
Tom Rothamel c430009c22 piglatin: Update. 2022-05-20 18:44:27 -04:00
Tom Rothamel 97a10cbc50 Tweaks to the language selection change.
* Wording changes.
* Use zero-height fixeds to position text above and below the language lists.
  This means that the language buttons will not move if a translation changes
  from one to two lines (or vice versa).
* Allow the language selection to be repeated with an environment variable.
* Add some hidden comments to help people translate.
2022-05-20 18:44:27 -04:00
Tom Rothamel 3986e99d12 piglatin: Fix the translation of the language name. 2022-05-20 18:44:27 -04:00
Gouvernathor 9e4332326e doc: fix rst in screen_python
I *think* going from double backquotes to simple backquotes results in the normal display
2022-05-21 00:30:57 +02:00
Tom Rothamel c9ae74c5ae Merge pull request #3543 from renpy/launcher-lang-prompt
Launcher language prompt
2022-05-20 17:16:04 -04:00
Moshibit c0e1888702 Update Spanish translation (#3544) 2022-05-20 16:37:03 +02:00
Moshibit 428787ed19 Update launcher.rpy 2022-05-20 09:18:38 -05:00
Asriel Senna 6d407152af tweak the language-name system
allows languages where that name wouldn't necessarily come at the end of 
the sentence
2022-05-20 14:45:18 +02:00
Asriel Senna 420f5331c0 update french translations 2022-05-20 14:33:40 +02:00
Asriel Senna a183b85d1c Add a language prompt to the launcher 2022-05-20 14:33:24 +02:00
Asriel Senna 517e4d0a26 update french translations 2022-05-20 14:25:59 +02:00
Tom Rothamel 5c54ec7dbc Make specific links for Ren'Py 7 and 8. 2022-05-20 01:24:20 -04:00
Tom Rothamel 67f428f516 Updates to get Ren'Py ready for 7/8 coexistence. 2022-05-20 01:05:22 -04:00
Tom Rothamel 6118a98204 Merge pull request #3523 from renpy/tweak-changelog
Tweak changelog formulations
2022-05-19 22:17:15 -04:00
Tom Rothamel f1faa909ef Merge pull request #3533 from renpy/doc-interpol-bang
Document double-bang substitution flags and their order of application
2022-05-19 22:16:34 -04:00
Gouvernathor e63425fd7d doc: add section for Structural Similarity
that way it can be hyperlinked
2022-05-20 00:01:26 +02:00
Gouvernathor da24022e96 doc: Fix code area, add a section 2022-05-20 00:00:32 +02:00
Andy_kl d7bab64c62 Update russian translation 2022-05-20 00:40:56 +04:00
Asriel Senna a6dce15159 Fix and complete french launcher translations (includes 44f4e75) 2022-05-19 20:34:50 +02:00
Gouvernathor 1ea608e5f8 Improve the languages' layout in the launcher (#3537)
Use a hbox containing vboxes (instead of a (vp)grid), cutting the list in three columns with independent width.
2022-05-19 18:04:04 +02:00
Tom Rothamel 1ccc83dfa7 Preferences screen redesign.
This moves the preferences screen to a multi-tab design, with
the left 1/3 being a list of tabs and the right 2/3 being the
tab content.

The motivation for this was that the preferences were getting
overfull, and some translations were breaking the layout. By
dividing the screen up, we get a lot more space to play
with.
2022-05-19 02:11:41 -04:00
Tom Rothamel 40ef38776f Take the path to the system VS Code from RENPY_VSCODE, if it exists.
Fixes #3529.
2022-05-18 20:41:43 -04:00
Gouvernathor bae5a8404d Document double-bang substitution flags and order
fix #3498
2022-05-19 01:32:19 +02:00
Andy_kl 5ab598e869 Make Function action pure class 2022-05-19 01:54:50 +04:00
Gouvernathor 4ccdca6449 doc: clarity, internal linkings and tweaks (#3530) 2022-05-18 23:44:36 +02:00
Andy_kl e7b8433707 Update russian translation 2022-05-18 23:26:38 +04:00
Gouvernathor ab96ad877c Fix some documented signatures 2022-05-18 21:18:35 +02:00
Gouvernathor 04c6ab0950 Update sphinx/source/changelog.rst
Co-authored-by: Mal Graty <mal.graty@googlemail.com>
2022-05-18 13:23:15 +02:00
Gouvernathor 03b969772e Remove double Hide() chengelog entry
Co-authored-by: Mal Graty <mal.graty@googlemail.com>
2022-05-18 10:15:51 +02:00
Gouvernathor a08e0d3269 Tweak changelog formulations 2022-05-18 09:46:00 +02:00
Tom Rothamel d0e503db0b doc: Update sponsors. 2022-05-18 01:50:53 -04:00
Tom Rothamel a786e13e18 Check in keywords. 2022-05-18 01:20:38 -04:00
Tom Rothamel 749394e88b Remove obsolete script. 2022-05-18 01:20:38 -04:00
Tom Rothamel 805f378eef Merge pull request #3522 from zedraxlo/patch-1
Correct the TChinese language name
2022-05-18 01:16:11 -04:00
zedraxlo 5fbe0db744 Correct the TChinese language name 2022-05-18 13:15:18 +08:00
Tom Rothamel 715cda936b Make it easier to cancel mistaken project creation.
(Allow cancelling when telling the creator about the language a
project will be created in.)
2022-05-18 00:38:29 -04:00
Tom Rothamel 022740b19f doc: More changelog writing. 2022-05-18 00:25:50 -04:00
Tom Rothamel 8726334b62 doc: Changelog from renpy-build and renpyweb. 2022-05-18 00:16:14 -04:00
Tom Rothamel 388568b7e4 doc: Changelog renpy. 2022-05-18 00:01:02 -04:00
Tom Rothamel f519cf3f84 doc: More changelog. 2022-05-17 23:00:06 -04:00
Tom Rothamel 7d2dc0099a doc: Changelog Python 3 and Python 2. 2022-05-17 22:00:47 -04:00
Tom Rothamel 57cd89ce3a Update iglatin pay translation. 2022-05-17 20:50:44 -04:00
Tom Rothamel 349303dfb9 Fixes to translating languages names in preferences.
* RTL needs to be enabled all the time to keep Arabic working.
* Sort the languages by their unicode names, to make it easier to scan.
2022-05-17 20:41:43 -04:00
Tom Rothamel 1fc58b7d5b Merge pull request #3518 from renpy/launcher-translate-language-names
Translate language names in their specific languages in the launcher
2022-05-17 20:23:38 -04:00
Gouvernathor bb5758b37e Remove double translations 2022-05-18 00:46:17 +02:00
Gouvernathor 31bb065ec5 Update french 2022-05-18 00:45:38 +02:00
Gouvernathor fd91f39a42 Update arabic 2022-05-18 00:45:02 +02:00
Gouvernathor c781e582b9 Update finnish 2022-05-18 00:44:39 +02:00
Gouvernathor 915874bb51 Update german 2022-05-18 00:44:18 +02:00
Gouvernathor f2469475f9 Update greek 2022-05-18 00:43:41 +02:00
Gouvernathor 9ffd7b3fee Update indonesian 2022-05-18 00:43:14 +02:00
Gouvernathor 7d294cc4c0 Update italian 2022-05-18 00:42:54 +02:00
Gouvernathor c927f0d560 Update japanese 2022-05-18 00:42:34 +02:00
Gouvernathor 2cd02f376b Update korean 2022-05-18 00:42:06 +02:00
Gouvernathor e325245baa Update malay 2022-05-18 00:41:48 +02:00
Gouvernathor eba4aca70d Pdateuday piglatin 2022-05-18 00:40:53 +02:00
Gouvernathor 85eafb834a Update polish 2022-05-18 00:40:13 +02:00
Gouvernathor 6dca34c454 Update portuguese 2022-05-18 00:39:48 +02:00
Gouvernathor c5ba9c73b1 Update russian 2022-05-18 00:39:12 +02:00
Gouvernathor abe8c9c2da Update schinese 2022-05-18 00:38:45 +02:00
Gouvernathor 7e3d2f3663 Update spanish 2022-05-18 00:36:57 +02:00
Gouvernathor 9581195e02 Update tchinese 2022-05-18 00:35:04 +02:00
Gouvernathor 68e8187543 Update turkish 2022-05-18 00:34:30 +02:00
Gouvernathor 7a1c75a3f5 Update vietnamese 2022-05-18 00:33:51 +02:00
Gouvernathor 19b0b4bf40 Hit two birds with one stone
Make the string generate in new translations, and integrate the language name in the string
2022-05-18 00:05:37 +02:00
Gouvernathor f9ceb7d9f2 Change translation's original 2022-05-17 23:56:58 +02:00
Gouvernathor fd1de3308f Translate the interpolated language name 2022-05-17 23:06:24 +02:00
Gouvernathor 186501c15d Add language names translations and fix sorting 2022-05-17 23:05:03 +02:00
Gouvernathor 390d5b6eb4 Update french translation (#3519) 2022-05-17 22:45:00 +02:00
Gouvernathor d999a4f047 Update preferences.rpy 2022-05-17 16:33:16 +02:00
Tom Rothamel 86706fc634 Merge pull request #3516 from Moshibit/master
Update Spanish translation.
2022-05-17 10:05:27 -04:00
Moshibit 5cd941a5d9 Update launcher.rpy 2022-05-17 09:00:44 -05:00
Moshibit eeb1866bc5 Update launcher.rpy 2022-05-17 08:55:08 -05:00
Moshibit faa5bcf7fb Update developer.rpy 2022-05-17 08:51:42 -05:00
Moshibit 18db6acfcb Update common.rpy 2022-05-17 08:48:10 -05:00
Tom Rothamel e5e55cb1a1 Merge pull request #3515 from zedraxlo/master
Ren'Py SChinese Update May 2022
2022-05-17 00:13:47 -04:00
zedraxlo f65c933125 Ren'Py SChinese Update May 2022 2022-05-17 11:47:10 +08:00
Tom Rothamel d55e1dc0b3 Fix import of minstore on py3. 2022-05-16 23:42:39 -04:00
Tom Rothamel 6af570b76c Cause an exception to occur if input or raw_input are called.
Instead of renpy.input. This leads to a fairly weird error where
Ren'Py waits for input from stdin that will never come.
2022-05-16 22:34:16 -04:00
Tom Rothamel c1a2b0062b Error out when trying to update a persistent variable with define.
Only when config.developer is true. Fixes #3455.
2022-05-16 22:13:19 -04:00
Tom Rothamel 927989d487 Increase the zorder of the touch keyboard. 2022-05-16 21:53:43 -04:00
Jacob Kauffmann cc293a3e70 tutorial: Correct typos and grammar. 2022-05-16 20:42:22 -04:00
Tom Rothamel 9e55df25f9 Merge pull request #3514 from mal/pause-zero-state-fix
Fix regression in ATL pause 0
2022-05-16 16:37:16 -04:00
Mal Graty bdc68ee041 Don't force a frame when ATL has state
Addresses regression in ATL `pause 0` behaviour that was introduced in
b0dc9df96c.
2022-05-16 21:26:26 +01:00
Gouvernathor 162e2a93bf Typo (probable wrong copypaste of pos) 2022-05-16 16:36:16 +02:00
Gouvernathor e5f60e94ea Typo
Fix corner case (aha)
2022-05-16 10:24:57 +02:00
Tom Rothamel 122e4a6f27 Add the drawable_resolution gl property.
This controls the resolution textures are rendered at, drawable
(if true, the default) or virtual (if false). This mostly exists
to control the artifacts that occur when upscaling a flattend image.

Fixes #3409.
2022-05-16 02:22:12 -04:00
Tom Rothamel 1de4027d7b Fix corner1, corner2, and make respect crop_relative.
Fixes #3508.
2022-05-15 22:57:46 -04:00
Tom Rothamel 0fd7910fe7 Do not apply text_position style properties to default.
This fixes a problem with older games that caused everything to
be out of place. Fixes #3504.
2022-05-14 19:53:01 -04:00
Tom Rothamel c3b1a2bc92 Merge pull request #3505 from loafylemon/master
Fix an incorrect child assignment in transforms.
2022-05-14 14:58:56 -04:00
LoafyLemon bb4fa35d3d Fix an incorrect child assignment in transforms. 2022-05-14 19:50:30 +01:00
Tom Rothamel 271fb455ff Document when renpy.block_rollback should be called after_load.
And that's when after_load changes data in a way that rollback
would revert.

Fixes #3480.
2022-05-14 01:29:23 -04:00
Tom Rothamel c0d7b61852 Do not call _unique from _duplicate.
Fixes #3349.

The _unique method should only be called if a displayable will only be
entering the tree of displayables to be rendered once. That
wasn't the case in certain circumstances, when _unique was
being called from _duplicate, which is usually called when a
displayable is added.

This might trade performance (additional duplications) for
correctness. That's something we can accept for now, and
eventually deal with in the future by optimizing when
displayables are duplicated.
2022-05-14 01:03:25 -04:00
Tom Rothamel 1e6a3372cf Enable the medium and touch variants on Steam Deck.
Fixes #3499.
2022-05-13 22:55:01 -04:00
Tom Rothamel 1ac0c319b8 Break zsync inputs up into 1GB chunks.
The reason for this is that the windows zsync can only handle
2GB-1 files, probably due to a signed int issue. Breaking the
input files up avoids this problem.

Fixes #3496.
2022-05-12 19:21:07 -04:00
Tom Rothamel ca4361e104 Merge pull request #3493 from mal/scoped-recursive-interpolation
Fix scoped nested string interpolation
2022-05-11 20:38:01 -04:00
Mal Graty 7a85e32a7b Fix scoped nested string interpolation
Previously nested interpolations would lose scope due to it not being
pushed down into the recursive call. Unfortunately the fix is slightly
non-trivial.

The string.Formatter class does not naturally expose the provided scope
to the convert_field method which is where we need it for nested
interpolations. In order to get it there we use the expectation
(documented, see ref) that the value provided to convert_field is the
obj returned by get_field which is supplied with the scope.

Additionally we handle nested interpolation via a call to self.vformat,
rather than round tripping through renpy.substitute since we're actively
not translating or changing the scope.
2022-05-12 01:26:36 +01:00
Tom Rothamel 538461bac6 Add tl id to previous change. 2022-05-11 20:04:39 -04:00
Tom Rothamel 89117ef5a3 Merge pull request #3491 from jacobgkau/patch-1
fix (tutorial): Correct typo in dialogue
2022-05-11 20:02:30 -04:00
Jacob Kauffmann 7806181d76 fix (tutorial): Correct typo in dialogue 2022-05-11 18:00:08 -06:00
Tom Rothamel 46180dacb7 Allow say statements in choice menus to take image attributes.
Fixes #3490.
2022-05-11 19:09:27 -04:00
Tom Rothamel 77da7d10e6 Fix typo. 2022-05-11 09:32:56 -04:00
Tom Rothamel d18d44021b Mark displayables created in sl2 as unique.
These displayables qualify, as (with the exception of add and image,
which are handled separately) the displayables aren't going to
have additional references.

By marking the displayables as unique, excess duplication can be
prevented.
2022-05-11 01:07:36 -04:00
Tom Rothamel 449674ab8b Call Text.slow_done from Text.render.
Fixes #3256, probably, hopefully for good this time.

It looks like the cause of the problem might have been the timeout
being cancelled between the end of the slow text and the event
being delivered. By calling slow_text from render, there's no
chance of this happening.
2022-05-11 00:33:57 -04:00
Tom Rothamel 699210d78b Changelog last. 2022-05-10 00:34:07 -04:00
kyouryuukunn 694d6e82a7 Add main mixer and mute settings.
The main mixer adjusts all of the other volume settings.
2022-05-10 00:26:17 -04:00
Tom Rothamel 5b80d7974d Reimplement config.nvl_paged_rollback.
The problem was that when rolling forward, Ren'Py would stay in
rollback for the entire new page.

This fixes the problem by creating a checkpoint after each line
of dialogue, and conditioning roll-forward on having the
checkpoint existing.

Fixes #3249.
2022-05-09 23:40:54 -04:00
Tom Rothamel c94d1d527b pyright: Fix warnings. 2022-05-09 23:34:18 -04:00
Tom Rothamel 1fb9dc57e5 Merge pull request #3487 from raspberry-soft/raspberry-soft-flac-support-1
Add FLAC support  to _scan_audio_directory()
2022-05-09 22:10:27 -04:00
raspberry-soft 4868e92ee7 Add FLAC support to _scan_audio_directory()
FLAC is supported, this allows flac files to be automatically defined.
2022-05-09 20:28:25 -05:00
Tom Rothamel c74c5e00df Merge pull request #3450 from renpy/doc-ref-image-declaration
Clarify and add internal reference for automatic image definition
2022-05-09 10:13:14 -04:00
Tom Rothamel 9f6ffb391e Merge pull request #3473 from renpy/if_changed-doc
Document if_changed for the play statement
2022-05-09 10:12:51 -04:00
Tom Rothamel 502f5890a4 Merge pull request #3453 from renpy/protect-percent
Add % to protectable characters
2022-05-09 10:12:35 -04:00
Gouvernathor 63b6b3b1c8 finish sentence 2022-05-09 11:46:15 +02:00
Gouvernathor 5bb05b2a6e Typos and rephrasing 2022-05-09 11:41:38 +02:00
Tom Rothamel 442ea02115 Add all position properties to gui.text_offset().
This makes it possible to position the text inside a button with
just gui variables, fuxes #3465.
2022-05-09 01:22:33 -04:00
Tom Rothamel 2a88a7c6c5 Document the new displayables. 2022-05-09 00:52:05 -04:00
Tom Rothamel ba0c8a8f20 Document nearrect-based tooltips. 2022-05-09 00:24:40 -04:00
Tom Rothamel 6698a25ac3 Document focus actions. 2022-05-08 23:42:03 -04:00
Tom Rothamel 313e6d02c5 Document dismiss. 2022-05-08 23:06:26 -04:00
Tom Rothamel b57db196b9 Document the nearrect layout.
The documentation shows how to use it as a drop-down menu.

Fixes #3235.
2022-05-08 22:01:20 -04:00
Tom Rothamel 0748ecc03e Various fixes to focus capture. 2022-05-08 13:22:46 -04:00
Tom Rothamel b31ac22c10 Fix weird autocomplete. 2022-05-08 13:11:29 -04:00
Tom Rothamel 68516af15d Add the ClearFocus action.
This clears the data stored by CaptureFocus.
2022-05-08 12:58:42 -04:00
Tom Rothamel 4ea1985d85 Make the dismiss SL statement require an action. 2022-05-08 12:53:52 -04:00
Tom Rothamel 087c9e60d4 Enable stdout capturing on config.console or config.developer. 2022-05-08 12:53:08 -04:00
Gouvernathor 8b8f9a8759 Typo and clarify
Not that an false key or false timer makes any sense, but you never know.
2022-05-08 12:31:14 +02:00
Tom Rothamel b8b3b4fba6 Minor changes to last commit. 2022-05-08 01:03:36 -04:00
Tom Rothamel bbf072cde7 Checkpoint when a random number is generated.
This ensures that a rollback point will be created at the next
statement, preventing random number generaton from being
reverted when a save is loaded.

Fixes #3479.
2022-05-08 01:01:45 -04:00
Tom Rothamel f24b7adfdc Merge pull request #3484 from kyouryuukunn/adjustable_in_mute
add config.show_volume_in_mute
2022-05-08 00:52:28 -04:00
Tom Rothamel e3e940186d doc: Update changelog. 2022-05-07 23:43:09 -04:00
Tom Rothamel 7a96037660 Make hbox and vbox skip key and timer.
These are both displayables that never can take up any space,
so it makes senses for boxes to skip them.

Fixes #3482.
2022-05-07 23:26:05 -04:00
Tom Rothamel f109e104fa Actually commit improved modal window/frame behavior. 2022-05-07 23:20:13 -04:00
Tom Rothamel 3efef987a5 Add the Focus.inside method.
Which checks to see if the focus is fully inside a rectangle.
2022-05-07 22:56:40 -04:00
Tom Rothamel 6c89f3cf8c Improve the behavior of modal windows.
The new behavior of a modal window is to block mouse events that
happen within the window, and prevent focus from being given
to displayables behind the modal window.
2022-05-07 21:59:43 -04:00
Tom Rothamel 25b88d6ea9 Fix encoding. 2022-05-07 15:42:17 -04:00
Tom Rothamel fad6bfaa3a Revert "Modal windows/frames shouldn't set Render.modal."
This was wrong, .modal isn't full screen, it's limited to the
render it's on. (Or should be.)
2022-05-07 02:08:22 -04:00
Tom Rothamel 06050949c0 Add the dismiss displayable.
This runs an action when the player clicks, hits space, or hits
enter when nothing else is focused. It's similar to the say behavior,
but meant to be put in the background of popup windows and menus.

Fixes #3472.
2022-05-07 02:00:03 -04:00
Tom Rothamel fa15f1212d Modal windows/frames shouldn't set Render.modal.
Render.modal is meant to optimize the case where things are globally
modal - nothing below the displayable is considered by the focus
system.

Window's modal property is meant to prevent displayables behind the
window from getting focus, while still allowing things behind the
window to get focus.
2022-05-07 01:46:56 -04:00
Tom Rothamel b885c77568 Dump the prepared AST. 2022-05-06 23:26:03 -04:00
Tom Rothamel 21645e3713 Include transcluded blocks when determining used screens.
Fixes #3474, which was caused by screens being sorted in the
wrong order, and hence prepared in the wrong order.
2022-05-06 22:00:44 -04:00
kyouryuukunn 82c427deb8 change config.show_volume_in_mute to config.preserve_volume_when_muted 2022-05-07 08:52:47 +09:00
kyouryuukunn e7772b52b8 add config.show_volume_in_mute 2022-05-06 19:39:36 +09:00
Tom Rothamel 3bb9578403 Merge pull request #3444 from renpy/expand-attributes-operator-doc
Expand doc on @ and minus for image attributes
2022-05-05 22:42:52 -04:00
Tom Rothamel fd6a5bbb7f Allow grids to be underfull when config.developer is False.
Fixes #3475.
2022-05-04 23:15:06 -04:00
Tom Rothamel 97c2258ba5 Let nearrect take the name of a captured focus.
Rather than an explicit rectangle.
2022-05-04 01:55:10 -04:00
Tom Rothamel 61018e84ae Add focus storage actions.
This is a new api that allows the coordinates of the currently
focused displayable to be captured, and then retrieved later.
2022-05-04 01:08:36 -04:00
Tom Rothamel 8b7d0a686b Add python-side focus storage functions.
This is a new api that allows the coordinates of the currently
focused displayable to be captured, and then retrieved later.
2022-05-04 00:30:15 -04:00
Tom Rothamel c7473dca49 sl2: Expose nearrect. 2022-05-03 23:40:13 -04:00
Gouvernathor 4eb975917d Document if_changed for the play statement 2022-05-03 12:44:14 +02:00
Tom Rothamel 513a25199b Add NearRect, a new layout.
This is intended to be used as part of a tooltip or dropdown
system, which requires something to be displayed near a
focus rectangle on the screen.
2022-05-03 02:05:25 -04:00
Tom Rothamel 0a7baaf1de Merge pull request #3466 from Andykl/public-OpenDirectory
Make OpenDirectory public and compat it in launcher
2022-05-02 20:27:53 -04:00
Tom Rothamel 41395fa1b8 Persist bundle_properties when cleaning Android.
Fixes #3109. Mostly based on a submission by wbrambley in that
issue.

Co-authored-by: wbrambley
2022-05-02 20:19:07 -04:00
Tom Rothamel c4405eb709 Document structural similarity wrt matrixcolor and matrixtranform.
This is the property that allows ColorMatrix and TransformMatrix
instances to be interpolated between each other.

Fixes #3470.
2022-05-02 19:23:35 -04:00
Tom Rothamel 1fb8596b15 Document screen functions.
* renpy.current_screen() is now documented.
* Some fields returned by renpy.current_screen() or renpy.get_screen()
  are now documented.

This is designed to make an implementation of #3235 in an action
possible.
2022-05-02 02:06:44 -04:00
Tom Rothamel c7b82f1707 Add missing bits of last commit. 2022-05-02 01:55:55 -04:00
Tom Rothamel 77eb0f8073 Custom skin improvements.
* Check it in to git.
* Rename theme to skin.
* Ensure there are default for missing variables.
* Fix typo in variable name.
2022-05-02 00:55:09 -04:00
Tom Rothamel f58d341b26 Merge pull request #3469 from mal/avoid-partial-init
Remove __init__ from new Partial class
2022-05-02 00:46:03 -04:00
Mal Graty 93b1b07112 Remove __init__ from new Partial class
The underlying functools.partial doesn't have an __init__ method, so the
super call bounces up to object which doesn't take arguments. This is
fine in normal use but presented issues in some pickling scenarios.

Since we can be slightly more efficient without it, and it avoids the
edge cases with pickle, nuke it.
2022-05-02 05:10:36 +01:00
Tom Rothamel 18915ad2cb Merge pull request #3246 from Gouvernathor/masala
Subclass functools.partial for better performance
2022-05-02 00:09:24 -04:00
Tom Rothamel 08f4bfff87 Fix tyop.
Fixes #3468.
2022-05-01 23:44:53 -04:00
Tom Rothamel 9fb37b2b1b Collect stdin/stdout whenever the console is enabled.
Fixes a problem where the console would not display print() output
when it was enabled but config.developer was False.
2022-05-01 15:12:23 -04:00
Andy_kl 72adbe7742 Make OpenDirectory public and compat it in launcher 2022-05-01 09:49:04 +04:00
Tom Rothamel 69e6ffd09d Improve android clean.
* If local.properties or bundle.properties exist, preserve those.
  This means that it's no longer required to run Install SDK
  after a clean.

* Allow android clean to run if .android.json doesn't exist.

Per #3019.
2022-04-30 23:46:27 -04:00
Tom Rothamel ef5cc2dd3a Instead of "About", display the Ren'Py version.
This should help people managing multiple versions.

Also, remove the link to the now-obsolete Ren'Py games list.
2022-04-30 17:29:59 -04:00
Tom Rothamel 25910588b5 Add a button to safely clean out tmp if wanted.
This could easily be done by hand, but theres no reason it
shouldn't also be in the launcher.
2022-04-30 17:28:36 -04:00
Tom Rothamel 5cf7ce3db4 installer: Clean out the installer temporary directory.
This eventually removes the backups of copies of vscode that would
otherwise clutter things up.
2022-04-30 00:30:15 -04:00
Tom Rothamel 6b59fcc466 Default the daily update check to on.
It's a good feature, and the notification highlight is fairly
subtle, so it makes sense to enable this by default.
2022-04-29 23:43:28 -04:00
Tom Rothamel f2a79ec958 Add a Clean command for Android.
This deletes temporary files in the rapt/ folder, and inside
tmp.

Fixes #3109.
2022-04-29 23:26:00 -04:00
Tom Rothamel 863d329ddf Change the default for config.narrator_menu to True.
It's been set this way in screens.rpy since the new gui came out,
meaning very few games in development should use the old value.
It makes sense to change the default and remove some boilerplate
from games.

Fixes #3461.
2022-04-29 20:17:56 -04:00
Gouvernathor 60d6b5d000 Raise shadowing errors related to substores and the default statement (#3172)
When reading default a.b.c = value, renpy will check for :

* a.b.c being a store
* a.b.c being already defaulted (case already covered)

Co-authored-by: Mal Graty <mal.graty@googlemail.com>
2022-04-29 01:01:35 -04:00
Tom Rothamel c94400da56 Add config.choice_empty_window.
This lets the empty window shown as part of a choice be
customized. The main use would be to set this to extend to
repeat the last line of dialogue.

Fixes #2606.
2022-04-29 00:55:31 -04:00
Tom Rothamel 61910c44c5 Set _last_raw_what to "" after a say statement.
This allows extend("") to be used as a function outside of a say
statement to reshow dialogue.
2022-04-29 00:48:34 -04:00
Tom Rothamel a43dc371e5 Document the change in behavior of imagemap children.
Fixes #3040.
2022-04-29 00:10:11 -04:00
Tom Rothamel f97ba2f637 Force transitions to be None when skipping.
It's a partial fix, but it makes the behavior seen in #3456 less
apparent.
2022-04-27 23:13:29 -04:00
Gouvernathor 3ea3eafd26 fix typo 2022-04-27 14:54:08 +02:00
Tom Rothamel 614809e1bf Support subpixel tiling.
This required a move to blit + clipping, and subsurface is confined
to pixel boundaries.

Fixes #3174.
2022-04-27 00:32:21 -04:00
Tom Rothamel 73207b0ceb web: Implement relative_audio.
This ports the previous commit to the web platform, so it works
everywhere.
2022-04-26 23:26:47 -04:00
Tom Rothamel 649b8469ac Rewrite how relative_volume works internally.
This goes back to the original idea of it, which was to provide a
way of normalizing track volumes. This change makes it so that the
relative volume selected sticks with the track.

This means that, now, if you queue a track with a given relative
volume, that only takes effect when the track is played. Other
changes make relative volume  work better with rollback, and
loads.

Fixes #2654.
2022-04-26 22:50:43 -04:00
Gouvernathor 4adda44fef Add % to protectable characters 2022-04-26 19:40:05 +02:00
Gouvernathor 46f516246c rephrase 2022-04-26 15:05:59 +02:00
Gouvernathor df628ea0f5 typo 2022-04-26 10:38:56 +02:00
Tom Rothamel cd35c08f7c Merge pull request #3447 from renpy/expand-save-json
Expand documentation about the save json data
2022-04-26 01:03:21 -04:00
Tom Rothamel 708e3ecdf0 Make 'Force Recompile' available in all build processes.
Fixes #2582.
2022-04-26 00:57:01 -04:00
Tom Rothamel 6168489e6d Warn the user when using define rather than default with a persistent var.
Fixes #3354.
2022-04-26 00:51:25 -04:00
Tom Rothamel 261cb3cebd Stop the voice and sound channels on entering the main menu.
Fixes #3383.
2022-04-25 23:41:07 -04:00
Tom Rothamel b5dd65820d Duplicate the child of imagebutton, when changed.
This is similar to the cycle removal that's taking place elsewhere
in Ren'Py, and prevents the state passing that happens in a button
from updating the child when the state changes.

Fixes #3181.
2022-04-25 22:48:57 -04:00
Tom Rothamel f3426b07a4 Crop actually takes positions. 2022-04-25 21:19:58 -04:00
Gouvernathor b3e2dfca14 Fix typo, and fix bad rst 2022-04-26 01:29:18 +02:00
Gouvernathor 9397c5b87e Changelog #3431 and #3448 2022-04-26 01:28:08 +02:00
Gouvernathor 69f33598bc Clarify and ref automatic image definition 2022-04-25 21:06:19 +02:00
Tom Rothamel 87d257c26a Merge pull request #3448 from mal/minimised-audio-tweaks
Make disabling sound on minimise opt-in
2022-04-25 10:38:20 -04:00
Mal Graty 4a7a732e92 Make disabling sound on minimise opt-in 2022-04-25 08:28:28 +01:00
Tom Rothamel a9552ce42d Merge pull request #3431 from jsakaa/master
Pause audio when window is minimized
2022-04-24 23:52:08 -04:00
Tom Rothamel 0676dd1583 Do not fade out audio channges that are paused.
Fixes #3166.
2022-04-24 23:47:51 -04:00
Tom Rothamel 9fd3cce197 Start timers when first rendered.
This deals with the case where the timer's events are blocked -
the timer should still be running in that case, and then trigger
once the events are unblocked.

Fixes #3446.
2022-04-24 22:14:28 -04:00
Tom Rothamel 3d62777525 Schedule a timeout when a transforms event's becomes True.
This is designed to handle the case where a transform is blocking
events and then stops. There many have been timeout events ignored
by this, and so this will redeliver them.
2022-04-24 22:14:28 -04:00
Tom Rothamel 813d181553 Avoid sending events to the half of a swing that's disappearing. 2022-04-24 22:14:28 -04:00
Gouvernathor 32af47f8d9 Add reference alongside save_name 2022-04-24 22:19:10 +02:00
Gouvernathor e68a925401 typo 2022-04-24 22:15:12 +02:00
Gouvernathor e9ebf4e934 Rephrase a bit 2022-04-24 22:14:21 +02:00
Gouvernathor 54f92689a5 Add information about slot_json's return value 2022-04-24 22:04:34 +02:00
Gouvernathor 9838755e6c Add example of practical use 2022-04-24 21:54:52 +02:00
Gouvernathor d242babb20 Minor fixes and update to drag_drop doc 2022-04-23 16:45:25 +02:00
Tom Rothamel 9814d78e94 Fix tests when picking the type of narrator used to show the empty window.
Fixes #3188.
2022-04-22 23:08:21 -04:00
Tom Rothamel 6bf33eadbc Tweak the fix_rollback disclaimer. 2022-04-22 23:00:49 -04:00
Tom Rothamel 140d196b1e Ensure that renpy.fix_rollback happens in the correct place.
It was generally happening a statement after the fixed rollback
happened.

Fixes #3183.
2022-04-22 22:49:59 -04:00
Gouvernathor 7ab53ff921 Fix and harmonize rst 2022-04-23 02:31:30 +02:00
Gouvernathor 568871672f Document use of the minus sign in show statement 2022-04-23 02:15:52 +02:00
Gouvernathor 4a18409df0 Expand on @ and minus 2022-04-23 02:02:38 +02:00
Tom Rothamel 84ea485bc3 Improve image and file transition docs a bit.
Fixes #2371.
2022-04-22 00:49:31 -04:00
Tom Rothamel ff49e962dc Finish fit documentation. 2022-04-21 23:48:14 -04:00
Gouvernathor c6dc16f920 remove print 2022-04-22 05:24:52 +02:00
Tom Rothamel 8ecd43904e Use nosave when purging rollback
Fixes #3161, by not bothering to walk through the screen and
all its details before saving. This should also work for rollback,
as nosave is for internals, that fundamentally should not pass
reachability.
2022-04-21 23:11:23 -04:00
Tom Rothamel ba6d4eeea1 Edits to last merge.
My own take at #3397.
2022-04-21 23:08:00 -04:00
Tom Rothamel f8cf96279a Merge pull request #3397 from renpy/document-2462
Document #2462
2022-04-21 22:47:47 -04:00
Tom Rothamel 1ec2108354 Rework how default focus and modal interact.
Previously, modal would remove displayables from the focus
list entirely, which prevented unfocus from being called. Now,
it sets a flag that only considers the displayables for unfocus.

Fixes #2743.
2022-04-21 21:34:49 -04:00
Tom Rothamel 25dfd92c9d Merge pull request #3386 from geomat0101/fix-docstring
invalid characters in docstring
2022-04-21 18:20:04 -04:00
Tom Rothamel f2a76c41c7 pyright: Add type hint. 2022-04-21 17:15:39 -04:00
Tom Rothamel 926b571c2c Merge pull request #3440 from mal/restore-positional-parameter-info
Restore positional parameter info
2022-04-21 17:14:19 -04:00
Mal Graty b8430e585c Fix parameters type 2022-04-21 17:10:35 +01:00
Mal Graty afd4f31b8f Restore positional parameter info 2022-04-21 17:05:10 +01:00
Tom Rothamel 4f7aaafa87 Merge pull request #3438 from jsfehler/cds_docs
Rewrite docs for Creator-Defined Statements
2022-04-21 00:29:49 -04:00
Joshua Fehler 770c6ecffb Rewrite docs for Creator-Defined Statements 2022-04-21 00:22:54 -04:00
Tom Rothamel 193d2605ea Allow store variables to help select side image tags.
_side_image_tag overrides config.side_image_tag
_side_image_prefix_tag overrides config.side_image_prefix_tag

Fixes #3434.
2022-04-21 00:19:30 -04:00
Tom Rothamel e589282035 Remove now-obsolete documentation. 2022-04-21 00:12:10 -04:00
Tom Rothamel 012cb3b94c Allow renpy.set_tag_attributes to clear a tag's attributes. 2022-04-21 00:06:41 -04:00
Tom Rothamel ae535bbe9e Allow focus_mask to be called with four arguments.
In a roundabout way, by allowing the callable to return itself
(or another callable), and then be called again with (x, y, w, h)
as the arguments.

Fixes #3343.
2022-04-20 22:23:53 -04:00
Tom Rothamel 6239d66799 Fix test. 2022-04-20 22:10:47 -04:00
Tom Rothamel 42fdc5701f Remove a dependency. 2022-04-20 22:09:00 -04:00
Tom Rothamel 2d4e3f5788 Merge pull request #3387 from geomat0101/sphinx-directory-traversal
Sphinx-directory-traversal
2022-04-20 22:08:03 -04:00
Tom Rothamel 11926b7f82 Merge pull request #3389 from geomat0101/testcases
00keymap, Testcases project enhancements
2022-04-20 22:07:14 -04:00
Tom Rothamel a5eb4cb9e6 doc: Changelog. 2022-04-20 22:04:52 -04:00
Tom Rothamel 4364d1ac56 Merge pull request #3422 from Andykl/better-method-wraps
Save more fields for more mutator functions
2022-04-20 21:55:15 -04:00
Tom Rothamel 123d406323 Merge pull request #3428 from mal/atl-pause-zero-redux
Revisit the original intention of ATL first frame
2022-04-20 21:54:22 -04:00
Tom Rothamel e178f7c0ba Rewrite #3433. 2022-04-20 21:53:29 -04:00
Tom Rothamel 4e7031a797 Merge pull request #3433 from renpy/document-not-offer
Document how the fixed properties work
2022-04-20 21:49:38 -04:00
Tom Rothamel 3cb7f482b6 Let a keybinding select if it captures the key.
Per #3435.
2022-04-20 21:48:01 -04:00
Tom Rothamel e021384442 Fix wrong use of variable.
Fixes #3437.
2022-04-20 21:30:37 -04:00
Tom Rothamel 7b1e178c34 Store reached objects while reachability runs.
This prevents object ids from being reused, which could be a problem
if an object is created and destroyed during reachability analysis.

Per #3436.
2022-04-20 21:26:46 -04:00
Tom Rothamel c421b45a06 Only iterate objects with a defined length when checking reachability.
Objects with infinite length that are still iterable have to store their
real data somewhere else, so there is no need to iterate them to
find it.

Per #3436.
2022-04-20 20:58:50 -04:00
Tom Rothamel 34bc26abd5 py2: Starred only makes sense in py3.
And starred with causes problems.
2022-04-20 20:45:04 -04:00
Gouvernathor 817df572b0 typo 2022-04-20 22:19:01 +02:00
Tom Rothamel 937581bb38 py3: Wrap extended unpacking in for or with statements. 2022-04-20 02:29:55 -04:00
Tom Rothamel 1a2ab80401 py3: Wrap extended iterable unpacking in a RevertableList. (Assignment)
This allows the lists created via PEP 3132 to be rolled back,
when in an assignment.
2022-04-20 01:28:31 -04:00
Gouvernathor cfe1710ec2 Rephrase 2022-04-20 06:03:58 +02:00
Gouvernathor 437044ded6 fixes 2022-04-20 05:54:53 +02:00
Gouvernathor c4f3990131 Update style_properties.rst 2022-04-20 05:52:35 +02:00
Gouvernathor fc071d3867 typo 2022-04-20 05:43:09 +02:00
Tom Rothamel d296777981 doc: Give one more example. 2022-04-19 20:49:25 -04:00
Tom Rothamel 3db6e46432 doc: Finish sentence.
So Gouvernathor can breathe again.

Also expound on what double-starred paramters do.
2022-04-19 20:37:36 -04:00
Tom Rothamel 151a782f60 Document what data is rolled back. 2022-04-19 20:33:11 -04:00
Gouvernathor 0eb31cc5a9 typo 2022-04-20 01:53:45 +02:00
jsaka b5f55c0fdd Added some logical controls and documentation. 2022-04-19 02:07:24 -04:00
Tom Rothamel 3737e7e598 Remove sphinx/developer documentation.
It was unmaintained and gettng progressively more and more out
of date.
2022-04-19 01:19:57 -04:00
Tom Rothamel 82828454f3 pyright: Fix warnings about unused expressions.
Most of these were the now-obsolete practice of using an expression
to prevent unused import warnings. Since unused imports are a lot
more subtle in vs code, there's no need to have an expression
prevent them - especially if the expression causes problems.
2022-04-19 01:14:49 -04:00
Tom Rothamel a8fc6bd42d Allow relative_imports.py to be run from anywhere. 2022-04-19 01:10:56 -04:00
Tom Rothamel 21bf1d5b10 Update screenlang.py to take into account arguments changes.
This will be going away in the next major release, but for now,
updating it is the easy way to stop getting type errors.
2022-04-19 00:37:47 -04:00
jsaka 28059b1170 Attempt at implementing functionality in core.interact_core 2022-04-19 00:29:23 -04:00
Tom Rothamel ffc753fba4 pyi: Fix some problems discovered by pylance. 2022-04-18 23:54:13 -04:00
Tom Rothamel aa473e5682 Merge pull request #3414 from renpy/remove-revertable-frozenset
Remove frozenset from the revertableset methods
2022-04-18 23:22:06 -04:00
Tom Rothamel be721da5c9 Merge pull request #3421 from renpy/crop-relative-changes
Revert crop_relative to boolean values and add a deprecated tprops section
2022-04-18 23:19:26 -04:00
Gouvernathor cafe45fc6b typo 2022-04-19 05:11:43 +02:00
Tom Rothamel 82992fd41d Changelog last. 2022-04-18 23:06:17 -04:00
Tom Rothamel 01a16b018f Merge pull request #3427 from kyouryuukunn/language_anywhere
add Language style property "anywhere" which allow linebreaking at anywhere
2022-04-18 23:04:30 -04:00
Tom Rothamel 481f20a0dc Changelog last. 2022-04-18 22:59:54 -04:00
Tom Rothamel 7143df78e4 Merge pull request #3424 from renpy/fix-2071
Compat offer_screen and integrate it in layeredimage
2022-04-18 22:51:56 -04:00
Tom Rothamel c23735efd0 Merge branch 'master' into fix-2071 2022-04-18 22:50:53 -04:00
Tom Rothamel 18b324e56c Disable roll forward for call screen.
The main justification for this is that roll forward only preserves
the return value of the screen, or a jump out of it, and doesn't
preserve any other side effects in the screen. This can lead to the
game being in a different state between playthoughs.

A new roll_forward property allows it to be re-enabled for particular
screens.

Alternatives considered were:

* Trying to determine which actions should allow a screen to
  roll forward. This was implemented, but was rejected as a maintenance
  problem, and hard to make understandable in the documentation.

* The reverse of rollback was considered, but it seems hard to make
  work. What should be done if the player changes sone data inside
  the call screen, then rolls forward, causing a different set of
  data to be updated?

Fixes #2563.
2022-04-18 22:37:01 -04:00
jsaka 15da86357f Added preference as toggle. 2022-04-18 20:42:58 -04:00
Mal Graty b0dc9df96c Revisit the original intention of ATL first frame 2022-04-18 18:03:37 +01:00
kyouryuukunn 60b6616107 fix anywhere 2022-04-19 01:01:05 +09:00
kyouryuukunn c8ede1e767 add language anywhere doc 2022-04-19 00:54:52 +09:00
kyouryuukunn 3d29a32cc7 add language anywhere 2022-04-19 00:53:05 +09:00
Gouvernathor bfaf59ef2e Fix and expand docstring 2022-04-18 16:05:10 +02:00
Gouvernathor 994a69f193 Add the config variable 2022-04-18 16:02:36 +02:00
Gouvernathor c099a9f462 Document offer_screen in layeredimage language 2022-04-18 15:58:51 +02:00
Tom Rothamel b065d4bf7f Fix some warnings. 2022-04-18 00:33:09 -04:00
Gouvernathor cd68b80322 Add the argument doc 2022-04-18 06:11:55 +02:00
Gouvernathor 4b5abae20d Add layeredimage_offer_screen to incompat 2022-04-18 05:57:59 +02:00
Gouvernathor 948491c29a Readd the config var in config 2022-04-18 05:42:03 +02:00
Gouvernathor 3f74017743 Compat the change 2022-04-18 05:41:25 +02:00
Gouvernathor 9deeae0154 Add the offer_screen property for LayeredImage 2022-04-18 05:40:45 +02:00
Tom Rothamel c98ab1a06d Add a way for a displayable to change the area it's offered.
This is the start of #2071, but needs to be selectable on a
per-layeredimage basis, compat-ed, documented, etc.
2022-04-17 23:12:16 -04:00
uyjulian 2fa378ca42 loader: use RWops object from pygame_sdl2 2022-04-17 19:15:05 -05:00
Tom Rothamel 7a129cc279 Remove Ren'Py 7 web disclaimer; Reword the Ren'Py 8 one. 2022-04-17 02:55:41 -04:00
Tom Rothamel 1913275f1f Check the browser for supported audio mime types.
If the browser supports all types, play back audio through webaudio.
If not, play audio back through wasm/ffmpeg/ffmedia. This is intended
to allow games that use ogg or opus to work on Safari by default, while
games that only use mp3 audio can change config.webaudio_required_types
to gain the benefits of webaudio.
2022-04-17 02:51:11 -04:00
Andy_kl 24f3637f10 Save more fields for more mutator functions 2022-04-17 10:37:38 +04:00
Andy_kl 4775b48cce Elaborate comment about object.__slots__ 2022-04-17 10:07:50 +04:00
Gouvernathor 7b52c3556e Fix big time typo and wrong default 2022-04-17 05:05:54 +02:00
Gouvernathor b50636bc99 remove size and maxsize from the main list 2022-04-17 05:02:12 +02:00
Gouvernathor 3d7740b8c6 Add the deprecated section of transform properties 2022-04-17 05:01:22 +02:00
Gouvernathor b506f30b04 Update the crop_relative doc 2022-04-17 04:50:20 +02:00
Gouvernathor 56f5bbe4ab Update incompatible changes to crop_relative 2022-04-17 04:46:25 +02:00
Gouvernathor bff825b9ad Revert crop_relative to boolean values (2/2) 2022-04-17 04:44:30 +02:00
Gouvernathor e7dc6cc4fe Revert crop_relative to boolean values (1/2) 2022-04-17 04:43:23 +02:00
Tom Rothamel 3cf22730a6 Fix webaudio in firefox.
This is base on neobendict's solution in #3334, just encapsulated
into function. The problem is that setValueAtTime is the only way
to reliably set AudioParams in firefox, so all setting was moved
to run through that method.

Fixes #3334.
2022-04-16 22:38:05 -04:00
Tom Rothamel faf6844954 Fix spelling, tweak wording. 2022-04-16 15:56:32 -04:00
Tom Rothamel 2246d49839 Merge pull request #3420 from Andykl/forbid-slots
Forbid to use `__slots__` in RevertableObject subclasses
2022-04-16 14:04:51 -04:00
Tom Rothamel bfde797a37 Remove unnecessary flags when re-launching Ren'Py. 2022-04-16 13:47:53 -04:00
Gouvernathor b8fbddb410 Add warning about slots 2022-04-16 19:05:30 +02:00
Andy_kl e11d5fecee Forbid to use __slots__ in RevertableObject subclasses 2022-04-16 20:58:07 +04:00
Tom Rothamel e3e3ff3bc0 Allow non-interactive characters to auto-voice.
Fixes #2542.
2022-04-16 00:25:22 -04:00
Tom Rothamel 44ce47059b Add last to changelog. 2022-04-16 00:14:25 -04:00
Tom Rothamel 5d320c5d18 Minor cleanups to #3187.
* Move next_who into _default_empty_window.
* Move around the error handling.
2022-04-16 00:05:21 -04:00
Tom Rothamel 30eb6a8c2d Merge pull request #3187 from kyouryuukunn/predict_next_window_is_adv_or_nvl
Predict next window is adv or nvl
2022-04-15 23:41:51 -04:00
Tom Rothamel e42dce7c37 Generate proper translation strings for old substitutions.
That is, remove the duplicate % when generating the strings.

Fixes #3417.
2022-04-15 23:23:53 -04:00
Tom Rothamel 0d6e9215fe Pass MoveTransition timing to the layers.
This fixes #3165, which was caused by the Fixed containing a layer
adjusting the times given to everything in that layer. When what
was in the layer was a MoveInterpolate, this led to the movement
restarting each time a new transition was created when an
interaction restarts.
2022-04-15 01:05:10 -04:00
Tom Rothamel c249f82571 Allow multibox to adjust the times for some, but not all, of its children.
This is intended for #3165.
2022-04-15 00:53:33 -04:00
Gouvernathor 8f8b57bd3e Remove frozenset from the revertableset methods 2022-04-14 15:24:54 +02:00
Tom Rothamel b7943a383c Give renpy.pause the ability to wait for prediction to be finished.
Fixes #3072.
2022-04-13 23:38:10 -04:00
Tom Rothamel 426e367629 Add the infrastruction to wait until image prediction has completed.
Per #3072.
2022-04-13 22:27:57 -04:00
Tom Rothamel 0d57d3d8a8 Merge pull request #3413 from qTich/dublicate-unhovered
SelectedIf and SensitiveIf contain duplicates in iteration.
2022-04-13 19:56:13 -04:00
Tom Rothamel 4dd6545446 Merge pull request #3412 from Booplicate/fix_get_at_list
Fix regression
2022-04-13 19:55:58 -04:00
Tichq 5e75059d97 delete duplicate field; list to tuple. 2022-04-14 00:00:16 +03:00
Totally a booplicate f86a0b7881 fix smol regression
`get_at_list` can return both `None` and `list`
2022-04-13 17:23:31 +03:00
Tom Rothamel f13eb21ab1 Support mipmap in Flatten. 2022-04-13 01:16:14 -04:00
Tom Rothamel 3df81cd81b Return a copy of the at_list.
This makes it robust, even if the game mutates the returned list.

Fixes #3405.
2022-04-13 01:11:17 -04:00
Tom Rothamel 9bd143f8bd Merge pull request #3408 from mal/launcher-file-inclusion
Fix Python bytecode inclusion for SDK
2022-04-12 11:15:27 -04:00
Mal Graty 02f2886136 Fix Python bytecode inclusion for SDK
- Ensures that py2 excludes .pyc (favouring .pyo)
- Ensures that py3 includes .pyc files for the stdlib
2022-04-12 13:00:13 +01:00
Tom Rothamel 9c6eea854f doc: Fix another tyop. 2022-04-12 00:53:22 -04:00
Tom Rothamel 64c705db3f Only include an ATL transform inside an ATL transform if the child is None.
The presence or abscence of a child seems like it's the right way to distinguish
ATL uses as a displayable from ATL that's being included.

Fixes #1956, per #3350.
2022-04-12 00:32:06 -04:00
Tom Rothamel 82dda3af74 Change the newly-document behavior to better match the current behavior. 2022-04-11 23:59:17 -04:00
Tom Rothamel aceb6b3c69 Document semantics changes to ATL discussed in #3350. 2022-04-11 23:42:46 -04:00
Tom Rothamel f466b88bca doc: Fix typos.
Everyone's a critic.
2022-04-11 23:17:22 -04:00
Tom Rothamel a0c5ef35e1 Document dissolve mipmapping.
Fixes #3309.
2022-04-11 23:13:39 -04:00
Tom Rothamel 20422e1b5e Remove line obsoleted by renpy/renpy-build#44. 2022-04-11 21:07:37 -04:00
Tom Rothamel fbaf4db7f6 py3: Include the right __pycache__ and pyc files.
We had been overincluding, becase not every rule was correct.
2022-04-11 20:26:37 -04:00
Tom Rothamel c54b37072f Check that distribute is being run with the right Python version. 2022-04-11 20:26:37 -04:00
Tom Rothamel 02f7017c73 Merge pull request #3406 from mal/build-tweaks
Fix potential typo in build exclusions and fix build.remove
2022-04-11 18:34:40 -04:00
Tom Rothamel cfae3bb270 Merge pull request #3366 from renpy/finalize-3093
Add workaround advice for live2d being missing or disabled
2022-04-11 18:33:58 -04:00
Tom Rothamel f1b42972a4 doc: Update style translations.
Fixes #2696.
2022-04-11 01:45:45 -04:00
Tom Rothamel 2435ff5c4c Remove compile warnings in ffmedia and renpysound. 2022-04-11 01:14:56 -04:00
Tom Rothamel 734069d81c Allow the volume to be adjusted when a fadein/fadeout is in progress.
Fixes #2969.
2022-04-11 01:09:29 -04:00
Tom Rothamel 104828b73a Document ATL Transitions and Special ATL Keyword Parameters. 2022-04-10 23:50:41 -04:00
Tom Rothamel 47053cf66e Fix bad access to config variable. 2022-04-10 22:36:44 -04:00
Tom Rothamel 0ac92866ce Merge pull request #3374 from renpy/crop-relative-changes
Change the crop_relative transform property to take a third value, "area", representing the area supplied to the displayable. This is in addition to the current behavior when true, which has been changed to "child".
2022-04-10 21:05:29 -04:00
Gouvernathor dc3586715b Incompat crop_relative 2022-04-11 02:54:02 +02:00
Tom Rothamel 67bd0a297d Only adjust the keyboard modifiers if the gui key is down.
This reconciles f2be07a13d with a
change introduced in SDL that causes the KEYMAPCHANGED event to
fire when the shift key is pressed.

Fixes #3401.
2022-04-10 18:48:55 -04:00
Mal Graty 49745b352f Fix build.remove 2022-04-10 21:28:59 +01:00
Mal Graty 35d079299f Improve build file list annotations 2022-04-10 21:27:58 +01:00
Mal Graty 30e9d25160 Ignore Cython pxd files, not pyd files 2022-04-10 21:22:42 +01:00
Tom Rothamel fd06027101 Add a shebang, to prevent weird errors when run incorrectly. 2022-04-10 14:33:25 -04:00
Gouvernathor bd5f801c56 fix example 2022-04-10 19:21:06 +02:00
Gouvernathor 4b964b4d5f Merge branch 'renpy:master' into masala 2022-04-10 14:03:09 +02:00
Mal Graty 923709da5e Avoid trying to clear the mappingproxy type (#3404) 2022-04-09 23:12:30 -04:00
Mal Graty 9cdfb14c14 Avoid incomparable None error in classic save menu (#3403) 2022-04-09 23:12:07 -04:00
Tom Rothamel 6efbba1096 Document how prefixed properties work with viewport.
Fixes #1519.
2022-04-09 22:17:48 -04:00
Gouvernathor be0d967169 typo 2022-04-09 16:20:10 +02:00
Gouvernathor 0092484cdd Merge branch 'master' into patch-2 2022-04-09 04:56:47 +02:00
Gouvernathor c4c3f36958 Remove the clip property.
With the new "area" option to crop_relative, this isn't needed.
2022-04-08 22:20:49 -04:00
Tom Rothamel c897f17645 Rename _base_play to _original_play. 2022-04-08 20:59:45 -04:00
Tom Rothamel 76d683637a Merge pull request #3396 from renpy/fix-Movie._play
Fix Movie._play accessing a non-existent file.
2022-04-08 20:58:26 -04:00
Tom Rothamel 2d88a9544c Use two columns for languages.
Now that rollback_side is gone, there's room.
2022-04-08 20:37:14 -04:00
Tom Rothamel 0a745e2aff Remove the Rollback Side preference from the default template.
Closes #3216.
2022-04-08 20:35:53 -04:00
Gouvernathor 9298f0a3f1 Merge branch 'master' into crop-relative-changes 2022-04-08 22:56:52 +02:00
Gouvernathor 1088a5c1a7 document fit's behavior in the absence of xysize 2022-04-08 18:36:51 +02:00
Gouvernathor 89d85670b4 fix property reference 2022-04-08 12:59:58 +02:00
Gouvernathor 7548601609 fix changelog 2022-04-08 12:56:41 +02:00
Tom Rothamel b4fb0d2e7d Extend renpy.retain_after_load to hard checkpoint.
This makes the scope of retain_after_load more useful, so that
it has the same behavior  for one and multiple python statements.

Fixes #2396.
2022-04-08 02:34:03 -04:00
Tom Rothamel b93a2e7a55 Fix compat test. 2022-04-08 01:58:02 -04:00
Tom Rothamel 6794038616 Showif doesn't take up space in hbox/vbox when the condition is False.
Fixes #1045.
2022-04-08 01:49:18 -04:00
Tom Rothamel 60054a6d88 Merge pull request #3305 from mal/small-atl-tweaks
Fast-forward focused ATL tweaks
2022-04-07 22:18:33 -04:00
Gouvernathor 71531075f5 document "room" -> "area" 2022-04-08 02:43:26 +02:00
Gouvernathor 26fcb0017d "room" -> "area" 2022-04-08 02:40:40 +02:00
Gouvernathor dcc1fb0e87 fix typos 2022-04-07 21:57:03 +02:00
Gouvernathor 624e6da5d9 Fix Movie._play being invalid 2022-04-07 21:50:58 +02:00
Andy_kl a7c2f56b41 Fix typo in Script.merge_names
Fixes #3393
2022-04-07 21:09:32 +04:00
Tom Rothamel d3677adb11 Remove matrix accessorss.
Per discussion in #3291.
2022-04-06 21:26:25 -04:00
Gouvernathor 722cc242af Correctly access Null
fix #3392
2022-04-06 14:30:48 +02:00
Tom Rothamel f6bbb3aeb5 Merge pull request #3291 from renpy/Matrix-fix
Fix Matrix's getitem, setitem and repr
2022-04-05 22:04:12 -04:00
Tom Rothamel c466aa444d Merge pull request #3391 from geomat0101/testcases-fonts
Testcases-fonts
2022-04-05 21:20:07 -04:00
Matt George 43dc45bf0d testcases no longer use MTLc3m 2022-04-05 21:17:23 -04:00
Matt George e0ae9a2fe5 switch tests from MTLc3m to SourceHanSansLite 2022-04-05 21:15:30 -04:00
Matt George c513f28f73 wire up the Help button to the docs website 2022-04-05 19:25:15 -04:00
Matt George 21891e0a06 add Done button to return from Gallery test 2022-04-05 19:24:35 -04:00
Matt George 5688718357 support web-based help URLs 2022-04-05 19:24:02 -04:00
Matt George f0277b0d80 Merge branch 'sphinx-directory-traversal' of https://github.com/geomat0101/renpy into sphinx-directory-traversal 2022-04-05 17:55:17 -04:00
Matt George 44905bd21f Revert "invalid characters in docstring"
This reverts commit bab6e1a9f3.
2022-04-05 17:53:15 -04:00
Matt George bf52ef33ab invalid characters in docstring 2022-04-05 17:53:15 -04:00
Matt George ea05231ed8 Revert "invalid characters in docstring"
This reverts commit bab6e1a9f3.
2022-04-05 17:53:15 -04:00
Matt George 4ca7682dc9 drive relative paths for sphinx I/O from top level, clean up some older file access patterns 2022-04-05 17:53:15 -04:00
Matt George 52efa478d9 invalid characters in docstring 2022-04-05 17:53:15 -04:00
Tom Rothamel b943b4966a Merge pull request #3388 from geomat0101/readme-update
readme update
2022-04-05 15:22:52 -04:00
Matt George a04636286a add more dependencies for both system and python, how to verify font install 2022-04-05 15:20:34 -04:00
Matt George fe5b11eebc Revert "invalid characters in docstring"
This reverts commit bab6e1a9f3.
2022-04-05 14:19:46 -04:00
Matt George f18d30a686 drive relative paths for sphinx I/O from top level, clean up some older file access patterns 2022-04-05 13:58:28 -04:00
geomat0101 419d4c1b9c Merge branch 'renpy:master' into fix-docstring 2022-04-05 13:53:36 -04:00
Matt George bab6e1a9f3 invalid characters in docstring 2022-04-05 13:49:09 -04:00
Tom Rothamel d12ca16853 Merge pull request #3303 from mal/lint-default-statements
Execute default statements prior to linting
2022-04-05 01:02:04 -04:00
Tom Rothamel 14df7a4140 Merge pull request #3348 from Andykl/fix-atl-call-duplicate
Duplicate child during ATLTranform `__call__`
2022-04-05 01:01:30 -04:00
Tom Rothamel 384604693f Set ScreenDisplayable.old_transfers to False after a setstate.
An attempt to fix #3379.
2022-04-03 21:11:06 -04:00
Tom Rothamel 56b63203ef Globally disable autosave when config.has_autosave is False.
Fixes #3378, and makes Ren'Py work as documented.
2022-04-03 21:06:13 -04:00
Tom Rothamel 7d0d2782e7 Merge pull request #3377 from renpy/paren-less-screens-doc
More documentation about paren-less screens
2022-04-02 12:12:22 -04:00
Tom Rothamel c4291f1e3f Merge pull request #3173 from Gouvernathor/patch-6
Document define/default store-creating behavior
2022-04-02 12:11:15 -04:00
Gouvernathor 5a712b3c5d Add example of substore creation with default 2022-04-02 15:35:10 +02:00
Tom Rothamel 0288963049 Allow the GUI namespace to have child namespaces.
This happens in "in the wild" games, and so it needs to remain allowed.
2022-04-01 22:40:41 -04:00
Tom Rothamel ea576f02f5 Add missing license. 2022-04-01 22:19:33 -04:00
Tom Rothamel b776c84e1f Prevent distribute from producing uninteresting errors.
When it's called by run.sh when Ren'PY is partially installed.
2022-04-01 21:58:38 -04:00
Gouvernathor a6a2347fce More documentation about paren-less screens 2022-04-01 17:11:53 +02:00
Tom Rothamel 7b217e59f8 Update Android translations. 2022-04-01 00:03:42 -04:00
Tom Rothamel a205ad7b39 Add the ability for rapt to open a directory. 2022-03-31 23:35:44 -04:00
Tom Rothamel a629034684 Play activate_sound when activating drags.
Fixes #2973.
2022-03-31 22:37:02 -04:00
Tom Rothamel 6d739580a5 Remove double subsurface.
Fixes #1907.
2022-03-31 21:26:04 -04:00
Tom Rothamel 5a03f46f2e Move the selection of the game directory into the main file.
Fixes #2689.
2022-03-31 21:17:53 -04:00
Tom Rothamel e95c5a29c6 Import renpy.config before renpy.log.
This satisfies a dependency, and makes debugging during early
init a lot easier.
2022-03-31 21:17:09 -04:00
Tom Rothamel ba1dd186ea Set the drag_group of a drag each time a DragGroup is rendered.
Fixes #1250, which was caused by the drag not being updated.
2022-03-30 22:07:35 -04:00
Tom Rothamel 11a34fdecc Allow bar actions to Return.
Fixes #1788.
2022-03-29 23:37:42 -04:00
Tom Rothamel f2f8cef9c9 Merge pull request #3370 from Andykl/add-empty-parameters
Add empty parameters constant
2022-03-29 22:09:47 -04:00
Tom Rothamel 5aaf215d41 When not in safe mode, init all gamepads at startup.
Fixes #2181.
2022-03-29 01:12:26 -04:00
Tom Rothamel c114249025 Avoid distributing _renpysteam. 2022-03-28 22:17:32 -04:00
Tom Rothamel a0ba72b82d Automatically set config.script_version for Ren'Py 5 games. 2022-03-28 22:09:22 -04:00
Tom Rothamel 16ba68a927 Fix support for RPAv1/rpi archives. 2022-03-28 21:53:58 -04:00
Tom Rothamel d4297f2350 py3: Decode script_version.txt. 2022-03-28 21:32:56 -04:00
Tom Rothamel db46715da4 Give a specific error if a project is not writeable.
Fixes #1332.
2022-03-28 21:26:11 -04:00
Tom Rothamel 9ac37bf231 Merge pull request #3360 from Andykl/old-game-distribute
Add command line and GUI command to backup rpyc files in old-game
2022-03-28 20:34:45 -04:00
Gouvernathor 6ecc368c37 Document changes to crop_relative 2022-03-28 23:36:55 +02:00
Gouvernathor 14d8523cfa Change crop_relative's actual behavior 2022-03-28 23:25:02 +02:00
Gouvernathor 3a6f10f2d8 Default crop_relative to None and change the type 2022-03-28 23:23:12 +02:00
Gouvernathor 0420aa390a Compat crop_relative_default 2022-03-28 23:21:07 +02:00
Gouvernathor da0e13c63e Add the config variable 2022-03-28 23:19:48 +02:00
Gouvernathor 42cd589ebe Document no substore creation in special namespace 2022-03-28 22:53:14 +02:00
Tom Rothamel 30962cab87 Expand label, changelog last. 2022-03-28 01:59:49 -04:00
Tom Rothamel f03715c1fc Merge pull request #3339 from kyouryuukunn/export_dialogue_in_preferences.language
extract dialogue in preferences.language in that game
2022-03-28 01:57:33 -04:00
Tom Rothamel 271393fc83 Set adjust_spacing to False for new games.
Fixes #1992.
2022-03-28 01:53:56 -04:00
Tom Rothamel 00a2db666b Document projects.txt.
Fixes #1773.
2022-03-28 01:35:36 -04:00
Andy_kl 07fc1b289b Add empty parameters 2022-03-28 02:57:59 +04:00
Andy_kl 703d51c2f9 Fixup exception message 2022-03-28 02:36:38 +04:00
Andy_kl e818b5b3f0 Make code for #3369 clearer 2022-03-28 02:23:09 +04:00
Tom Rothamel 98beed252f Merge pull request #3369 from mal/protect-special-stores
Prevent special namespace sub-store creation
2022-03-27 18:02:45 -04:00
Mal Graty 1a2155f576 Prevent special namespace sub-store creation
For now this isn't possible or supported, so there's no need for the
machinery to support it. At such time we have a clean way to implement
it this method can be updated to support it.
2022-03-27 21:41:21 +01:00
Tom Rothamel 4ce6751337 Merge pull request #3368 from LuqueDaniel/fix-2388
Fix code copy button doesn't copy the translated example
2022-03-27 15:26:26 -04:00
Daniel Luque 8ad9c2882f fix code copy button does not copy the translation
Now the translation of the example isn't ignored when copying it.

Fixes #2388
2022-03-27 21:19:07 +02:00
Tom Rothamel 664e3cdc79 Changelog #3362. 2022-03-27 11:16:38 -04:00
Tom Rothamel 7353c52c7c Merge pull request #3362 from Andykl/sl2-add-alt
Allow to set alt text for displayable and add it to SL2 add statement
2022-03-27 11:15:24 -04:00
Gouvernathor c189d8b0bf Fix kwargs 2022-03-27 16:33:49 +02:00
Gouvernathor 6218fc08f4 Add workaround advice 2022-03-27 16:24:41 +02:00
Tom Rothamel 8e1ef49717 Changelog the last two commits. 2022-03-27 01:14:00 -04:00
Tom Rothamel 90d5ee811d Minor cleanups. 2022-03-27 01:09:21 -04:00
Tom Rothamel a9a4f1375c Merge pull request #3194 from via-my/master
Hide current screen
2022-03-27 01:06:14 -04:00
Tom Rothamel d5cafbda4b Merge pull request #3190 from Andykl/lint-fix-common
Distinguish renpy_base correctly even if it is inside gamedir
2022-03-27 01:03:43 -04:00
Tom Rothamel 1e3c74a18c Minor editing. 2022-03-27 00:57:29 -04:00
Tom Rothamel 6f6cd3f037 Merge pull request #3201 from Gouvernathor/patch-10
Move overfull check in the Grid's add method
2022-03-27 00:56:28 -04:00
Tom Rothamel bb7ee50c4f Merge pull request #3203 from Gouvernathor/patch-11
Disallow underfull or overfull vpgrids (unless compat or opt-out)
2022-03-27 00:56:10 -04:00
Tom Rothamel 036bfc43ef Allow the creator to override Placeholder text.
Based on #3160, with some changes to how the overriding works. See
the discussion there.

Closes #3160.

Co-Authored-By: Gouvernathor <aanonyme.personne@hotmail.fr>
2022-03-27 00:52:22 -04:00
Tom Rothamel 18fa0a04c1 Break TFD building into its own Setup, only build on pc/mac. 2022-03-27 00:22:36 -04:00
Tom Rothamel 75ccfc3911 Merge pull request #3364 from loafylemon/master
Update Live2D libraries install directories #3363
2022-03-26 17:55:28 -04:00
LoafyLemon f5aaab6df8 Update Live2D libraries install directories #3363 2022-03-26 21:53:05 +00:00
Tom Rothamel 410e1c36d5 Use tinyfiledialogs for directory picking.
Fixes #3341.
2022-03-26 16:12:29 -04:00
Tom Rothamel 623595107d tfd: Create Python bindings for tinyfiledialogs. 2022-03-26 01:38:41 -04:00
Andy_kl ef6173de4f Allow to set alt text for displayable and add it to SL2 add statement 2022-03-26 08:30:12 +04:00
Tom Rothamel 3628c05a25 Add tinyfiledialogs.
This is a library that's intended to be used to provide os-native
file picking services to the launcher, to replace the various
libraries that are used now.

This is included with Ren'Py because it's not in pypi or in
operating systems, and it's needed for an os-linked build of
Ren'Py to work.
2022-03-25 22:55:45 -04:00
Andy_kl f2cd580ed9 Add command line and GUI command to backup rpyc files in old-game 2022-03-26 06:13:13 +04:00
Tom Rothamel 9d36aac32e define persistent -> default persistent
Taken from a change in #3355.
2022-03-25 17:59:13 -04:00
Tom Rothamel 0d7b83a84d Merge pull request #3177 from Gouvernathor/patch-8
Adress submoduling persistent and special namespaces
2022-03-25 17:57:50 -04:00
Tom Rothamel ebd113f0da Merge pull request #3357 from renpy/document-3354
Better document how persistent works with default
2022-03-25 17:57:08 -04:00
Tom Rothamel cdedb83cd3 atl: Allow interpolation statements to take blocks. 2022-03-24 23:57:48 -04:00
Gouvernathor 9995bc52f6 Merge branch 'master' into patch-11 2022-03-25 01:50:45 +01:00
Gouvernathor c292798dc5 Merge branch 'master' into patch-6 2022-03-25 01:49:39 +01:00
kyouryuukunn 0ce29f807e update extract_language every time extract_dialogue screen 2022-03-25 08:48:53 +09:00
Gouvernathor fee1c9222e Update persistent.rst 2022-03-24 20:28:22 +01:00
Tom Rothamel ef9ca34f88 Save the persistent file whenever the game is saved.
Fixes #3278.
2022-03-24 00:08:03 -04:00
Tom Rothamel 554a11b065 Move Atom.edit.py into the launcher.
This makes RENPY_ATOM work without needing to download any part
of atom, and without needing to include the atom/ directory when
atom is not installed.
2022-03-23 22:56:42 -04:00
Tom Rothamel c261b596a8 Merge pull request #3224 from Gouvernathor/patch-13
Do not download Atom when environ RENPY_ATOM is set
2022-03-23 22:49:48 -04:00
Tom Rothamel 3f84cce59c Edits for #3327. 2022-03-23 21:06:28 -04:00
Tom Rothamel 1283192e97 Merge pull request #3327 from kyouryuukunn/add_doc_movie_with_alpha
add doc about movie with alpha channel
2022-03-23 21:00:45 -04:00
Tom Rothamel dc9934cd13 Merge pull request #3310 from renpy/py3-arguments
Update Ren'Py parameters and arguments parser to match python 3
2022-03-23 21:00:15 -04:00
Tom Rothamel 5129bf4018 Merge pull request #3320 from renpy/stack-command
Add the stack console command
2022-03-23 20:59:39 -04:00
Andy_kl ba485c6a5c Duplicate child during ATLTranform __call__ 2022-03-24 04:26:46 +04:00
Andy_kl f71149edb6 Fixup for #2105 2022-03-24 03:42:26 +04:00
Tom Rothamel 3d4e5111f2 Merge pull request #3219 from uyjulian/ffmedia_matching_allocator
ffmedia memory allocation improvements
2022-03-23 19:08:01 -04:00
Tom Rothamel a297eb291f Merge pull request #2105 from Andykl/atl-changes
Add participation of pure funcs and constants in ATL analysis
2022-03-23 19:06:22 -04:00
Tom Rothamel 7461657681 Merge branch 'master' into atl-changes 2022-03-23 19:06:12 -04:00
Tom Rothamel 15c4015af4 Tweak #2121. 2022-03-23 18:54:24 -04:00
kyouryuukunn b693ef0610 fix 2022-03-24 07:39:43 +09:00
Tom Rothamel 2f08c883c5 Merge pull request #2121 from jsfehler/patch-1
Add equality comparison to HistoryEntry
2022-03-23 18:15:54 -04:00
Tom Rothamel 75849bfa18 Update #3347 to support nested namespaces. 2022-03-23 01:33:13 -04:00
Tom Rothamel 810e926376 Merge pull request #3347 from qTich/dynamic-sub-storage
Correct work of dynamic stack for sub StoreModule.
2022-03-23 01:07:05 -04:00
Tom Rothamel fee9624574 Transform sdk-fonts to game/ upon game build.
So there's nothing required to access the files in it on Android,
iOS, in built games, etc.
2022-03-23 00:46:11 -04:00
Tichq 98fb94dcae Correct work of dynamic stack for sub StoreModule. 2022-03-23 07:03:12 +03:00
Tom Rothamel cbd12817d3 Move SourceHanSansLite.ttf to the top level, so it can be classified into projects. 2022-03-22 23:06:30 -04:00
kyouryuukunn 99cfd11c9b fix 2022-03-23 08:27:43 +09:00
kyouryuukunn d14218c5df allow None for extract dialogue 2022-03-23 06:35:24 +09:00
Tom Rothamel f71a9727b9 Always show _trace_screen.
See last commit for what this means. Fixes #3329.
2022-03-21 20:58:12 -04:00
Tom Rothamel 801bd0c59c Add config.always_shown_screens.
A list of screens that are always shown, even in the game menu
screens and other contexts where the overlays are not.

This is intended to make the trace screen always shown, see next
commit.
2022-03-21 20:51:06 -04:00
Tom Rothamel bbce431cc5 steam: Run on older Ren'Py versions. 2022-03-21 20:44:15 -04:00
Tom Rothamel 95dc99f972 Image gallery improvements.
It's now possible to customize the screen that's used to show
individual images on per-gallery basis.

The Gallery.image and Gallery.unlock_image methods now take
arguments beginning with show_. These can be used by the image_screen
to display image metadata.

Fixes #22.
2022-03-20 00:49:07 -04:00
Tom Rothamel 01022e36e0 lexer: Report errors at the start of a block on the first line.
Fixes #2519.

This is done in the error handling routine, rather than __init__,
so that failing to advance the lexer before the first line remains
an error.
2022-03-20 00:15:55 -04:00
Tom Rothamel c608f054ae web: Mark Ren'Py 8 as not supported. 2022-03-19 21:16:57 -04:00
kyouryuukunn 2251961d6b remove not required statements 2022-03-20 00:07:21 +09:00
kyouryuukunn 4551c47e97 make extract dialogue language selectable 2022-03-20 00:03:43 +09:00
kyouryuukunn bd8ef24a40 Merge pull request #3340 from kyouryuukunn/japanese_translate_update_220319
update japanese_translate_220319
2022-03-19 23:30:10 +09:00
kyouryuukunn ae5deafef2 fix japanese translation typo 2022-03-19 23:29:26 +09:00
kyouryuukunn 7501a55691 update japanese_translate_220319 2022-03-19 23:27:39 +09:00
kyouryuukunn 23812d0818 export dialogue in preferences.language in that game 2022-03-19 22:47:31 +09:00
Tom Rothamel be4e757441 steam: Move layers up when the keyboard is shown.
This keeps the keyboard from hiding the text that is being input,
which would keep thngs from working.

This is written so that it can be dropped into Ren'Py 7.3.5 and
7.4.11 without change - that's why transitions were leveraged,
rather than making changes to the Ren'Py core.
2022-03-19 01:55:30 -04:00
Tom Rothamel ec4a4b7943 distribute: Add the --format argument.
This lets the command line change the format of a game. Right now,
this is being used for steam deck testing.
2022-03-19 01:52:57 -04:00
Tom Rothamel 25da47be10 steam: Only show the keyboard once per interaction.
This lets the player hide the keyboard, then show it again
with Steam+X, to access other interface content.
2022-03-18 22:59:41 -04:00
Tom Rothamel 72fbaf43fa Merge pull request #3328 from renpy/scale-input-caret
Scale the input caret with the accessibility option to scale the text
2022-03-18 20:47:27 -04:00
Tom Rothamel ea3476dd40 py2: ZipInfo is missing is_dir.
Fixes #3331.
2022-03-17 21:36:08 -04:00
Gouvernathor 1c823e6dcc Fix incorrect use of class attributes and slots 2022-03-17 07:00:30 +01:00
Tom Rothamel 221f6abc37 Merge pull request #3330 from kyouryuukunn/add_doc_console_help
add doc cosole commands
2022-03-17 00:10:06 -04:00
Tom Rothamel 93fad0ac07 Merge pull request #3336 from renpy/outlines-scaling
Change the outlines_scaling's default
2022-03-17 00:09:28 -04:00
Tom Rothamel 7c811fdc4c Merge pull request #3337 from renpy/round
Adding round to renpy.compat
2022-03-17 00:08:41 -04:00
Tom Rothamel 0e3dfa8ca4 Update the imports to import round. 2022-03-16 23:41:23 -04:00
Gouvernathor 398a454891 Use the builtins version
doesn't support __round__ having only one parameter, but my version didn't either
2022-03-16 18:17:29 +01:00
Gouvernathor 0e845fcddb fix broken import in py3 2022-03-16 06:43:25 +01:00
Gouvernathor 3083431bbd fix typo 2022-03-16 06:39:00 +01:00
Gouvernathor e0dcd187d4 Update the use of round (4/4) 2022-03-16 06:29:55 +01:00
Gouvernathor 0010b2c117 Update the use of round (3/4) 2022-03-16 06:28:23 +01:00
Gouvernathor 283ac8537f Update the use of round (2/4) 2022-03-16 06:27:08 +01:00
Gouvernathor 022d6e8e60 Update the use of round (1/4) 2022-03-16 06:23:54 +01:00
Gouvernathor e1ab5850b3 Add renpy.compat.round 2022-03-16 06:16:49 +01:00
Gouvernathor 51ef4cfd06 Update style_properties.rst 2022-03-16 05:29:55 +01:00
Gouvernathor 2ab2c32d65 Add caveats to the doc 2022-03-16 05:23:07 +01:00
Gouvernathor 10cf89d3ff fix typo 2022-03-16 05:10:32 +01:00
Gouvernathor 215b4ad200 Update incompatible.rst 2022-03-16 05:09:49 +01:00
Gouvernathor ce231659af and 2022-03-16 05:00:15 +01:00
Gouvernathor d9a2347860 Re-document outline_scaling 2022-03-16 04:59:07 +01:00
Gouvernathor b458a2c4e3 Incompat outline_scaling 2022-03-16 04:36:59 +01:00
Gouvernathor adcd0c4430 Undocument outline_scaling 2022-03-16 04:29:26 +01:00
Gouvernathor 8df95d1f1d Change the way the default is assumed 2022-03-16 04:27:51 +01:00
Gouvernathor 81a3c54b84 Change the default for outline_scaling
fix #1092, fix #3315
2022-03-16 04:23:07 +01:00
Gouvernathor aa5e7fa6b3 Compat the outline_scaling default value 2022-03-16 04:21:27 +01:00
Tom Rothamel 645d527c8f py3,ios: Adapt to the return type of UTF8String. 2022-03-14 00:10:50 -04:00
Tom Rothamel 844d1b2c26 py3: On ios, restructure the renpy/ directory to eliminate __pycache__. 2022-03-13 23:53:32 -04:00
Tom Rothamel 2ee2feb9d8 Eliminate now-obsolete static intitialization. 2022-03-13 23:53:32 -04:00
kyouryuukunn 7e0265e0b6 add ffmpeg example 2022-03-13 12:52:06 +09:00
Tom Rothamel e4896d675b Merge pull request #3325 from renpy/screen-local-variable-doc
Document ScreenVariable's top-level screen meaning
2022-03-12 21:41:32 -05:00
Tom Rothamel 1834c0f5bd Merge pull request #3261 from Gouvernathor/patch-1
Add explanations about how attributes are selected in layeredimages
2022-03-12 21:40:56 -05:00
Tom Rothamel 13ce20eca0 Merge pull request #3280 from Moshibit/master
Fix typo in documentation
2022-03-12 21:40:05 -05:00
kyouryuukunn 45c01c3dee add help doc_generate parameter for generate doc 2022-03-13 08:14:46 +09:00
kyouryuukunn b2054e23ed add doc console help 2022-03-13 07:56:02 +09:00
Tom Rothamel aa0b70ddfc Merge pull request #3332 from mal/condense-rollback
Skip recording deltas for stores that don't change in rollback
2022-03-12 15:24:07 -05:00
Mal Graty d04920ef87 Skip recording deltas for stores that don't change
Currently keys for every store are added to a Rollback object's stores
and delta_ebc dicts, even if they contain no data. When rolling back
these dicts are iterated over, and the empty stores amount to no-ops.
These empty data structures are also serialised/de-serialised by the
save system (albeit efficiently) but yield no benefit.

This change is to skip recording entries for stores that haven't
changed, the resulting log should be functionally equivalent to existing
behaviour, but cut down on the amount of extraneous work to handle them.

As the code processing the log doesn't change or mind stores being
omitted, this change should be completely transparent and both forward
and backward compatible.
2022-03-12 05:35:44 +00:00
Tom Rothamel fea0be65ed Set the SDL_APP_NAME hint. 2022-03-11 20:20:55 -05:00
Gouvernathor d5a0b24c36 Scale the input caret wrt accessibility options 2022-03-11 21:36:48 +01:00
kyouryuukunn 0364b3b2fe add doc about movie with alpha channel 2022-03-12 04:45:57 +09:00
Tom Rothamel 14c8c39ac9 Update vscode settings. 2022-03-10 23:03:35 -05:00
Tom Rothamel 3429731ca5 epic: Ignore arguments supplied by the epic games store. 2022-03-10 23:03:15 -05:00
Tom Rothamel 626f3c11e8 steam: Fix get_achievement. 2022-03-10 22:58:56 -05:00
Gouvernathor 2fe72d25ed Document ScreenVariable's top-level screen meaning 2022-03-10 20:44:17 +01:00
Tom Rothamel 445dbe9f49 iap: Add the ability for the creator to initialize iap.
This allows iap calls to occur during the init phase.
2022-03-09 09:30:44 -05:00
Tom Rothamel 9eec11712d Automatically link rapt2/rapt3 and renios2/renios3. 2022-03-08 21:50:34 -05:00
Gouvernathor 5bd96a3386 add access security if the entry isn't found 2022-03-08 13:59:44 +01:00
Tom Rothamel 5daa0bbdd6 Fix regression introduced by #3300. 2022-03-07 23:40:31 -05:00
Gouvernathor 637ecb9dd9 Get the actual line number 2022-03-08 03:55:48 +01:00
Gouvernathor eb883d1769 Format the stack command output 2022-03-08 03:11:00 +01:00
Gouvernathor 1bcbabb382 Add the stack command
fix #1099
2022-03-08 02:35:51 +01:00
Tom Rothamel 3815d46024 Merge pull request #3300 from Booplicate/guardrail_scripts_sort
Prevent possible crash in `Script.load_script`
2022-03-07 20:00:19 -05:00
Tom Rothamel ebdc9aa4ee Merge pull request #3301 from renpy/document-tl-None-common.rpym
Better document the `tl/None/common.rpym` file
2022-03-07 19:59:55 -05:00
Gouvernathor 0c0696af60 Update translation.rst 2022-03-07 04:16:54 +01:00
Tom Rothamel a33f6d61cd Merge pull request #3319 from Dobby233Liu/Dobby233Liu/i18n/simplified-chinese-libre
Simplified Chinese translation: Correct term
2022-03-05 20:37:59 -05:00
Liu Wenyuan 2997a30879 schinese translation: correct term
Change 免费软件 (means "free-of-charge software") -> 自由软件 (which is closer in meaning to "libre software")
2022-03-06 09:25:45 +08:00
Tom Rothamel 137acfaf1f Add config.lint_character_statistics.
To allowe users to opt out of character statistics.
2022-03-05 09:33:30 -05:00
Tom Rothamel cb27a7b95f Improve character statistics.
* Characters with the same count are grouped together on the same
  line, and ordered by name.
* The statistics are only displayed when config.developer is true,
  to prevent spoilers.
2022-03-04 23:18:17 -05:00
Tom Rothamel 5490f98d21 Fix sorting of languages. 2022-03-04 22:34:41 -05:00
Tom Rothamel 480e74abeb Merge pull request #3170 from Gouvernathor/patch-4
Add character stats in lint
2022-03-04 22:25:15 -05:00
Tom Rothamel ae65c1d2bf Merge pull request #3295 from Tey/js_cmd
Allow Python statements to be run from JS (emscripten)
2022-03-04 22:21:53 -05:00
Tom Rothamel 9eed69f577 Use slightly longer magic strings.
That contain the Python version, to 100% force a recompile, and
be unlikely to match by mistake.

Another attempt at fixing #3274.
2022-03-04 22:11:15 -05:00
Tom Rothamel 7b142c2b68 Moved 7z.sfx to renpy-build, add 7z.sfx. 2022-03-03 22:55:25 -05:00
Tom Rothamel d201a9454b Merge pull request #3285 from GlacierLab/master
update 7z sfx with dpi aware
2022-03-03 22:40:58 -05:00
Tom Rothamel 2bea440c19 Minor fixes to dragging. 2022-03-02 23:35:18 -05:00
Tom Rothamel 75e87b00db Merge pull request #3314 from kyouryuukunn/add_dragging_callback_drag
add drag dragging callback
2022-03-02 23:33:53 -05:00
Tom Rothamel 74537013ba Apply custom text tags before self-voicing.
Fixes #3313.
2022-03-02 23:33:25 -05:00
kyouryuukunn 241f24458d add dragging callback drag 2022-03-03 07:01:41 +09:00
Gouvernathor 958803ec9d Remove duplicate
fix #3312
2022-03-02 12:13:48 +01:00
Tom Rothamel 4d2d41db75 steam: Automatically show the keyboard on Steam Deck. 2022-03-02 02:46:17 -05:00
Tom Rothamel a4dcfed049 steam: Set the steam_deck and steam_big_picture variants.
As appropriate.
2022-03-01 21:48:10 -05:00
Andy_kl 6f52d32ac4 More syntax guards 2022-03-01 19:24:33 +02:00
Tom Rothamel c3a5f1a006 Log an exception and continue if initializing a controller fails. 2022-02-28 21:18:21 -05:00
Tom Rothamel 7c6918ebf2 steam: Move to the new callback system, handle callbacks. 2022-02-28 01:17:39 -05:00
Tom Rothamel 50c871f542 Use the correct mode to write json. 2022-02-28 01:17:39 -05:00
Mal Graty 3a3f522333 Only trigger first frame once in fast-forward
When fast-forwarding through ATL, one frame from every interpolation is
shown due to the first_frame flag. To avoid this, only set the flag if
the st rests within the duration of the interpolation. This ensures that
the flag is correctly set, but only for the interpolation that will be
active at the st.
2022-02-26 21:04:28 +00:00
Mal Graty 0252718c1b Don't assume a function in ATL will consume all st
This resolves an issue where, when fast-forwarding, ATL would block on
a function call that returned None.
2022-02-26 18:27:39 +00:00
Gouvernathor d72403a1db typo 2022-02-26 17:07:18 +01:00
Gouvernathor c8ad8d950a Merge branch 'master' into patch-11 2022-02-26 16:12:34 +01:00
Mal Graty 9d1d086853 Execute default statements prior to linting 2022-02-26 14:26:21 +00:00
Tom Rothamel b73a4883f1 py3: Open the controller config files in binary mode. 2022-02-25 23:29:39 -05:00
Tom Rothamel 6e5818379a steam: Remove raise when Steam can't be loaded. 2022-02-24 11:39:51 -05:00
Tom Rothamel ed233de855 steam: Avoid importing the full steam api if the dll isn't there. 2022-02-24 00:11:52 -05:00
Tom Rothamel 5782564a9c steam: Remove the old _renpysteam.pyx module. 2022-02-24 00:00:55 -05:00
Tom Rothamel b94e23797a steam: Rewrite to use steamapi.py.
This is a ctypes-based binding to steam.
2022-02-23 23:38:58 -05:00
Andy_kl 80a1989e59 Report empty parameter defaults as an error 2022-02-23 19:19:24 +02:00
Andy_kl a97c856971 Merge remote-tracking branch 'Andykl/py3-arguments' into py3-arguments 2022-02-23 16:38:49 +02:00
Gouvernathor d2a481d098 Better document the tl/None/common.rpym file 2022-02-23 14:21:04 +01:00
Totally a booplicate f4f326c4b7 add sort key 2022-02-22 08:09:56 +03:00
Gouvernathor fd020faa3e correct misdocumented default value 2022-02-21 16:06:50 +01:00
Tom Rothamel e5fb7d4e38 Merge pull request #3297 from Booplicate/fix_dev_menu_crash
Fix a crash in dev menu
2022-02-20 19:06:38 -05:00
Totally a booplicate 9bfd867269 replace file with open 2022-02-21 03:00:17 +03:00
Tom Rothamel 1dcbd6659b Document where renpy.reload_script works.
Fixes #3283.
2022-02-19 22:42:11 -05:00
Teyut d67d12392e Use a JS global variable instead of a file for passing the script content 2022-02-20 03:57:57 +01:00
Gouvernathor 568aae13c9 Add reference 2022-02-19 13:52:17 +01:00
Gouvernathor 97aaf444f5 Update keymap.rst 2022-02-19 13:52:13 +01:00
Teyut bd78f71dad Move JS command to step 3 as step 6 is almost never reached with FF 2022-02-18 05:37:07 +01:00
Tom Rothamel 1b366c65d4 py3: Get consolecommand working with Python 3. 2022-02-17 22:23:55 -05:00
Tom Rothamel 9998fdcb43 py3: Android install_sdk works on Python 3. 2022-02-17 22:14:26 -05:00
Teyut 471aa55dd0 Allow Python statements to be run from JS (emscripten) 2022-02-18 02:29:57 +01:00
Tom Rothamel ae535d8186 Always import swdraw.
It's used in a few paths in renpy.display.core.
2022-02-17 00:25:41 -05:00
Tom Rothamel 7666a3cdbf Properly tag pyo/pyc files, avoid distributing build-only files. 2022-02-16 22:55:55 -05:00
Andykl c80d91c8a1 Merge pull request #3294 from eyzi/patch-1
fix(docs): correct small typo in modal description
2022-02-17 07:26:25 +04:00
eyzi 78ec4e0d30 fix(docs): small typo in modal description 2022-02-16 22:21:27 -05:00
Tom Rothamel 016d1f997a Make how Transform processes keyword arguments clearer. 2022-02-16 21:53:21 -05:00
Tom Rothamel 6e7b79fdeb py3: Fix the python module patterns. 2022-02-16 01:24:24 -05:00
Tom Rothamel d39a8aa604 py3: Distribute games for python 3. 2022-02-15 21:41:33 -05:00
Tom Rothamel 89178b64d5 py3: Fix the launcher's zipfile creation to work with Python3. 2022-02-15 21:13:29 -05:00
Gouvernathor 703cceef12 Fix Matrix's getitem, setitem and repr
Having `matrix[k] != matrix.m[k]` is weird. But changing the really faulty thing here, the `fields` list, would break compatibility with the existing matrices having been constructed and accessed via the .?d? accessors.
A quick look in the current code shows no use of the [] operator on Matrix instances, so this one should be broken rather than the three-letter accessors.
2022-02-15 11:35:19 +01:00
Tom Rothamel 15c4cdf708 py3: Get change_icon working with Python 3.
This also uses a library pefile that works with Python 3.
2022-02-14 02:23:15 -05:00
kyouryuukunn e486ba0637 fix conflict 2022-02-13 09:55:29 +09:00
Tom Rothamel 0850bdbe4d Add adv_narrator as an alias for _narrator.
Also tweak the other default characters.
2022-02-12 13:52:04 -05:00
Tom Rothamel 9978295086 Add config.at_exit_callbacks.
This is a list of functions that are run when the game quits. These
can be used to save data when required.
2022-02-11 23:00:10 -05:00
Tom Rothamel fee79d65ad vscode: Add support for using a global install. 2022-02-10 23:34:48 -05:00
Tom Rothamel 3270107898 vscode: Add an option to upgrade vscode. 2022-02-10 23:16:04 -05:00
Tom Rothamel a324e9e599 vscode: Integrate with the launcher. 2022-02-10 02:01:21 -05:00
Tom Rothamel 1ed394cb9d vscode: Update to use the installed vscode. 2022-02-10 01:31:32 -05:00
Tom Rothamel 91cee4f106 installer: Avoid creating a directory that exists. 2022-02-10 01:30:07 -05:00
Tom Rothamel 47f74b1856 vscode: Import the edit.py file. 2022-02-09 21:11:10 -05:00
琴梨梨 e1541f9b1f update 7z sfx with dpi aware 2022-02-09 17:29:37 +08:00
Tom Rothamel 190e722beb manifest: Add the local_manifest command.
This tests that a manifest can be run locally.
2022-02-09 01:24:24 -05:00
Tom Rothamel 2dc640e01d installer: Remove the vscode installer.
It's been moved to renpy/extensions.
2022-02-09 01:14:38 -05:00
Tom Rothamel 4ebd17edcd installer: Add the manifest command.
This downloads a manifest from the web, verifies it, and then
execs it.
2022-02-09 01:13:30 -05:00
Tom Rothamel 80bf4c4c4a Add an ecdsa public key.
The first step in a movie to more modern crypto.
2022-02-08 22:44:54 -05:00
Tom Rothamel 5da79dfb2a installer: Install VSCode for mac. 2022-02-08 21:23:19 -05:00
Tom Rothamel e30bcf7fd6 installer: Install vscode on windows. 2022-02-08 01:58:09 -05:00
Tom Rothamel b934aabd5a installer: Full vscode install process on Linux. 2022-02-07 23:30:54 -05:00
Moshibit 8245959ce7 Fix typo in documentation 2022-02-07 06:03:51 -06:00
Moshibit 6e9bf5b0f5 Merge branch 'renpy:master' into master 2022-02-07 06:01:10 -06:00
Moshibit f77cc1a612 Update Spanish translation (#3267)
* Update Spanish translation
2022-02-07 09:50:03 +01:00
Tom Rothamel 22221e0d60 py3: Encode clipboard data as utf-8. 2022-02-06 22:59:06 -05:00
Moshibit 9812e151ec Update python.rst 2022-02-06 21:43:05 -06:00
Moshibit f84a375dd0 Update python.rst 2022-02-06 21:42:30 -06:00
Moshibit 454a5223d1 Update python.rst 2022-02-06 21:41:42 -06:00
Moshibit a70eeba13b Merge pull request #2 from Moshibit/Moshibit-patch-2
Fix typo and add example
2022-02-06 21:39:15 -06:00
Moshibit 08bdc5ad52 Fix typo and add example 2022-02-06 21:38:27 -06:00
Moshibit 61ee343d6d Update python.rst 2022-02-06 21:35:52 -06:00
Moshibit 651b553e71 Update python.rst 2022-02-06 21:35:12 -06:00
Moshibit f511e27d9b Fix typo and add example 2022-02-06 21:32:20 -06:00
Moshibit 8a652042df Merge branch 'renpy:master' into master 2022-02-06 21:24:35 -06:00
Moshibit cb76a91459 Spanidh translation update 2022-02-06 21:15:20 -06:00
Tom Rothamel 2d59a802df Wrap comprehensions and generator expressions in lambdas.
This fixes #3274, which is a subtle bug that was actually there in
Python 3, if rarely encountered. The problem is fundamentally
that:

eval("{ i for i in l if i == b }", globals={ "l" : [1, 2, 3]}, locals={ "b" : 2 })

Doesn't work, since the comprehension (non-list comprehensions in
py2, list comprehensions also in py3, generator expressions in
all versions) creates its own scope, and since b isn't defined in
an exterior scope, b is loaded with the LOAD_GLOBAL opcode, which
doesn't check locals.

To fix this, the statement is wrapped in a lambda that is immediately
called with the variables it loads - so the expression above is
turned into:

    (lambda l, b : { i for i in l if i == b })(l, b)

This creates a new scope, which the python compile can find,
and compile the generator expression or comprehension to
pull from.
2022-02-06 21:27:15 -05:00
Tom Rothamel 9d85375147 renpy.python.Revertable* -> renpy.revertable.Revertable* 2022-02-05 21:47:40 -05:00
Tom Rothamel 9397b177d2 Break renpy.python into 3 modules.
To make it easier to navigate all three.

renpy.revertable
   Contains all of the RevertableX classes, as well as some
   with different names that function similarly.

renpy.rollback
   Contains the rollback infrastructure, except for the Revertable
   classes.

renpy.python
   Contains the stores and Python transformation, compilation,
   and evaluation/execution.
2022-02-05 21:28:04 -05:00
Tom Rothamel 6527e2c975 Merge pull request #3269 from mal/avoid-extra-call
Improve duplicatable check to consolidate coercion
2022-02-05 18:13:03 -05:00
Tom Rothamel 760d765df7 Merge pull request #3277 from Andykl/pause-call
Don't lose checkpoint in case there was Call during renpy.pause
2022-02-05 18:12:47 -05:00
Andy_kl cc71c3ce4f Don't lose checkpoint in case there was Call during renpy.pause 2022-02-05 12:26:00 +02:00
Tom Rothamel dfe2ce2962 installer: Run commands. 2022-02-04 22:49:15 -05:00
Tom Rothamel bea95ad00a installer: Move function. 2022-02-04 21:57:28 -05:00
Tom Rothamel 71894fe5ca Fix indents. 2022-02-04 21:05:31 -05:00
Tom Rothamel 6f29d2860b Text shouldn't use drawable resolution when config.use_drawable_resolution is False.
Even if config.drawable_resolution_text is True.

Per #3276.
2022-02-03 22:03:49 -05:00
Tom Rothamel 6f444ba619 Allow get_playing() to return queued audio before channel number is allocated.
This prevents a race condition caused by something being enqueued
but not played before renpy.get_playing() is called, the first
time the channel was used in a session.

This mostly manifested in in renpy.movie_cutscene(), which could
skip the movie if the outcome of the race was wrong.
2022-02-03 20:05:05 -05:00
Tom Rothamel 39d158ec8e installer: Change how paths work.
We now use prefixes for the different paths, with temp: being
in the temp directory, backup: being a backup file, and no
prefix meaning the target directory.

This also adds the move command.
2022-02-02 23:01:58 -05:00
Tom Rothamel 6a8b563913 Add the installer.unpack command. 2022-02-02 22:16:04 -05:00
Tom Rothamel dfd7a166d6 Fix extra quote. 2022-02-02 20:51:33 -05:00
Tom Rothamel c510497bad Merge pull request #3272 from renpy/reprlib
Patch module not found in py3
2022-02-02 20:44:32 -05:00
Tom Rothamel ca79f7f283 Document where SlottedNoRollback is useful. 2022-02-02 20:33:12 -05:00
Gouvernathor 49bb9cee36 Patch module not found in py3 2022-02-02 22:21:41 +01:00
Gouvernathor 1c8bfbf29e Merge pull request #3271 from Julvenzor/patch-1
Fix uncaught exception in Spanish translation
2022-02-02 15:55:22 +01:00
Julvenzor b32ddac421 Fix uncaught exception in Spanish translation
I have added a "{" at the beginning of the line 1881 to solve an uncaught exception:

# game/gui7.rpy:311
    old "{size=-4}\n\nThis will not overwrite gui/main_menu.png, gui/game_menu.png, and gui/window_icon.png, but will create files that do not exist.{/size}"
    new "size=-4}\n\nEsto no sobrescribirá gui/main_menu.png, gui/game_menu.png y gui/window_icon.png, pero creará archivos que no existen.{/size}"

Traceback generated by Ren'py prior to this change:

While processing text tag {/size} in u'{b}Aviso{/b}\nSi contin\xfaas se sobreescribir\xe1n las barras, botones, huecos de partida grabada, barras de desplazamiento y controles deslizantes personalizados.\n\n\xbfQu\xe9 deseas hacer?{size=-4}\n\nEsto no sobrescribir\xe1 gui/main_menu.png, gui/game_menu.png y gui/window_icon.png, pero crear\xe1 archivos que no existen.{/size}'.:
  File "game/gui7.rpy", line 319, in <module>
  File "game/interface.rpy", line 539, in choice
  File "game/interface.rpy", line 329, in common
Exception: u'/size' closes a text tag that isn't open.

Regards.
2022-02-02 15:51:57 +01:00
Tom Rothamel a30605dcd2 Merge pull request #3265 from renpy/fix_3264
Use At instead of transforms' `__call__`
2022-02-01 22:12:12 -05:00
Mal Graty 6667b19783 Simplify duplicatable attribute check further 2022-02-02 00:52:40 +00:00
Tom Rothamel fd5a7a7c1c Improve the modal case of PauseBehavior.
To make sure the end of the pause is scheduled, even if we're modal.

Per #3256.
2022-02-01 19:37:49 -05:00
Mal Graty 07d3b423ca Improve duplicatable check to consolidate coercion
Trying to coerce the child arg to Transform.__call__ into a displayable
adds an avoidable call and could lead to redundant duplication (in the
case where the coercion yields a duplicatable displayable).

Instead, use getattr in the duplicatable check to prevent raising and
allow __init__ (which already does arg coercion) to handle it as normal.
2022-02-02 00:07:31 +00:00
Tom Rothamel bb63b6c81f Merge pull request #3268 from Siege-Wizard/patch-1
Add SlottedNoRollback, slotted version of NoRollback
2022-02-01 18:23:04 -05:00
Siege-Wizard 69cc8347f5 Address review comments 2022-02-01 20:44:01 +01:00
Siege-Wizard 37558df397 Fix doc of SlottedNoRollback 2022-02-01 20:42:27 +01:00
Siege-Wizard 8893d6cfdc Import SlottedNoRollback in DefaultStore 2022-02-01 20:41:29 +01:00
Siege-Wizard 57be1f65d9 Add SlottedNoRollback, slotted version of NoRollback 2022-02-01 20:33:55 +01:00
Gouvernathor 9556585673 Per mal's advice 2022-02-01 20:11:29 +01:00
Gouvernathor afab92b363 Optimized At call for multiple transforms 2022-02-01 19:46:32 +01:00
Moshibit af9cbba2ea Update Spanish translation 2022-02-01 09:24:39 -06:00
Gouvernathor d97d808b17 Use At instead of transforms' __call__
fixes #3264
2022-02-01 13:14:13 +01:00
Tom Rothamel 2c4b9affbf Simply Layout.redraw_typewriter.
It only ever considered if we were at the end of the layout time,
so consider that in a simpler way.

Per #3256.
2022-01-31 22:20:50 -05:00
Tom Rothamel e98d1b393e Try to make sure slow_done is always called.
Refreshing a Text displayable whenever self.slow is True and
the slow text has not timed out should mean that regardless
of whatever is going wrong, slow_done should be called.

Per #3256.
2022-01-31 21:59:31 -05:00
Tom Rothamel f7834764e7 Text: Process slow_done argument.
This is probably a regression from older games.
2022-01-31 21:58:55 -05:00
Tom Rothamel 2731e08df1 installer: Start work on the installer.
The installer is a tool that will provided primitives for
installing loosely-coupled components (like editors) into
Ren'Py, and eventually, into games.

For now, this implements a download primitive.
2022-01-30 22:49:32 -05:00
Tom Rothamel 50b188065d Merge pull request #3262 from mal/attribute-cleanup
Clean up disused kwargs on attribute functions
2022-01-29 22:11:39 -05:00
Gouvernathor 63436dabfb Merge branch 'renpy:master' into patch-1 2022-01-29 02:31:03 +01:00
Gouvernathor efa5dc3daf Update following #3191 2022-01-29 02:30:04 +01:00
Mal Graty 512288b278 Clean up disused kwargs on attribute functions
The wanted and remove kwargs on Character.resolve_say_attributes and
images.apply_attributes were previously used to support the speaking
attribute feature, however that has since moved over to using the
temporary attribute functionality and these parameters are never passed
as anything beside empty lists, so we can clean them up.
2022-01-29 01:24:58 +00:00
Tom Rothamel fce470d962 Minor style change. 2022-01-28 20:22:15 -05:00
Tom Rothamel dfc73cd34a Remove debug print. 2022-01-28 20:21:08 -05:00
Tom Rothamel 7b391ca490 Merge pull request #3191 from mal/default-attributes
Add config.default_attributes callback dictionary
2022-01-28 20:19:11 -05:00
Tom Rothamel fbf9df7f79 Ignore errors in visit_all in SceneLists.add.
This only happens when config.developer is not true. It's meant
to fix an issue introduced in 7.4, where a displayables
visit_all method can be called before an interaction begins.

That's a problem with ATL that depends on a variable that's defined
between the show and interaction - something like:

    show atl_that_uses_foo
    $ foo = True
    "This."

The reasoning for visit_all was to allow the state of the ATL to
be taken (say, by having multiple shows in a row) without an
interaction to take place. Since the older games with this
problem can't successfully do this, it's okay to ignore this
error.

Fixes #3229.
2022-01-28 20:11:01 -05:00
Tom Rothamel 7b1e58fa9c Fix regression introduced by d188403cfa.
Whoops.
2022-01-28 20:09:22 -05:00
Tom Rothamel d9fa7e2537 Merge pull request #3213 from raspberry-soft/master
Replace "config.default_tag_name" with "config.default_tag_layer" in the docs
2022-01-28 18:18:38 -05:00
Tom Rothamel 602fa3428b Merge pull request #3228 from Gouvernathor/patch-14
Allow Transform-defined transforms to take strings
2022-01-28 18:17:47 -05:00
Tom Rothamel 909627e727 Merge pull request #3257 from Moshibit/master
Update Spanish translation
2022-01-28 18:16:48 -05:00
Tom Rothamel 8a48855ea3 Merge pull request #3253 from Tey/renpyweb-persist
Update persistent file while saving on emscripten
2022-01-28 18:16:30 -05:00
Gouvernathor b5fa257f4f rephrasing details 2022-01-28 09:28:17 +01:00
Gouvernathor a87f6bb8f5 Linkify 2022-01-28 01:05:23 +01:00
Tom Rothamel d188403cfa Sanitize values that Ren'Py will place into persistent.
Fixes #3260.
2022-01-27 18:48:36 -05:00
Gouvernathor 428c3b8fa5 Explain the order of attribute selection stages 2022-01-27 23:39:23 +01:00
Tom Rothamel d554244f7a Fix new type warning. 2022-01-26 22:26:07 -05:00
Tom Rothamel 89f5d03157 py2: Fix bchr, which fixes im.ramp, which fixes #3255. 2022-01-26 22:11:22 -05:00
Moshibit f2eee91b96 Update launcher.rpy 2022-01-26 17:55:27 -06:00
Moshibit ef018e04ac Merge branch 'renpy:master' into master 2022-01-26 17:49:10 -06:00
Moshibit 17dfbace69 Update launcher.rpy 2022-01-26 17:48:46 -06:00
Tom Rothamel 47a82ccdfd Cleanup vscode, add scratch to gitignore. 2022-01-25 21:46:29 -05:00
Tom Rothamel 3260104cec Update _renpybidi to use the PyUNICODE API correctly.
It hadn't been a problem in Python 2, but we were erroring out
when displaying Arabic in Python 3.

Fixes #3250.
2022-01-25 21:45:26 -05:00
Tom Rothamel 55b03c5d49 Add missing future line.
Fixes #3254.
2022-01-25 19:00:33 -05:00
Tey 8923812510 Update persistent file while saving on emscripten 2022-01-25 21:01:57 +01:00
Tom Rothamel 85c5ec8584 py3: Restore the .iter{values, keys, items} methods to RevertableDict. 2022-01-24 23:58:40 -05:00
Tom Rothamel 76bedea1c4 Merge pull request #3251 from Gouvernathor/patch-1
Fix datetime pickle hack
2022-01-24 23:48:46 -05:00
Gouvernathor 81dbcc158a Fix mind-aching loophole 2022-01-24 10:25:14 +01:00
Tom Rothamel 0da1471c7b py3: Rewrite RENPY_SIMULATE_DOWNLOAD to use requests.
... which is available and the same on both versions of Python.
2022-01-24 00:14:59 -05:00
Tom Rothamel 5e83fd52de doc: Prune, update, and correct config variables.
This includes undocumenting some config variables that are not
relevant to modern Ren'Py. These variables will still work and
remain supported, but probably shouldn't be used in newer
games.
2022-01-23 23:30:21 -05:00
Tom Rothamel aa560dba25 Change the options for the size of the game window.
This reflects the more modern world.
2022-01-23 23:11:42 -05:00
Tom Rothamel 0ac623bb7e Allow exceptions to occur in androidhw/ioshw without crash.
This addresses #3247, a regression introduced in #3189.
2022-01-23 21:09:13 -05:00
Tom Rothamel 5d893a6e90 Classify the contents of lib/ as binary, not source.
This should address the problem in #3247.
2022-01-23 09:55:56 -05:00
Tom Rothamel d1abc541f9 Document Python in Ren'Py 8. 2022-01-23 02:36:07 -05:00
Tom Rothamel 59fae51d21 py3: Analyze statements and nodes that assign names.
With this, the pyanalyis module should be able to compute global
and local constants.
2022-01-22 21:49:33 -05:00
Tom Rothamel 06c2a6f4fa Mention that FLAC is officially supported. 2022-01-22 12:42:37 -05:00
Tom Rothamel d25ca3eba6 py3: Analyze expressions for const-ness. 2022-01-21 23:09:53 -05:00
Tom Rothamel 8dc8ee7141 Merge pull request #3242 from Gouvernathor/translations
Translations to tutorial and the question
2022-01-21 22:17:33 -05:00
Tom Rothamel 3886289bd8 Merge pull request #3244 from Julvenzor/patch-3
Update Spanish translation
2022-01-21 22:17:21 -05:00
Gouvernathor fe7f24cd55 Subclass functools.partial for better performance 2022-01-22 04:13:58 +01:00
Tom Rothamel 6f4907a5f7 py3: Read the list of builtins from Python. 2022-01-20 21:29:59 -05:00
Julvenzor a392db1db5 Update common.rpy 2022-01-21 02:33:21 +01:00
Julvenzor 1bd5c2236d Update screens.rpy 2022-01-21 02:20:53 +01:00
Julvenzor bed7c1aeff Update options.rpy 2022-01-21 02:11:33 +01:00
Julvenzor 1b529b6d94 Update obsolete.rpy 2022-01-21 02:08:26 +01:00
Julvenzor 52f0149256 Update developer.rpy 2022-01-21 02:06:59 +01:00
Julvenzor f86f24b3c5 Update launcher.rpy
I have mainly tried to give consistency to the translation and corrected an abusive use of capital letters. In Spanish, it's not correct to capitalize the first letter of each word in a menu.

Regards.
2022-01-21 02:04:59 +01:00
Julvenzor da7ec84d88 Update common.rpy 2022-01-21 01:55:15 +01:00
Julvenzor c99a52a8c1 Update error.rpy
Minor corrections and translation in Spanish.

Regards.
2022-01-21 01:40:19 +01:00
Asriel Senna 4f1bee19ee add translations 2022-01-20 17:15:18 +01:00
Tom Rothamel 10ef01267a Merge pull request #3241 from rajsingh010/master
Fixing str for bytes error, thrown while choosing project directory.
2022-01-19 22:59:31 -05:00
Tom Rothamel 1fb134d644 py3, live2d: Get live2d working under Python 3.
Fixes #3237, and other problems that show up once that's been fixed.
2022-01-19 19:34:33 -05:00
Raj singh chauhan 6d240eb354 Fixing str for bytes error
while choosing project directory renpy crashes and gave a traceback saying bytes or integer address expected not str.
2022-01-19 22:45:06 +05:30
Tom Rothamel 9d916645b5 Remove duplicate pyanalysis imports. 2022-01-19 02:00:01 -05:00
Tom Rothamel c0c03abb45 py2: Use __all__ to work around a problem with wildcard imports. 2022-01-19 01:16:05 -05:00
Tom Rothamel 2723adcd6c Catch an error that could cause logging to fail. 2022-01-19 00:56:02 -05:00
Tom Rothamel 62ef9b4812 py3: Break analysis up into python2 and python3 versions. 2022-01-18 23:16:59 -05:00
Gouvernathor 52fedf0c0b Fix typo 2022-01-18 23:08:43 +01:00
Tom Rothamel 47dd81a07f Merge pull request #3189 from Gouvernathor/patch-9
Remove bare excepts from the repository
2022-01-17 20:10:05 -05:00
Tom Rothamel 68f763abe3 py3: Fix PyCode.__setstate__.
Per Andy.
2022-01-17 19:44:49 -05:00
Tom Rothamel b92b89d646 py3: Fix .rpyc files that have octal numbers.
This will tokenize python to find such numbers, and then convert
0123 to 0o123, allowing the game to run.
2022-01-17 02:38:12 -05:00
Tom Rothamel 9cbe4881c3 py3: Determine if python 2 code is being compiled.
This is intended as infrastructure that's meant to detect Python 2
code being loaded out of .rpyc files, that can't be easily changed
for Python 3, so fixes can be applied.
2022-01-16 21:45:10 -05:00
Tom Rothamel d2e7e117eb py3: Various fixes to get game creation working.
Fixes #3233.
2022-01-16 18:49:03 -05:00
Gouvernathor 841372cd8b Merge branch 'master' into patch-9 2022-01-16 22:35:28 +01:00
Tom Rothamel af9679f3ab py3: Move all pickling into renpy.compat.pickle.
This allows the rest of Ren'Py to use the changes from the last
commit.
2022-01-16 15:57:35 -05:00
Tom Rothamel 3924aecfcd py3: Pickle/unpickle improvements.
This includes a Python3-specific unpickler that loads as utf-8
with surrogateescape, and then converts it back to latin-1
for the purposes of unpickling datetime.time, datetime.date,
and datetime.datetime objects.

It also isolates pickle versioning into the one module.
2022-01-16 15:54:56 -05:00
Tom Rothamel ad2b13c0f1 Merge pull request #3223 from Gouvernathor/patch-1
py3 pickle fixes
2022-01-15 21:42:20 -05:00
Tom Rothamel a9366d5b1a pyi: Fix/remove uses of full_redraw.
It was something that was only part of the software renderer,
which isn't in actual use.
2022-01-15 01:34:33 -05:00
Tom Rothamel 1dd702ed0c pyi: Address more type warnings. 2022-01-14 00:54:52 -05:00
Tom Rothamel 4433c57de2 pyi: Remove unnecessary string decode. 2022-01-14 00:21:15 -05:00
Tom Rothamel fefb9189d5 pyi: Fix analysis of augmented stores. 2022-01-14 00:18:06 -05:00
Tom Rothamel 8e5fde4bfa distribute: Base vc_version on the date.
It's now YYMMDDCC, where CC is the commit of the day starting with 1.

The goal is to make it easy to see how old a given nightly or release
is just by looking at the full version, and it also means it's
not necessary to tag that start of each release.
2022-01-13 19:23:09 -05:00
Asriel Senna e1b226c562 remove last added bare excepts 2022-01-13 09:31:52 +01:00
raspberry-soft 41e8785f62 Update 00achievement.rpy 2022-01-12 05:28:29 -05:00
raspberry-soft 9e3182e16a Update 00achievement.rpy 2022-01-12 05:20:14 -05:00
raspberry-soft 2b00e4d6ad Make achievements doc more clear.
Make clear you must register the achievement with a stat_max in order to report progress. As the doc suggests registering achievements is only needed for Steam, thus crashing if `achievement.progress(name, complete)` is called.
2022-01-12 05:17:47 -05:00
Gouvernathor b9061abd12 Merge branch 'master' into patch-9 2022-01-12 03:55:32 +01:00
Gouvernathor da80f046ef merge 2022-01-12 03:54:55 +01:00
Gouvernathor d7ccd77fc6 merge stuff 2022-01-12 03:52:17 +01:00
Tom Rothamel 34f0157abd Fix the path to the renpy executable. 2022-01-11 21:51:08 -05:00
Tom Rothamel 3acf0a6f6c Remove duplicate raise. 2022-01-11 21:33:17 -05:00
Tom Rothamel dc10380933 Explicitly decode as utf-8. 2022-01-11 21:29:19 -05:00
Tom Rothamel be82a6a9b0 Merge pull request #3231 from Gouvernathor/patch-7
Type hotfix for gl2 model management
2022-01-11 21:21:02 -05:00
Gouvernathor ee1b2235b1 Type hotfix 2022-01-12 02:40:33 +01:00
Tom Rothamel aab2fb78af Use the current python for add. 2022-01-10 22:08:27 -05:00
Tom Rothamel ec2c5a0f1b py3: Get the updater working with Python 3. 2022-01-10 22:04:01 -05:00
Tom Rothamel af4af57d49 pyi: Triage type issues. 2022-01-10 22:03:15 -05:00
Tom Rothamel f376e1d15c Check in vscode project. 2022-01-10 00:13:11 -05:00
Tom Rothamel 88fa289014 Documents, update, and removes obsolete scripts. 2022-01-09 23:59:13 -05:00
Tom Rothamel d1c154f410 Remove obsolete files. 2022-01-09 23:33:13 -05:00
Tom Rothamel 2a73b6852c Update .gitignore. 2022-01-09 23:29:01 -05:00
Tom Rothamel f4d66acac1 Fix issue with the rebuild parameter of gui.TogglePreference. 2022-01-09 21:52:25 -05:00
Tom Rothamel f0bea3ce06 Merge pull request #3227 from Gouvernathor/patch-7
Doc fixes
2022-01-09 13:01:50 -05:00
Gouvernathor 084be9380b Merge branch 'master' into patch-7 2022-01-09 17:20:04 +01:00
Tom Rothamel ea11b1e6ed Remove documentation about the obsolete style inspector.
Fixes #3226.
2022-01-09 11:18:29 -05:00
Tom Rothamel 92aa4da107 Fix various problems with Python2. 2022-01-09 10:03:54 -05:00
Gouvernathor a7c9cc85f6 Merge branch 'master' into patch-9 2022-01-09 15:25:21 +01:00
Tom Rothamel ba01690d33 Replace the embedded copy of six with imports. 2022-01-08 22:50:36 -05:00
Tom Rothamel 384177af05 Fix an issue with ui.screen_id, which probably never worked. 2022-01-08 22:44:34 -05:00
Tom Rothamel 92b47212c8 pyi: Finish triaging type errors. 2022-01-08 22:16:38 -05:00
Tom Rothamel 152600e8f2 pyi: Triage more type errors. 2022-01-08 20:31:01 -05:00
Tom Rothamel f10c918b2a pyi: More triage of type errors. 2022-01-08 20:11:59 -05:00
Gouvernathor f4c0a6974c Allow Transform-defined transforms to take strings
fix the first point of #2102
2022-01-09 00:29:43 +01:00
Gouvernathor ea28f8d7c0 Update developer_tools.rst
fix #3226, follow dcd829931c
2022-01-08 22:46:04 +01:00
Tom Rothamel c5a4a0cbdb pyi: Triage more type issues. 2022-01-08 01:06:24 -05:00
Tom Rothamel 1ef65ad182 pyi: Triage more type issues. 2022-01-08 00:45:15 -05:00
Tom Rothamel d3e8e10438 pyi: Triage more type issues. 2022-01-08 00:38:48 -05:00
Tom Rothamel a0e8f9884d pyi: Fix issue in Texture._in_current_store. 2022-01-07 23:46:12 -05:00
Tom Rothamel 6f107ab67b pyi: Triage more type errors. 2022-01-07 23:41:48 -05:00
Tom Rothamel c920246777 pyi: More type error triage. 2022-01-07 23:27:08 -05:00
Tom Rothamel e24ddfef6f pyi: More typing. 2022-01-07 22:14:48 -05:00
Tom Rothamel d63cc4b143 pyi: Generate more types. 2022-01-07 21:44:48 -05:00
Tom Rothamel bb5bb450b8 rpi: Generate for all renpy and pygame_sdl2 modules. 2022-01-07 20:07:11 -05:00
Gouvernathor c91ad581e1 Make the environ variable override the check 2022-01-07 18:16:20 +01:00
Gouvernathor 867fd068f5 Include Atom.edit.py in main distrib
This may not work because of the line above.
2022-01-07 18:14:32 +01:00
Gouvernathor 72481dc43e load/save fixes
Fix 1 : all four dump methods should use the same protocol, so all should use renpy.compat.pickle in any case.
Fix 2 : use the preferred protocol instead of the local highest
Fix 3 : partially fix the py2-py3 compatibility error
2022-01-07 16:45:06 +01:00
Gouvernathor 8b44472ba7 Use the recommanded pickle protocol
in this context the name pickle resolves to renpy.compat.pickle
2022-01-07 16:41:14 +01:00
Gouvernathor 7f3c93802f Add the pickle protocol to actually use
Protocol 2 is renpy7's pickle.HIGHEST_PROTOCOL (which equals cPickle.HIGHEST_PROTOCOL)
2022-01-07 16:40:09 +01:00
Tom Rothamel 765099ca48 Merge pull request #3221 from uyjulian/fribidi_stringize_err
fribidi: use error preprocessor directive correctly
2022-01-07 02:47:20 -05:00
Tom Rothamel 7c88459a29 Handle docstrings that have a signature embedded.
These are produced by cython.
2022-01-07 01:34:16 -05:00
Tom Rothamel baa5608ec8 Add a script to generate .pyi files from modules.
.pyi files contain type stubs for functions defined in cython,
which will reduce spurious type errors and make the real ones
more prominent.
2022-01-07 00:47:48 -05:00
Tom Rothamel 2f9aa44d96 Check in the used pyproject.toml. 2022-01-06 22:56:51 -05:00
uyjulian 2b1307db3e fribidi: use error preprocessor directive correctly
Cherry-picked from https://github.com/fribidi/fribidi/commit/f20b6480b9cd46dae8d82a6f95d9c53558fcfd20
2022-01-06 21:41:06 -06:00
uyjulian df53024556 ffmedia: only memset when using posix_memalign
SDL_calloc already sets values to 0
2022-01-06 21:20:20 -06:00
uyjulian 2b9f6038f7 ffmedia: when using posix_memalign, use free to free instead of SDL_free
Ensures that the block is passed to the correct memory allocator
2022-01-06 21:18:58 -06:00
Tom Rothamel 5adb96543f Enable binding in cython.
This makes it possible to introspect the argument signatures of
functions defined in cython.
2022-01-05 21:43:01 -05:00
raspberry-soft 96baa6720e Merge pull request #1 from raspberry-soft/raspberry-soft-patch-1
Replace config.default_tag_name with config.default_tag_layer in docs
2022-01-04 00:44:38 -05:00
raspberry-soft e58d33d65d Update config.rst 2022-01-04 00:37:27 -05:00
Tom Rothamel f8869d0981 Remove now-unnecessary line.
Per https://github.com/renpy/renpy/commit/69ca7cc44c19ca493f6776a1934e1348f5f5de02#r62826370 .
2022-01-03 20:05:50 -05:00
Gouvernathor 6c371b4a2a Merge branch 'master' into patch-9 2022-01-03 10:39:10 +01:00
Tom Rothamel 33be897a08 Move to importing just renpy in renpy.display. 2022-01-03 01:10:34 -05:00
Tom Rothamel a4be1f9a88 Triage type warnings for renpy.test, renpy.text, and renpy.translation. 2022-01-03 00:58:30 -05:00
Tom Rothamel 339ca80ffc Triage type warnings for renpy.compat and renpy.sl2. 2022-01-03 00:29:57 -05:00
Tom Rothamel 69ca7cc44c Fix type warnings in rnepy module.
From renpy.exports to renpy.webloader.
2022-01-02 23:37:28 -05:00
Tom Rothamel 6f0f1e00b1 pyright: Fix type warnings, renpy.add_from to renpy.execution. 2022-01-02 20:14:25 -05:00
Tom Rothamel fe5ee05388 Make the renpy.compat import use an explicit list of names.
This helps analysis quite a bit, as it's clear where those names
are coming from.
2022-01-02 17:11:16 -05:00
Tom Rothamel 2763e05105 Add import hinting for pylance/vscode.
These non-functional imports help pylance analyze Ren'Py,
reducing the number of errors seen.
2022-01-02 15:11:23 -05:00
Tom Rothamel 02941956ec Remove non-working code used by obsolete build systems. 2022-01-02 15:10:48 -05:00
Tom Rothamel c8a4cb8794 Update copyright for 2022. 2022-01-01 12:28:58 -05:00
Tom Rothamel 0ef9084d4c py3: Fix bytes/str issue in archive headers. 2022-01-01 11:42:20 -05:00
Tom Rothamel c66c5fc3ea Use a patch to select the right Ren'Py executable after and update.
This is caused by the change in lib/ subdirectory names in 7.4 and 7.5,
and should lead to seamless restarts in both cases.
2022-01-01 01:17:44 -05:00
Tom Rothamel aa487511f9 Adjust the Ren'Py patterns to match the new lib/ layout.
Fixes #3208.
2022-01-01 00:18:20 -05:00
Tom Rothamel 98e887617f Merge pull request #3196 from Andykl/fix-save-rename
Delete temporary renaming file if it exists
2021-12-31 16:02:01 -05:00
Tom Rothamel 8f79f7761c py3: Fix .pyc handling when packaging lib. 2021-12-30 18:12:26 -05:00
Tom Rothamel ab0353f73f py2: Patch TextIOWrapper to allow utf-8 strings to be written.
This is intended to support modules, like json, that write out
bytes on py2 and unicode on py3.
2021-12-30 09:56:16 -05:00
Tom Rothamel 20892c59c7 py3: Get distributing Ren'Py working. 2021-12-30 03:36:54 -05:00
Tom Rothamel 8771e1cdab py3: Work on the build process. 2021-12-30 02:50:29 -05:00
Gouvernathor 63c8229f13 Update transforms.rst 2021-12-29 16:21:02 +01:00
Tom Rothamel 54cb6a38f9 Fix import. 2021-12-29 09:56:39 -05:00
Tom Rothamel edb407157c py3: Update the distribute script to work under Python 3. 2021-12-29 00:10:21 -05:00
Tom Rothamel 416575b6c5 py3: Get documentation building under py3. 2021-12-28 23:40:51 -05:00
Tom Rothamel 0bbb896950 doc: Fix duplication issue. 2021-12-28 23:40:23 -05:00
Gouvernathor 07c9e23c23 Merge branch 'master' into patch-2 2021-12-29 05:37:33 +01:00
Gouvernathor 1ef6104cb6 Merge branch 'master' into patch-9 2021-12-29 05:35:04 +01:00
Tom Rothamel 3ac7dbfcab Merge pull request #3176 from Gouvernathor/patch-7
Some pylint and py3 preparation
2021-12-28 21:25:45 -05:00
Tom Rothamel 5c0fcc082f py3: Fix dmgcheck. 2021-12-28 00:14:02 -05:00
Gouvernathor 59cca33d34 Update changelog.rst 2021-12-28 02:52:04 +01:00
Gouvernathor f0f4c52d86 Update incompatible.rst 2021-12-28 02:50:47 +01:00
Gouvernathor 684c3b5fd1 Update changelog.rst 2021-12-28 02:46:53 +01:00
Asriel Senna 944a0eb9f0 add the keyword to the parser 2021-12-28 02:36:38 +01:00
Asriel Senna 4284913f11 add and compat the config variable 2021-12-28 02:33:48 +01:00
Gouvernathor d90efe0479 Update viewport.py 2021-12-28 02:30:37 +01:00
Gouvernathor 8dc743e75b Update layout.py 2021-12-28 02:00:41 +01:00
Gouvernathor 1818aa18f7 Move overfull check in the add method
fix #2795
2021-12-27 16:41:55 +01:00
Tom Rothamel 7ca64c237a py3: Access the environment using strings.
This is the only way to access the environment on py3/windows,
as bytes aren't supported there.
2021-12-24 01:20:26 -05:00
Andy_kl eae8305438 Rename saves using safe_rename 2021-12-23 06:03:11 +02:00
LaUwUrence 554017885b Removed changing self.screen and self._layers 2021-12-23 07:51:29 +04:00
Tom Rothamel 77bf108e01 Merge branch 'master' of github.com:renpy/renpy 2021-12-22 22:42:25 -05:00
Andy_kl e2f990e4aa Delete temporary renaming file if it exists 2021-12-23 05:20:44 +02:00
LaUwUrence b07e4e9c55 Update renpy/common/00action_control.rpy
Use layer from the current screen

Co-authored-by: Mal Graty <mal.graty@googlemail.com>
2021-12-23 06:10:01 +04:00
LaUwUrence f3dc9b7612 Hide() can hide current screen 2021-12-23 06:00:47 +04:00
Tom Rothamel 38a71e4b75 Merge pull request #3195 from Gouvernathor/patch-10
Update french translations
2021-12-22 20:49:05 -05:00
Gouvernathor 04e0de699e Update launcher.rpy 2021-12-23 02:48:08 +01:00
LaUwUrence 697a026ee7 Merge pull request #1 from via-my/via-my-patch-1
Hide self screen action
2021-12-23 05:34:36 +04:00
LaUwUrence 1c76508f0d Hide self screen action
What about adding an easier way to hide current screen? This is really efficient for projects that use a lot of them.
2021-12-23 05:28:45 +04:00
Mal Graty 14a8d5e6fd Rename default attribute callback and add fallback
- Rename config var to make clear it contains callbacks.
- Add support for a generic fallback callback.
- Emphasise that attribute callbacks must not be influenced by state.
2021-12-22 01:30:23 +00:00
Mal Graty b5e1d439ad Add config.default_attributes callback dictionary
This is to support images having a "weak" set of default attributes
applied to them when they are first shown, allowing for more complex use
cases with a minimum of boilerplate in scripts.

While similar in nature to the existing config.adjust_attributes, this
feature only applies to images when they are first shown, and is "weak"
in the sense that it may not countermand attributes from the script.
2021-12-21 23:47:05 +00:00
Andy_kl 6d7547bdc2 Distinguish renpy_base correctly even if it is inside ofir 2021-12-21 21:54:19 +02:00
Asriel Senna c5ff8efaa3 fix wrong copypaste 2021-12-20 04:14:38 +01:00
Asriel Senna e0af1fcc11 remove bad example in the doc 2021-12-20 04:03:17 +01:00
Asriel Senna fc2f18f9d3 remove the other bare excepts 2021-12-20 04:03:01 +01:00
Asriel Senna 1cd8db7b4b remove bare excepts from renpy directory 2021-12-20 03:53:18 +01:00
Tom Rothamel 24d5a3247c py3: Changes to distribute to move to py-specific platform directories.
That is, so that py2-windows-x86_64 and py3-windows-x86_64 can be
build alongside each other. This is a step in building Ren'Py 8,
and enables Ren'Py 7 to be distributed while Ren'Py 8 is worked on.
2021-12-19 21:18:21 -05:00
kyouryuukunn 0817d04ab8 update doc about default config.empty_window 2021-12-18 13:43:04 +09:00
kyouryuukunn 2e31cd29b6 _default_empty_window predicts the next character kind 2021-12-18 13:22:36 +09:00
Tom Rothamel 82d0211e88 Merge pull request #3186 from Gouvernathor/patch-9
Reflect color's keyword-only behavior in Fade
2021-12-17 13:19:58 -05:00
Gouvernathor e401912daa Reflect color's keyword-only behavior in Fade 2021-12-17 19:18:44 +01:00
Tom Rothamel 16c05efd47 Remove extra prints when generating cython. 2021-12-17 08:54:22 -05:00
Tom Rothamel 04cfc0f39e py3: Changes to get Ren'Py to compile and run in 3str mode. 2021-12-16 23:03:28 -05:00
Tom Rothamel 2bda633346 py3: Generate cython in 3str mode. 2021-12-16 22:55:31 -05:00
Tom Rothamel 1875599e52 Improve cython generation.
* Stop generation if an error occurs.
* Allow generation to happen in a single thread.
2021-12-16 22:49:30 -05:00
Tom Rothamel af5b5293b0 Fix regression in renpy.music.playable.
Introduced by 6c2d2eca77.
2021-12-16 00:35:24 -05:00
kyouryuukunn 902c8be6e1 Merge pull request #3178 from kyouryuukunn/Japanese_translation_211213
update Japanese Translation
2021-12-13 08:35:48 +09:00
kyouryuukunn c10f8381cd update Tutorial Japanese Translation 2021-12-13 08:33:26 +09:00
kyouryuukunn da60aaa780 update Japanese Translation 2021-12-13 08:25:51 +09:00
Gouvernathor fa1a15c6b7 Add the create_store methods to the Namespaces 2021-12-12 03:59:18 +01:00
Gouvernathor cc860bda9c Call the create_store method when needed 2021-12-12 03:57:33 +01:00
Gouvernathor 5d7841adae Fix compat not exporting compat_open with * 2021-12-12 03:44:23 +01:00
Gouvernathor 681b9d056c Remove useless global statements 2021-12-12 02:54:23 +01:00
Gouvernathor 95429027f9 Useless transparent override 2021-12-12 02:52:18 +01:00
Gouvernathor 86b3c82650 Remove useless else clause for breakless loop 2021-12-12 02:46:56 +01:00
Gouvernathor 98dd7d6472 Remove useless try/except and if clause 2021-12-12 02:40:50 +01:00
Gouvernathor 8f90c6cacc Simplify imports 2021-12-12 02:39:44 +01:00
Gouvernathor f5da5b84fa Remove unnecessary lambda 2021-12-12 02:38:31 +01:00
Gouvernathor 64456bdd79 Fix percent-interpolation 2021-12-12 02:29:19 +01:00
Gouvernathor 69ffca7f0f Remove pass statement and fix interpolation 2021-12-12 02:27:02 +01:00
Gouvernathor 2ff989a71c Remove useless transparent overrides 2021-12-12 02:24:36 +01:00
Gouvernathor f6b9564795 Compat the imp module with importlib 2021-12-12 02:22:36 +01:00
Gouvernathor 5b913d5b09 Remove reimports and unused exception 2021-12-12 02:15:41 +01:00
Gouvernathor cad8afa885 Remove useless global statement 2021-12-12 02:12:32 +01:00
Gouvernathor 47c1ca6911 Remove reimport 2021-12-12 02:08:50 +01:00
Gouvernathor 53d8f98096 Remove unused variable 2021-12-12 02:06:39 +01:00
Gouvernathor 3244528c59 Remove useless reimport and pass statement 2021-12-12 02:01:28 +01:00
Gouvernathor 9fb0fab4f9 Remove useless global statement 2021-12-12 01:56:23 +01:00
Gouvernathor 1865bb2ed6 Useless try/except 2021-12-12 01:55:13 +01:00
Gouvernathor 2251d67c78 Useless else clause
The for loop doesn't contain a break or return statement
2021-12-12 01:52:58 +01:00
Gouvernathor 06b210b813 Remove useless lambda and global statement 2021-12-12 01:46:49 +01:00
Gouvernathor 227dca2242 Remove useless import 2021-12-12 01:43:41 +01:00
Gouvernathor 6a870d5132 Useless global statement
The variable is never either read nor written to
2021-12-12 01:29:31 +01:00
Gouvernathor 83967a5706 Fix unnecessary shadowing 2021-12-11 23:37:02 +01:00
Gouvernathor 1d78f2f5fe Update json.load signature
See https://docs.python.org/3/library/json.html#json.load and https://docs.python.org/2/library/json.html#json.load
The previous "encoding" argument is now keyword-only (if at all supported, but it seems so).
Please check this.
2021-12-11 23:32:27 +01:00
Gouvernathor a08e415550 Cleanup list's wrapper attribute
It's cleaned up in RevertableSet but not in RevertableList.
Making a cleaner code by getting the "wrapper" function out of the class definitions could be done, but pain to test/check, and this works.
2021-12-11 23:09:48 +01:00
Gouvernathor 2a2e83d704 Fix invalid raise statement
Maybe this is valid in py2, but in py3 it's not
2021-12-11 22:43:48 +01:00
Gouvernathor bba4aed1a6 Document define/default store-creating behavior 2021-12-11 02:51:29 +01:00
Gouvernathor dc29fe3dd0 remove wrong comment 2021-12-10 13:25:15 +01:00
Gouvernathor 4a474f1712 Disable useless line breaks 2021-12-10 12:04:11 +01:00
Gouvernathor 3684070af8 Add character stats in lint 2021-12-10 11:39:50 +01:00
Tom Rothamel 62d75bdcdd py3: Use Ren'Py functions to access examples.
This standardizes the encodings.
2021-12-08 20:00:23 -05:00
Tom Rothamel 3b8ca95d27 py3: Fix the encoding of hashes. 2021-12-08 20:00:10 -05:00
Tom Rothamel b8a950f151 Generate cython in parallel.
The goal is to make developing a bit faster.
2021-12-07 22:48:17 -05:00
Tom Rothamel e0125e009a py3, gl2: Fix encoding issues. 2021-12-06 23:13:11 -05:00
Tom Rothamel 84c44951d2 py3: Fix a problem with the changes to fsencode. 2021-12-06 23:12:17 -05:00
Tom Rothamel 014d0e3716 py3: Fix encoding of multipersistent files. 2021-12-06 21:50:38 -05:00
Tom Rothamel 1645fa20f2 Change to support newer versions of cython. 2021-12-06 20:07:00 -05:00
Tom Rothamel 18a5ebfd47 Fixes to stopping paused music, and better document music.get_duration.
Per #3158.
2021-12-05 16:34:47 -05:00
Tom Rothamel 799c35beac Unpause when playing/stopping music.
Fixes #3156.
2021-12-04 19:52:44 -05:00
Tom Rothamel aa2c2a50d5 Merge pull request #3084 from Andykl/menu-say-finish
Allow additional say clauses in menu say statement
2021-12-04 19:01:41 -05:00
Tom Rothamel 8654f8eef4 Add the clip transform property.
This clips the child down to size.

Fixes #3148.
2021-12-03 22:37:06 -05:00
Tom Rothamel daa5474713 Merge pull request #3151 from loliconazter/patch-17
Update error.rpy
2021-12-03 21:46:08 -05:00
Tom Rothamel 9a160ba626 Merge pull request #3152 from loliconazter/patch-18
Update screens.rpy
2021-12-03 21:45:58 -05:00
Tom Rothamel f72940bc5f Merge pull request #3153 from shelling4d/master
update Chinese translator file
2021-12-03 21:45:48 -05:00
loliconazter 561971a25a Update screens.rpy
fixing typo
2021-12-03 13:31:25 +07:00
loliconazter 123cc9a745 Update error.rpy
fixing typo
2021-12-03 13:24:54 +07:00
Tom Rothamel d6401abafd Doc fixes. 2021-12-02 02:13:18 -05:00
Tom Rothamel 7c41ea4d87 Flush the render cache whenever a file is flushed.
This means that if the file is used in a way that is not
subject to normal invalidation, it's still flushed.
2021-12-01 01:41:19 -05:00
Tom Rothamel 5664887809 Update changelog. 2021-11-30 18:18:47 -05:00
Tom Rothamel 9ad9ebe28b Make caret_blink available in screen language.
Fixes #3150.
2021-11-30 18:08:29 -05:00
Tom Rothamel f83f3db811 Update piglatin translation. 2021-11-29 22:47:56 -05:00
Tom Rothamel 60c056c6aa Update an incorrect id in the tutorial, to conform with #3077. 2021-11-29 22:41:01 -05:00
Tom Rothamel 0aba1e935d Iterate over a say block to see if it has a translation.
This is intended to deal with an issue where there might be
a with clause as part of the say statement, etc.
2021-11-29 22:24:17 -05:00
Tom Rothamel f0b94e5dcb Merge pull request #3077 from Andykl/id-duplicate
Report translate nodes with duplicate id clause
2021-11-29 19:42:59 -05:00
Tom Rothamel bd2edfba06 Merge pull request #3078 from Andykl/id-alternative
Provide alternate identifier to translates with id clause
2021-11-29 19:42:44 -05:00
Tom Rothamel 4a017f6991 Merge pull request #3087 from Gouvernathor/patch-3
Fix repr for Displayable subclasses
2021-11-29 19:41:54 -05:00
Tom Rothamel bd92709270 Merge pull request #3101 from Andykl/del-is_opaque
Some clean up of Render
2021-11-29 19:41:28 -05:00
Tom Rothamel 06fb034f22 Run fix_translations. 2021-11-28 15:53:36 -05:00
Tom Rothamel b4f03ec7b5 Update changelog. 2021-11-28 15:52:20 -05:00
Tom Rothamel 0aab1c99b8 Always run an unfocused handler when a displayable remains shown.
Ren'Py will now always run an `unhovered` action when a displayable (or its
replacement) remains shown, and the focus changes. Previously, the unhovered
action would not run when the loss of focus was caused by showing a second
screen.

This traces back to LSF PM 295318 (and the rest of that thread.)
2021-11-28 15:30:41 -05:00
Tom Rothamel f9bc87e1df Merge pull request #3147 from loliconazter/patch-15
Update common.rpy
2021-11-27 19:24:11 -05:00
Tom Rothamel dea7e9223a Merge pull request #3146 from loliconazter/patch-14
Update developer.rpy
2021-11-27 19:24:02 -05:00
Tom Rothamel b1dc46ce0e Merge pull request #3145 from loliconazter/patch-13
Update common.rpy
2021-11-27 19:23:53 -05:00
Tom Rothamel ef07f11f3d Merge pull request #3144 from loliconazter/patch-12
Update launcher.rpy
2021-11-27 19:23:45 -05:00
loliconazter 2d07234a95 Update common.rpy 2021-11-28 00:10:05 +07:00
loliconazter 3e520b1c62 Update developer.rpy 2021-11-28 00:08:41 +07:00
loliconazter 381bf0388e Update common.rpy 2021-11-28 00:01:30 +07:00
loliconazter 7c0ce13198 Update launcher.rpy
fixing some translation and some translation "renpyweb" section
2021-11-27 23:55:58 +07:00
Alex 58c4e8760a Update .gitignore
add .idea folder
2021-11-27 19:23:37 +08:00
Alex 1df4786e20 Update launcher.rpy
Add translation
2021-11-26 23:53:19 +08:00
Tom Rothamel a4ae9e4b31 Prevent pausebehavior from timing out with a modal above. 2021-11-26 00:21:12 -05:00
Tom Rothamel d3657005d8 Remove use of renpy.angle.
It wasn't used for much anymore, now that angle support goes
through uguu.
2021-11-25 22:00:46 -05:00
Tom Rothamel fac71d8cfa Merge pull request #3139 from kigyo/patch-1
Update German translation in common.rpy
2021-11-25 09:44:01 -05:00
Tom Rothamel d75a43f74a live2d: If a curve ends early, repeat the last segement.
This prevents rounding errors or bad curves from resetting portions
of a motion.
2021-11-24 17:55:00 -05:00
Tom Rothamel fbbe4f25bc Do not trigger timers on modal TIMEEVENTs. 2021-11-24 12:13:01 -05:00
Tom Rothamel 30b851920c Continue processing modal timeevents. 2021-11-23 23:20:26 -05:00
Tom Rothamel 88ee8b42af Ensure replaces is of the correct type.
Fixes #3138.
2021-11-23 22:54:37 -05:00
Tom Rothamel 6c5e6c4858 Separate out invalidation and deallocation of renders.
Fixes #3135, which was caused by invalidation at the start of a
screen.
2021-11-23 22:34:38 -05:00
kigyo 643d531700 Update German translation in common.rpy
I noticed many of the "German" translations were left in English. I tried to fix as many as I could, but a few I was still unsure about. ("Clipboard voicing", for example.)
In general, these older translation files seem to be missing strings from the renderer (shift+G) screen.
2021-11-23 20:22:31 +01:00
Tom Rothamel 09e47f682c Merge pull request #3137 from loliconazter/patch-6
Update launcher.rpy
2021-11-22 20:31:23 -05:00
loliconazter 81713fd485 Update launcher.rpy 2021-11-22 17:21:23 +07:00
Tom Rothamel efc9585709 sl2: Re-fix scopes.
This reintroduces some of the reverted fixes, but at the same time,
avoids th problems those fixes caused by storing the scope given
to the screen in the main context, meaning that it's no longer
required that scope remain the same object as the game changes.

(In practice, there were enough things that could changes the main
scope that it was hard to keep object identity stable.)
2021-11-21 21:14:55 -05:00
Tom Rothamel dbd5f777be Revert "sl2: Reuse the scope object in use w/o parameters."
This reverts commit 3f7e65ae84.
2021-11-21 12:12:05 -05:00
Tom Rothamel 3cfa37d063 Revert "Remove debug print."
This reverts commit 315451b1c5.
2021-11-21 12:11:56 -05:00
Tom Rothamel 07862d4e01 Revert "sl2: Store the scope as part of the screen cache."
This reverts commit 0a55f8a9ee.
2021-11-21 12:11:47 -05:00
Tom Rothamel 8bc8492bf7 Revert "Ensure that current_screen.scope is the scope that the screen is executing in."
This reverts commit 095e94cfff.
2021-11-21 00:30:42 -05:00
Tom Rothamel 095e94cfff Ensure that current_screen.scope is the scope that the screen is executing in.
Fixes parts of #3131's third comment.
2021-11-20 23:45:35 -05:00
Tom Rothamel e5b35f4128 Synchro start should only unpause if a channel is not playing.
This keeps unpause_all from starting channels that it should not.

Fixes #3136.
2021-11-20 23:37:16 -05:00
Tom Rothamel 7be40eca2b Upgrade _seen_audio on load.
Fixes #3134.
2021-11-20 18:56:03 -05:00
Tom Rothamel 2f43ba6f59 Store the string giving the filename into _seen_audio, when AudioData is involved.
Per #3134.
2021-11-20 17:51:19 -05:00
Tom Rothamel c5fe77dd5c Set the renpy.export.platform variables properly. 2021-11-19 01:08:39 -05:00
Tom Rothamel 38a19308e3 Use the variant to set the rollback side.
renpy.exports.platform is set too late to be useful.
2021-11-19 00:54:42 -05:00
Tom Rothamel e846712e0d Make the emulated keyboard transparent.
This makes it possible to see the console in the emulator.
2021-11-19 00:43:58 -05:00
Tom Rothamel 719afc7095 Fix a problem with menus and config.log.
Fixes #3133.
2021-11-18 23:00:32 -05:00
Tom Rothamel 91cc04ec98 Update the included games to use gui.variant. 2021-11-18 00:16:53 -05:00
Tom Rothamel 40ea46a938 Add gui.variant.
This is a decorator that calls a function when a variant is
active, and then again each time the gui is rebuilt.

Addresses the second issue in #3130.
2021-11-18 00:12:26 -05:00
Tom Rothamel 1098d03a04 Use the emulated mobile variable for the rollback side preference.
This matches the rollback side the emulator uses.
2021-11-17 22:57:02 -05:00
Tom Rothamel 0a55f8a9ee sl2: Store the scope as part of the screen cache.
This means that the same scope objecty can be reused, which
is necessary for the new uses_scope work.

Per #3131.
2021-11-17 22:47:04 -05:00
Tom Rothamel fc05b14bc2 gl2: Add u_viewport as a uniform.
That contains the size and coordinates fo the current viewport.
2021-11-17 00:06:44 -05:00
Tom Rothamel d6ddf926d7 gl2: Set some uniforms on demand. 2021-11-16 23:15:36 -05:00
Tom Rothamel 90ddea6f47 Add RENPY_PATH_TO_SAVES, document RENPY_MULTIPERSISTENT.
In both cases, system-level save paths.

Fixes #3092.
2021-11-16 22:14:09 -05:00
Tom Rothamel 3428d4a5d4 web: Check for progressive downloads once per frame.
This is up from once per interaction, and only when Ren'Py is idle.
This allows progressive downloads to be loaded in the middle of
an interaction.

Fixes #3125.
2021-11-15 21:50:51 -05:00
Tom Rothamel 939970cc2f live2d: Always fade when switching from one motion to another. 2021-11-14 23:38:22 -05:00
Tom Rothamel 276696ae27 Remove a debug print. 2021-11-14 14:38:06 -05:00
Tom Rothamel 6c63407a93 live2d: Remove debug print. 2021-11-14 02:20:40 -05:00
Tom Rothamel abba0ec4b3 live2d: Do not prevent seamless motions from looping. 2021-11-14 02:18:45 -05:00
Tom Rothamel a14a1816fb Update the changelong. 2021-11-14 02:03:52 -05:00
Tom Rothamel 67abe7f2cf live2d: Move to using saturation arithmetic for models.
This is an attempt to better implement the live2d fading semantics,
found at:

https://docs.live2d.com/cubism-editor-manual/about-fade/?locale=en_us

The idea is that if both motions have a parameter at the same
value, it shouldn't change, so that if we have .75 of A and .25
from B, the result should be .25 + .75 rather than
.75 * (1 - .25) + .25, which has the value of .8125.
2021-11-14 01:25:42 -05:00
Tom Rothamel f2dd84e31b live2d: When a motion is fading out, do not loop it or replace it with the next motion. 2021-11-13 22:49:53 -05:00
Tom Rothamel 2106c13f1f Fix typo.
Fixes #3127.
2021-11-12 19:27:18 -05:00
Tom Rothamel 9e3c66815e Store the layer_at/camera lists with layers.
And reuse them when creating the layer in the old store. This
allows the old layer_at lists to be used in a layer's _in_current_store
method.

Fixes #3126.
2021-11-11 01:41:28 -05:00
Tom Rothamel 348b87d09b gl2: Use GL_LEQUALS rather than GL_LESS when gl_depth is true.
This reduces astonishment by making the behavior equal to what
Ren'Py would do normally.

Per p547953.

Not compatted, because gl_depth is probably fairly new when it
comes to use, and it's probably best to treat the behavior up
to now as undefined.
2021-11-10 18:39:15 -05:00
Tom Rothamel 315451b1c5 Remove debug print. 2021-11-10 00:38:14 -05:00
Tom Rothamel 3f7e65ae84 sl2: Reuse the scope object in use w/o parameters.
This ensures the object keeps the same identity, which means
that use without parameters works with the changes to uses_scope
in 43403e787e .

Fixes #195.
2021-11-09 23:00:30 -05:00
Tom Rothamel beb55e8c56 Changelog more of the things. 2021-11-08 21:25:10 -05:00
Tom Rothamel ee3b5f266d Update sponsors. 2021-11-08 19:23:30 -05:00
Tom Rothamel ee58f9b133 Changelog for 7.4.11. 2021-11-07 17:11:53 -05:00
Tom Rothamel 09cd83bb7d Fix the creation of 4-element matrices.
Fixes #3121.
2021-11-06 15:32:32 -04:00
Tom Rothamel 2cc1dc73cf live2d: Apply seamless mode whenever a motion is repeated. 2021-11-06 15:24:12 -04:00
Tom Rothamel 0c98c9871d Changelog for ChromeOS. 2021-11-05 23:03:59 -04:00
Tom Rothamel 0903f2daf4 Add a chromeos variant when running on ChromeOS/Android. 2021-11-05 23:01:03 -04:00
Tom Rothamel b457159e25 Ensure the right types in ContrastMatrix.
HT Gouvernathor.
2021-11-03 23:06:49 -04:00
Tom Rothamel 43403e787e sl2: Properly handle uses_scope with transcludes.
This fixes p547534, which has a Text that uses the scope not being
updated when it's inside a constant transclude. This makes the
uses_scope lists created by displayables, only, and stores the
scope in the uses_scope list to make sure the correct scope
is used.
2021-11-03 22:50:56 -04:00
Tom Rothamel cafe92fbf8 Remove debug print. 2021-11-03 19:45:13 -04:00
Tom Rothamel bd473c8e04 Merge pull request #3108 from Gouvernathor/patch-4
Force refresh update state after updating
2021-11-02 22:13:13 -04:00
Tom Rothamel 8b6d309b3e Merge pull request #3111 from mal/contrast-matrix
Fix and expose ContrastMatrix
2021-11-02 22:12:30 -04:00
Tom Rothamel b7e53ccf74 Enable config.mouse_focus_clickthrough in the launcher. 2021-11-01 22:15:24 -04:00
Tom Rothamel 0192c3bfdb Add config.mouse_focus_clickthrough.
This causes mouse clicks that focus the window to be further processed.

Fixes #3112.
2021-11-01 22:15:24 -04:00
Tom Rothamel 61279c8641 Merge pull request #3117 from Gouvernathor/patch-5
Patch config.nvl_page_ctc not being a displayable, fix #3116
2021-11-01 18:26:31 -04:00
Gouvernathor 361e4c9cd3 Patch config.nvl_page_ctc not being a displayable 2021-11-01 22:30:42 +01:00
Tom Rothamel 9c0e7148de Limit when a Button propagates transform state.
It now only does it through a reference when it is a reference
with the same name.

This is a compromise behavior, at best - at some point, we need
to switch to a persistent dag rather than what we have now.

Per p547535 on LSF, and also takes into account #2864.
2021-10-30 18:39:43 -04:00
Mal Graty abb18fec30 Use single matrix in ContrastMatrix 2021-10-30 17:50:19 +01:00
Mal Graty 23bacd631b Fix and expose ContrastMatrix 2021-10-30 17:36:20 +01:00
Tom Rothamel 4be3dc1f14 Handle pad/joy events after stripping modifiers.
This fixes #3105, by removing the repeat modifier so that the
test for pad or joy events works properly.
2021-10-29 23:05:41 -04:00
Gouvernathor 3d8302c1ab Force refresh update state after updating 2021-10-29 08:56:08 +02:00
Andy_kl aa1bf922fd Do not try to display the interface before the script has finished loading
This fix #3107
2021-10-29 03:09:11 +02:00
Tom Rothamel 8263f2a36e Split config.debug_prediction out of config.debug_image_cache.
This breaks out the information that goes into log.txt and the
console from the information that goes into image_cache.txt.
2021-10-28 18:45:59 -04:00
Tom Rothamel 83557bd118 Avoid double blit of a displayable with mesh + perspective.
Fixes #3104.
2021-10-28 02:03:33 -04:00
Tom Rothamel 3c20b02f70 Add a debug bit to the render object. 2021-10-27 22:45:36 -04:00
Tom Rothamel 79b0099219 Change slide to flatten the children in a second transform. 2021-10-26 21:44:03 -04:00
Tom Rothamel ea550160d6 Merge pull request #3103 from Neyunse/master
Removed unnecessary comment
2021-10-26 00:05:48 -04:00
Tom Rothamel c9e3ac12bc Change the default for style.drag.focus_mask to False.
This lets us be performant by default, fixes #3098.
2021-10-25 01:55:06 -04:00
Tom Rothamel 0f8610c8af Tweak the priority of compat, so it can better address styles and common. 2021-10-25 01:34:11 -04:00
Neyunse b9237991ea Update updater.rpy 2021-10-24 22:20:34 -03:00
Tom Rothamel eb2d34f1c6 Bump version. 2021-10-24 00:23:24 -04:00
Tom Rothamel c6429dfea9 Update changelog. 2021-10-23 20:51:40 -04:00
Andy_kl 29c5c7f49d Eliminate Render.draw_func 2021-10-24 01:43:19 +02:00
Andy_kl bff3a52ddd Remove missed usage of opaque 2021-10-24 01:42:36 +02:00
Andy_kl 83e78989fb Fix wrong translate usage in Polish translation 2021-10-24 01:30:41 +02:00
Andy_kl 2e9c1b6900 Update and fix Russian translation 2021-10-24 01:28:37 +02:00
Andy_kl 13789a669a Eliminate Render.is_opaque 2021-10-24 01:01:44 +02:00
Tom Rothamel 4bef795329 Fix typos in Polish translation.
Courtesy of Hoarraven.
2021-10-23 17:38:52 -04:00
Tom Rothamel 2bdc4568f0 Update changelog. 2021-10-22 00:12:09 -04:00
Tom Rothamel 78bbe1e9d1 Merge pull request #3090 from Andykl/live2d-prints
Add log_live2d_loading config variable
2021-10-22 00:08:04 -04:00
Tom Rothamel 42dc16f8b2 Do not find a mouse focus when grabbed.
Per #3097.

Since the first thing change_focus does is to ignore changes
when grabbedm there's no reason to perform an expensive
focus_at_point search that will just be ignored.
2021-10-21 23:07:18 -04:00
Tom Rothamel 755ed060d4 Reverse the order in which focus_at_point is performed.
This should improve performance, as usually the topmost
displayable is the one that should be given focus, and
so there's no need to consider others.

Per #3097.
2021-10-21 22:57:18 -04:00
Tom Rothamel 9230f72c51 Check the mouse is in a render before is_pixel_opaque. 2021-10-21 22:11:45 -04:00
Tom Rothamel fff10e047c Add some performance logging. 2021-10-21 22:05:57 -04:00
Tom Rothamel 7140b8b882 Changelog. 2021-10-19 22:06:38 -04:00
Tom Rothamel 3eb380c6e6 Improve the interaction of voice, {nw}, and {fast}.
A line of dialogue ending in {nw} will no longer wait for the
voice to end before terminating.

A line of dialogue containing {fast} will sustain the last
voice statement.
2021-10-19 21:58:36 -04:00
Tom Rothamel ac0f7f8997 Updateay iglatin-pay. 2021-10-18 00:01:18 -04:00
Tom Rothamel ae8fa297c4 Remove generated source files. 2021-10-17 22:08:14 -04:00
Tom Rothamel 7ad47bef21 Update documentation. 2021-10-17 20:09:34 -04:00
Tom Rothamel ba04c9d64d live2d: Cache renpy.has_live2d.
Per #3093.
2021-10-17 18:07:43 -04:00
Tom Rothamel 205c54513b Explictly mark Renders in the cache.
To prevent them from being cache_killed and resurrected
unnecessarily.
2021-10-16 17:03:30 -04:00
Tom Rothamel 8779386671 Merge pull request #3091 from loliconazter/patch-2
Update launcher.rpy
2021-10-16 16:04:04 -04:00
Andykl ee00ed3517 Fix grammar 2021-10-16 21:06:38 +02:00
loliconazter 51eab526cb Update launcher.rpy
add an Indonesia translation for install libraries section
2021-10-16 09:44:42 +07:00
Tom Rothamel 3c14adf0a9 Update sponsors doc. 2021-10-15 20:23:10 -04:00
Tom Rothamel 5270901c84 Update changelog. 2021-10-15 20:20:50 -04:00
Andy_kl c2d19f030b Add log_live2d_loading config variable
This makes it easier to read the log.txt when a lot of live2d is used.
2021-10-16 01:40:25 +02:00
Asriel Senna 0cdde0f911 set _repr_info to be always callable 2021-10-15 19:54:29 +02:00
Asriel Senna 95b7c21fca group function defs together 2021-10-15 19:47:49 +02:00
Andy_kl 5358870d39 Do not leak ast.Say into ast.Menu 2021-10-15 19:05:00 +02:00
Asriel Senna cc2b87d569 use join instead of str.__add__ 2021-10-15 13:56:07 +02:00
Asriel Senna 568779fb9e only add parentheses if there aren't already 2021-10-15 13:53:45 +02:00
Asriel Senna 5e095771b3 remove Text's double-substitution 2021-10-15 13:37:59 +02:00
Asriel Senna 735aefe075 add child to ATLTransform's _repr_info 2021-10-15 13:37:22 +02:00
Tom Rothamel 5bdb52b47c Avoid killing Renders that exist in the cache. 2021-10-14 22:59:44 -04:00
Tom Rothamel 1dba44b906 Do not delete children of Renders that do not reference Renders.
This fixes #3086 and fixes #3082, which were both caused by
large images being rendered; and 372d6d026e .
This would cause Renders to show up in the cache, be killed, and
lose the child textures.

What this does is to detect such renders, and avoids removing their
children.
2021-10-14 22:45:44 -04:00
Tom Rothamel 9dac0d65a4 Revert "Revert "render: Break cycles in kill_cache.""
This reverts commit 8532cf323e.
2021-10-14 22:20:28 -04:00
Tom Rothamel 1954eec19f Remove unused message. 2021-10-14 07:00:14 -04:00
Tom Rothamel 8532cf323e Revert "render: Break cycles in kill_cache."
This reverts commit 372d6d026e.

So people have something usable while I track down the problem.
2021-10-13 23:35:59 -04:00
Asriel Senna dba11ee6bd add Transform and ATLTransform _repr_info 2021-10-14 02:05:18 +02:00
Asriel Senna 1c66953180 extraneous spaces 2021-10-14 01:43:25 +02:00
Asriel Senna e284fd77c7 double-check for the right "at" to be replaced 2021-10-14 01:42:17 +02:00
Asriel Senna e7eeb0ca40 repr screen's _repr_info 2021-10-14 01:41:43 +02:00
Asriel Senna 723686aa2a revert parser edits 2021-10-14 01:40:55 +02:00
Asriel Senna ba67075dd1 replace unicode with rich info in inspector 2021-10-13 16:37:10 +02:00
Asriel Senna e2feeca0d0 move case switch to Multibox._classname 2021-10-13 16:34:05 +02:00
Asriel Senna 7c187ac130 this one has nothing to do with it, it's a type matter 2021-10-13 16:32:03 +02:00
Asriel Senna 951220bc45 use replace instead of partition 2021-10-13 15:59:46 +02:00
Asriel Senna 7fd5f920a6 use repr instead of weird stuff 2021-10-13 15:58:25 +02:00
Asriel Senna 811c004338 remove Displayable.__str__ entirely (it defaults to __repr__ anyway) 2021-10-13 15:53:45 +02:00
Asriel Senna e01dd51ab6 default value for _repr_info 2021-10-13 15:47:38 +02:00
Asriel Senna ac37ad60a3 identity test instead of equality 2021-10-13 15:46:09 +02:00
Asriel Senna 0ba7211258 remove unsafe use of str 2021-10-13 09:43:18 +02:00
Tom Rothamel 0401ea5ad5 Move the view changelog link down a line.
Updates #3081.
2021-10-12 20:17:52 -04:00
Tom Rothamel a273e2098e Merge pull request #3081 from Neyunse/master
added See change list button
2021-10-12 20:06:35 -04:00
Asriel Senna c9802c1178 remove the last remaining __unicode__ method (apart from six) 2021-10-13 00:30:35 +02:00
Asriel Senna 9be8fed0c2 exclude the subclasses (namely DragGroup) from MultiBox's special-case 2021-10-12 19:37:00 +02:00
Asriel Senna 4849e4c1ec hotfix 2021-10-12 19:21:15 +02:00
Asriel Senna 7ccb7b8fb8 fix typos 2021-10-12 16:01:31 +02:00
Asriel Senna 0261d65ca4 special-case DragGroup, as it were 2021-10-12 15:52:25 +02:00
Asriel Senna 6353f7389d last replacement (more complex) for MultiBox 2021-10-12 15:52:11 +02:00
Asriel Senna 616f6a889a replace old-style __unicode__ with new-style _repr_info 2021-10-12 15:47:37 +02:00
Asriel Senna 4693461502 new repr template for Displayable instances 2021-10-12 15:46:49 +02:00
Asriel Senna 3e41a03c30 remove superfluous __unicode__ method 2021-10-12 15:44:51 +02:00
Gouvernathor 59d3e94975 Remove Character.__unicode__
because of code and feature duplication
2021-10-12 14:10:49 +02:00
Tom Rothamel c8fca74730 Target 7.4.10 as the next release. 2021-10-11 10:24:32 -04:00
Neyunse 608ab10ae4 Merge branch 'renpy:master' into master 2021-10-10 15:58:45 -03:00
Tom Rothamel fa37aecbf9 Do not wait for audio until the last block of dialogue.
Fixes #3080.
2021-10-10 00:05:09 -04:00
Tom Rothamel bf03ddb130 bmfont: Ignore empty lines.
Fixes #3083.
2021-10-09 09:39:11 -04:00
Andy_kl c1dcc84138 Allow additional say clauses in menu say clauses 2021-10-08 23:52:22 +02:00
Tom Rothamel 26dac5d067 Bump versions. 2021-10-08 08:57:30 -04:00
Neyunse 3390347f67 added See change list button
Clicking on the button to view the list of changes will open the browser and load the Ren'Py page.
The button will only be displayed in the pre-release and release channels.
2021-10-07 23:20:28 -03:00
Tom Rothamel cbcc517294 Revert "gl2: Require GL 2.1 again."
This reverts commit 73713248bc.

Problem was solved with a reboot.
2021-10-06 19:58:41 -04:00
Tom Rothamel 73713248bc gl2: Require GL 2.1 again.
An attempt to fix a problem where many GL functions were missing.
2021-10-06 19:32:53 -04:00
Tom Rothamel 1d76c599fe Print the screen size on mobile. 2021-10-06 01:27:22 -04:00
Tom Rothamel 1bd115d97f Create directories when installing files. 2021-10-05 18:29:11 -04:00
Andy_kl b168a7f85c Provide alternate identifier to translates with id clause 2021-10-05 03:13:20 +02:00
Andy_kl d84b398ee5 Report translate nodes with duplicate id clause 2021-10-05 02:19:40 +02:00
Tom Rothamel 8a4471b440 Add credit. 2021-10-04 19:26:56 -04:00
Tom Rothamel 3946a7d733 Merge pull request #3075 from multimokia/FixScopeDel
Fix scope deletion in screen.py
2021-10-04 19:25:58 -04:00
Tom Rothamel f671520c8d Include the final CTC when laying out text.
This will help prevent strangness caused by text changing size
when the last block is shown.

Fixes #3073.
2021-10-04 19:21:43 -04:00
multimokia f830206df2 no except 2021-10-04 13:18:24 -04:00
multimokia 2653797d82 make other scope pops safe 2021-10-04 12:45:24 -04:00
multimokia 8ed9e07ab6 remove error suppression, safe dict rm, log 2021-10-04 11:56:40 -04:00
Tom Rothamel 6eb20a4422 Give the render (and not displayable) to blit in DynamicDisplayable.
Fixes #3070.
2021-10-04 10:47:44 -04:00
Tom Rothamel c24dc05329 Try to restore gl2 compatibility with gl 2.0 + EXT_framebuffer_object. 2021-10-03 23:22:12 -04:00
Tom Rothamel e435b636ba Doc: Changelog and keywords. 2021-10-02 15:18:11 -04:00
Tom Rothamel 0a536cd522 Merge pull request #3062 from Andykl/bar-released-action
Add `released` action to Bar
2021-10-02 14:48:04 -04:00
Tom Rothamel 5b0a55239c Merge pull request #3067 from Gouvernathor/patch-3
Patch doc
2021-10-02 14:47:23 -04:00
Tom Rothamel 071a6fb715 Make Context.music always a dict.
There wasn't much of a point in making it a RevertableDict, as
far as I can tell - since it's not reachable from a root, it should
never actually participate in rollback.

Fixes #3064.
2021-10-02 14:45:07 -04:00
Tom Rothamel b51ef49536 Avoid allocating audio channels that won't be used. 2021-10-02 14:41:57 -04:00
Tom Rothamel f0f05873ed Quit audio when reloading Ren'Py.
Fixes #3065.

This fixes #3065, where a channel could be assigned a different
number, and remain playing after a reload.
2021-10-02 14:19:02 -04:00
Tom Rothamel 1ab3be2101 DynamicDisplayable should create a Render.
This brings it more inline with the rest of Ren'Py, where displayables
create Renders rather than reusing child renders.
2021-10-02 14:15:50 -04:00
Gouvernathor a5c2fc40b1 Document key statement taking key lists
fix #3066
2021-10-02 19:40:10 +02:00
Tom Rothamel 47cea86c88 Some changes to DynamicDisplayable.
* It now only changes its child if the raw value is different.
* Transform state is propagated.
* Documentation.
2021-10-01 22:03:52 -04:00
Tom Rothamel 89f01113e9 Revert "Fix potential rollback problem"
This reverts commit 68cbf3d87d.

I don't believe this is right - when rollback happens, the context
will be replaced by an older copy of the context. So there's no
reason to rollback this dict.
2021-10-01 08:38:15 -04:00
Tom Rothamel dd29c7317c Limit error handling text to 401 lines.
Fixes #3060.
2021-10-01 08:37:14 -04:00
Andy_kl c8131e04e3 Add released action to Bar 2021-09-30 20:22:34 +02:00
Andy_kl 68cbf3d87d Fix potential rollback problem 2021-09-30 17:10:39 +02:00
Tom Rothamel 5295de43fd Mark traceback.txt as readable. 2021-09-30 01:04:29 -04:00
Tom Rothamel 1b2b319f28 Document how to add files to Android.
Fixes #3058.
2021-09-30 01:01:06 -04:00
Tom Rothamel 7993865619 Document the android permissions change. 2021-09-29 23:12:29 -04:00
Tom Rothamel 578e14471e Explicitly manage the permissions of files on Androd.
This lets the player access their files to move them to other systems.
2021-09-29 23:03:41 -04:00
Tom Rothamel 167322e45d Improve renpy.memory.find_parents.
Mostly by avoiding creating a closure that would show up when
searching for parents.
2021-09-28 02:12:20 -04:00
Tom Rothamel 372d6d026e render: Break cycles in kill_cache.
This ensures that the reference counting gc can reclaim
renders quickly. While the main motivation is to make sure
textures are collected before the texture loader is reset,
this should also prevent GC pauses.
2021-09-28 02:02:12 -04:00
Tom Rothamel 6453f2ca0a gl2: Remove cycle between uniform and program. 2021-09-27 21:37:50 -04:00
Tom Rothamel bb9a6651ad Merge pull request #3052 from Andykl/fix-persistent
Do not unpickle persistent just after the save
2021-09-27 19:33:40 -04:00
Tom Rothamel 2327421152 Changelog the fix to the black screenshot issue. 2021-09-27 19:32:30 -04:00
Tom Rothamel 5b5127627b gl2: Respect the flip parameter to draw_screen.
This is an attempt to fix #3009, and it doesn't look like it
could hurt.
2021-09-27 00:33:04 -04:00
Tom Rothamel 313fe391dd Update changelog. 2021-09-26 11:45:29 -04:00
Tom Rothamel a2b83bafdb Update credits.
This also merges in the credits for renpy-build.
2021-09-26 11:27:01 -04:00
Tom Rothamel 53d3b26a2b Merge pull request #3055 from Neyunse/master
Added TogglePause on MusicRoom
2021-09-26 03:49:45 -04:00
Tom Rothamel 19378110cb ios: Launch the correct .xcodeproj file. 2021-09-26 02:24:18 -04:00
Neyunse 91e427b9b9 Fixed 00musicroom.rpy 2021-09-25 22:15:55 -03:00
Neyunse 7904a2819a Merge branch 'renpy:master' into master 2021-09-25 22:12:59 -03:00
Neyunse 3c1e0067c6 Undo Update 2021-09-25 22:12:47 -03:00
Tom Rothamel 5bfecbf921 Do not copy permissions when making a directory package.
This makes it possible to build ios over the network.
2021-09-25 20:10:35 -04:00
Neyunse bc846c8dd5 Update 00musicroom.rpy 2021-09-25 21:06:16 -03:00
Tom Rothamel ad8ff33bd4 Add MusicRoom.TogglePause.
Fixes #3054.
2021-09-25 18:34:00 -04:00
Tom Rothamel a9fc8109f6 Handle cropping to 0-size polygons properly.
Fixes #3057.
2021-09-25 15:53:52 -04:00
Tom Rothamel 6a4caa1c8c Visit all displayables when first shown.
Fixes #3056, by using visit as a lightweight replacement to
the removed _show that doesn't require time or execution.
2021-09-25 03:15:42 -04:00
Neyunse 4aae4f87f2 Added TogglePause
If music is currently playing it will pause, otherwise it will resume from where it stopped.
In case a music has already finished, the queue will play the music again from the beginning the next time it is called.
If the music is playing the button will receive the selected status and when paused it will be removed.

Note:
__MusicRoomTogglePause is based on __MusicRoomStop, because in some tests in my project, if __MusicRoomTogglePause was the same as __MusicRoomTogglePlay it caused some data about the music being played added with add(action=[SetVariable("jb_title", title)]), such as the music name, artist and the music image, not to be displayed.
2021-09-24 20:44:47 -03:00
Tom Rothamel f2868b0228 Hide now keeps a displayable in the current store.
Fixes #3054, where hide could reevaluate a screen in the new
store.
2021-09-23 22:20:01 -04:00
Andy_kl 4cf0998bf5 sl2: Properly analyze also custom sl statements containing a transclude.
Per ##3034.
2021-09-24 04:07:20 +02:00
Tom Rothamel 121b510761 sl2: Properly analyze use statements containing a transclude.
Fixes #3034.
2021-09-23 20:02:19 -04:00
Andy_kl b2ba026d84 Do not unpickle persistent just after the save 2021-09-24 00:51:19 +02:00
Tom Rothamel 2fbb7be5be Pick a less-spammy site for icon conversion. 2021-09-22 22:31:21 -04:00
Tom Rothamel 6f79af3931 Update credits. 2021-09-22 22:29:39 -04:00
Andy_kl 8ea063ec7c Fix missed AndroidStateText case 2021-09-23 03:07:09 +02:00
Andy_kl 9af96b859d Update Russian translation 2021-09-23 03:04:02 +02:00
Tom Rothamel 9920c7bbcb Add polish translation, by Reptile. 2021-09-21 10:22:11 -04:00
Tom Rothamel bc73ff9acb Fix #3043. 2021-09-21 01:32:02 -04:00
Tom Rothamel c37d7d7f6f rapt: Try to order things more clearly. 2021-09-20 21:11:47 -04:00
Tom Rothamel 93f86de061 On mobile, unfocus the current displayable when the player moves their finger. 2021-09-19 18:38:11 -04:00
Tom Rothamel dded5b159c When perspective is true, create a mesh after applying matrices.
This helps mesh and perspective coexist.

Per https://lemmasoft.renai.us/forums/viewtopic.php?p=546676#p546676.
2021-09-19 15:58:05 -04:00
Tom Rothamel d49225fd47 Merge pull request #3045 from Andykl/fix-persistent-leak
Make ChoiceActionBase.chosen a property
2021-09-18 20:14:58 -04:00
Andy_kl 91f5a87091 Make ChoiceActionBase.chosen a property 2021-09-19 02:01:14 +02:00
Tom Rothamel d0572739fa Add the --safe-mode conmand line flag.
Which forces Ren'Py to start in safe mode.
2021-09-18 01:09:24 -04:00
Tom Rothamel 5c2d9ebbaa Special case ATL "pause 0" to show a single frame.
Per #3041.
2021-09-17 03:18:02 -04:00
Tom Rothamel e25a6ac623 Merge pull request #3039 from Neyunse/master
Fixed Spanish TL: Personalizas
2021-09-16 18:24:03 -04:00
Tom Rothamel 591a01aba2 Mute mutes Movies.
Fixes #3033.
2021-09-15 17:46:28 -04:00
Neyunse 08319c9aab Fixed Spanish TL: Personalizas
Personalizas is not correct on Spanish
Corrected at: Personalizado
Another Corrected form: Personalizar
line: gui7.rpy:358
2021-09-15 15:18:34 -03:00
Tom Rothamel 91974793b8 Copy the context into the rollback created after load.
Fixes #3036, references #2942.
2021-09-14 21:42:54 -04:00
Tom Rothamel ad55381e58 Avoid autoreloading after the autoreload flag is cleared.
Fixes #3037.
2021-09-13 18:02:49 -04:00
Tom Rothamel 56de8d1935 doc: Some of the limitations/changes of perspective. 2021-09-12 02:48:22 -04:00
Tom Rothamel b79adf37a4 transform: Make perspective False the same thing as perspective None. 2021-09-12 02:27:12 -04:00
Tom Rothamel f675f2b92a transform: Allow rotate and perspective to coexist. 2021-09-12 02:15:46 -04:00
Tom Rothamel 8150c47a37 doc: Fix MainMenu documentation.
Fixes #3032.
2021-09-12 00:28:39 -04:00
Tom Rothamel 144e4b614d doc: Detect bad docstrings. 2021-09-11 23:10:01 -04:00
Tom Rothamel 279464d87f Update credit.
Per a twitter request.
2021-09-11 13:11:57 -04:00
Tom Rothamel 89aa1fdc67 doc: Changelog tts changes. 2021-09-10 23:19:31 -04:00
Tom Rothamel e477a1d6d8 tts: Compat the ordering change. 2021-09-10 22:46:40 -04:00
Tom Rothamel 788a39de76 tts: Modal screens stop tts processing.
The idea being to not read out things that are blocked by a modal
dialogue.

Fixes #3030.
2021-09-10 22:34:03 -04:00
Tom Rothamel 123fb78052 tts: Change the order in which layer and displayables on layers are read.
Now, the layers are read with the displayable closest to the player
first, as it's likely to be the most relevant. This would control
the order in which screens are read, but not the screen itself,
as the screen should be read first to last.
2021-09-10 21:48:02 -04:00
Tom Rothamel f581c5b39c Update translations. 2021-09-09 21:36:57 -04:00
Tom Rothamel 4328a11988 Merge pull request #3022 from Moshibit/master
Update Spanish translation
2021-09-09 21:31:02 -04:00
Tom Rothamel 528227a33b ShowIf should prevent tts if the condition is false.
Fixes #3029.
2021-09-09 21:29:26 -04:00
Tom Rothamel 05ff0e1dd5 rapt: Update translation strings. 2021-09-09 17:25:52 -04:00
Tom Rothamel d2b70b5396 rapt: Add list devices, disconnect.
Deals with multiple wifi device connection issues.
2021-09-09 01:07:26 -04:00
Gouvernathor 5a3f6fcfb7 Fix typo 2021-09-08 23:59:31 +02:00
Tom Rothamel ee1b3580b3 Do not pass non-focusable displayables to the keyboard focus system.
Fixes #3027.
2021-09-08 01:10:39 -04:00
Tom Rothamel 342151b1b0 Update the sponsors documentation. 2021-09-08 00:56:22 -04:00
Tom Rothamel e7af259178 Do not quote the pause command on windows.
Or the read command on Linux.
2021-09-07 02:39:55 -04:00
Tom Rothamel b727211a25 android: Fix cancelling pairing operations. 2021-09-07 01:16:59 -04:00
Tom Rothamel 14c0e7c2ee layeredimage: Ignore unavailable optional attributes.
This fixes an issue introduced by #3105, where it became
possible for LayeredImage._choose_attributes to return
None if a nonexistent attribute was given to optional,
as might be the case when switching between semi-related
sets of attributes.
2021-09-06 23:54:31 -04:00
Tom Rothamel 81fe396c6c Remove debugging. 2021-09-06 17:12:35 -04:00
Tom Rothamel a5007536ee doc: Update credits. 2021-09-06 16:01:26 -04:00
Tom Rothamel 57dd2a004d doc: Changes in android keys. 2021-09-06 15:40:57 -04:00
Tom Rothamel 0a5e763ebc transform: Supply gl properties to a model when created.
This allows the model to get properties that will affect how
textures are loaded, allowing the ATL properties to control
texture loading.
2021-09-06 01:33:26 -04:00
Tom Rothamel c0158696b5 doc: Improve documentation of how mesh, Model, and gl_ properties interact.
Per #3024.
2021-09-05 00:44:35 -04:00
Tom Rothamel bb943d6465 Fix the fit parameter to Model.child(). 2021-09-05 00:43:13 -04:00
Tom Rothamel d2050447da Merge pull request #3025 from mal/fix-model-props
Exception when setting GL props on Model displayable
2021-09-05 00:13:06 -04:00
Tom Rothamel 8007446ee1 Clear the atl state when clearing the atl timebase.
This ensures the two match up. Fixes #3008.
2021-09-05 00:12:47 -04:00
Mal Graty 814480cc30 Rename setter to avoid conflict with property 2021-09-04 22:53:04 +01:00
Moshibit cfde71aba8 Merge branch 'renpy:master' into master 2021-09-04 04:50:52 -05:00
Moshibit 4c59b37433 Merge pull request #1 from Moshibit/Moshibit-patch-1
Update Spanish translation
2021-09-04 04:50:19 -05:00
Tom Rothamel c85168a684 Merge pull request #3021 from Gouvernathor/patch-5
Edit and fix documentation
2021-09-04 01:33:46 -04:00
Tom Rothamel 4c0b4aca64 Document changelog. 2021-09-04 01:30:27 -04:00
Tom Rothamel 6d82cf9fcb Simplify the IAP documentation. 2021-09-04 01:24:26 -04:00
Tom Rothamel f99a2dcca9 Document that Pyjnius and Pyobjus are available. 2021-09-04 01:22:38 -04:00
Tom Rothamel 22500fa2c3 Document android permissions. 2021-09-04 01:11:57 -04:00
Tom Rothamel 370a025ede Update keyword list. 2021-09-04 01:09:17 -04:00
Tom Rothamel 5442bff2ce rapt: Add renpy.check_permission and renpy.request_permission.
These are functions used to check permissions on Androuid,
and request permissions that do not exist.
2021-09-04 00:56:54 -04:00
Tom Rothamel 68ede22fa9 rapt: Support build.android_permissions.
This is a variable that takes a list of android permissions
to grant to the app.
2021-09-04 00:56:14 -04:00
Tom Rothamel f851bb0221 Clear the video texture cache when clearing textures.
Fixes #3018.
2021-09-03 22:31:16 -04:00
Tom Rothamel 094c184b1c Merge pull request #3010 from mal/lint-temp-attrs
Ensure lint checks temporary say attributes
2021-09-03 19:54:50 -04:00
Tom Rothamel e6a6a33fbe Merge pull request #3019 from Gouvernathor/patch-4
Update french translations
2021-09-03 19:53:35 -04:00
Gouvernathor 647dc7a98a Add offscreenleft and offscreenright to the graph 2021-09-04 00:02:38 +02:00
Gouvernathor 0e6bb55396 Tweak transform-conserving rules 2021-09-03 23:58:58 +02:00
Gouvernathor 17c46a9e4f Fix displaying_images 2021-09-03 23:22:28 +02:00
Gouvernathor c60d0657e9 Document automatic name generating 2021-09-03 22:58:02 +02:00
Moshibit eef96e5193 Update Spanish translation 2021-09-03 08:27:46 -05:00
Asriel Senna 68f51bc4d9 add translations 2021-09-03 13:52:30 +02:00
Gouvernathor a6a8a0962f Update options.rpy 2021-09-03 13:50:25 +02:00
Tom Rothamel c52d7c645c rapt: Update translations. 2021-09-03 01:05:10 -04:00
Tom Rothamel 8f282be21f Merge pull request #3015 from mal/li-dupe-attrs
Prevent duplicate attributes breaking LIs
2021-09-02 22:44:59 -04:00
Tom Rothamel 2b02c7b7a8 Merge pull request #3017 from Gouvernathor/patch-4
Reorder launcher preferences
2021-09-02 22:26:38 -04:00
Gouvernathor 723166a373 Reorder preferences 2021-09-03 03:18:34 +02:00
Tom Rothamel 8319d68157 Report errors if a comment translation is malformed. 2021-09-02 20:10:08 -04:00
Mal Graty 8e7aa365b5 Prevent duplicate attributes breaking LIs 2021-09-02 18:11:12 +01:00
Mal Graty 2afe32ab13 Ensure lint checks temporary say attributes 2021-09-02 01:15:14 +01:00
Tom Rothamel c3830b39ec Remove blank lines. 2021-09-01 01:49:15 -04:00
Tom Rothamel a463d25b12 Merge pull request #3003 from Gouvernathor/patch-4
Add xycenter and xysize, modify xsize and ysize
2021-08-31 22:11:06 -04:00
Gouvernathor 151be8cd36 Merge branch 'master' into patch-4 2021-08-31 16:55:08 +02:00
Asriel Senna 18aafef005 document offset and fix types and default values 2021-08-31 11:22:12 +02:00
Asriel Senna 7372792a11 fix xcenter and ycenter types 2021-08-31 11:21:39 +02:00
Asriel Senna 35dce1fab6 Add xycenter documentation 2021-08-31 11:21:12 +02:00
Asriel Senna b42d67a2b5 priority typo 2021-08-31 10:33:35 +02:00
Asriel Senna adb289e000 add changelog 2021-08-31 10:27:01 +02:00
Asriel Senna 490757322a add documentation 2021-08-31 10:26:53 +02:00
Asriel Senna 06180ad776 apply reviews 2021-08-31 10:17:39 +02:00
Tom Rothamel 60ddd0fbba Update translations. 2021-08-31 01:30:40 -04:00
Tom Rothamel 3aec878b99 Merge pull request #3001 from Moshibit/master
Update Spanish translation
2021-08-30 19:51:10 -04:00
Moshibit f501f7bd0c Update Spanish translation 2021-08-30 10:46:30 -05:00
Moshibit 21a052d6fb Update Spanish translate
Since the most current nighty does not contain the update of the Android strings, I generate the lines manually, I hope there are no missing lines.
2021-08-30 10:40:29 -05:00
Moshibit 2265f1daa7 Update Spanish translation 2021-08-30 10:07:49 -05:00
Moshibit 4c3ee87f8c Update Spanish Translation 2021-08-30 10:03:32 -05:00
Moshibit 3a193cc1d6 Update Spanish Translation 2021-08-30 09:54:43 -05:00
Moshibit 0ab35ec85b Update Spanish Translation 2021-08-30 09:27:59 -05:00
Tom Rothamel 95e72c8036 Update the android strings. 2021-08-30 10:24:43 -04:00
Moshibit 7aaeee895c Update Spanish translation 2021-08-30 09:24:12 -05:00
Moshibit 487e6bf5c1 Update Spansih translate 2021-08-30 09:19:49 -05:00
Moshibit 67c8d7f13b Update Spanish translation 2021-08-30 09:16:29 -05:00
Moshibit de7dd02431 Update Spanish translation 2021-08-30 09:11:44 -05:00
Moshibit abf0a3b4ea Update Spanish translation 2021-08-30 08:50:05 -05:00
Moshibit 120f33d4d7 Update Spanish translation 2021-08-30 08:37:21 -05:00
Tom Rothamel 702ec8d021 Add the accessibility menu to the default gui. 2021-08-29 20:35:37 -04:00
Tom Rothamel aa4b0c13f2 doc: Add android-downloading.jpg to the changelog. 2021-08-29 20:29:54 -04:00
Tom Rothamel 9800ad1556 Properly document build.include_update. 2021-08-29 20:17:55 -04:00
Tom Rothamel 848b1804a0 Document android-downloading.jpg. 2021-08-29 17:39:42 -04:00
Tom Rothamel e6da0a2f26 Create the game/ directory on android if it doesn't exist.
This fixes a problem where if it didn't exist, files/ would be put
into the searchpath, and all sorts of problems would ensue.
2021-08-29 16:22:41 -04:00
Gouvernathor 7a4a4d2459 Fix implementation 2021-08-29 20:45:12 +02:00
Tom Rothamel cf37f3426a Only display the choice screen once.
Fixes #2594, thanks Andrí.
2021-08-29 09:49:07 -04:00
Tom Rothamel 32494c4577 Reset the ui stack before console error handling.
Fixes #3004.
2021-08-28 21:54:16 -04:00
Moshibit cbc6943729 Update Spanish translate 2021-08-28 10:46:08 -05:00
Moshibit 95316526d5 Update Spanish translation 2021-08-28 10:39:09 -05:00
Tom Rothamel d11632db59 Update sponsor documentation. 2021-08-27 22:45:56 -04:00
Tom Rothamel d504b4c635 Update the changelog. 2021-08-27 22:40:33 -04:00
Gouvernathor c08f7efa3c Change xsize and ysize types 2021-08-28 01:13:05 +02:00
Gouvernathor 4ded371224 Implement xsize and ysize behavioral changes 2021-08-28 01:11:24 +02:00
Gouvernathor df96e1a3d8 Move the compat mechanism out of the transform cls 2021-08-28 00:56:06 +02:00
Gouvernathor b6fa5c402d Add the xysize and xycenter tprop and modify size 2021-08-28 00:03:48 +02:00
Gouvernathor 180b668fb2 Compat the old_size_tpref config variable 2021-08-27 23:59:47 +02:00
Gouvernathor 01ce078e1c Add the old_size_tpref config variable 2021-08-27 23:59:01 +02:00
Moshibit e11c49f59f Update Spanish translation 2021-08-26 08:40:22 -05:00
Moshibit 76a3f34cfa Update Spanish translation 2021-08-26 08:38:27 -05:00
Moshibit 79ab89f6ec Update Spanish translation 2021-08-26 08:34:19 -05:00
Tom Rothamel 6827c6fab7 Include a version number suffix.
u = unofficial builds.
n = nightly builds.
2021-08-26 04:24:48 -04:00
Tom Rothamel dd35de1679 Improvements to #2970.
* Remove animation of update indicator. (An annoyance if the creator
  wants to be informed, but isn't ready to update.)
* Check for updates in a different thread. (Prevents slow internet
  from blocking launcher start.)
* Use requests to check update channels.
2021-08-25 20:59:07 -04:00
Tom Rothamel 214f4d41b6 Merge pull request #2970 from Gouvernathor/patch-6
Update notification
2021-08-25 20:40:33 -04:00
Tom Rothamel 06d4f2c944 Merge pull request #2991 from Gouvernathor/patch-4
Update the parsing error screen
2021-08-25 20:37:21 -04:00
Tom Rothamel 42080e8926 Only allow rollback to be fixed when there is a current statement.
Attempts to fix #2994.
2021-08-25 20:34:02 -04:00
Tom Rothamel b8436cd0b5 Only respect default_focus at the start of an interaction.
Fixes #2964.
2021-08-25 20:28:22 -04:00
Tom Rothamel 0411aa0cf2 a11y: Slightly recolor selected/hovered text in high contrast mode. 2021-08-25 20:15:24 -04:00
Gouvernathor 747c75a14b Opt-out of matrixcolor when needed 2021-08-25 22:17:48 +02:00
Tom Rothamel feb9b6e180 Fix archive directory test. 2021-08-25 10:11:35 -04:00
Tom Rothamel 8be52cd0e4 a11y: Implement high contrast text.
This displays text in white with a black box behind it.
2021-08-25 01:48:00 -04:00
Tom Rothamel df72d29625 a11y: Add high contrast text preference. 2021-08-25 01:19:38 -04:00
Tom Rothamel cbbc84bcda Change where defaults are applied on load/rollback.
By applying them inside the rollback function, we can avoid
rollback reverting the default.

Fixes #2997.
2021-08-25 00:30:37 -04:00
Tom Rothamel df227fd163 Allow a subsurface to be taken of a render with perspective.
This isn't great, as the fix is to do a render to texture,
and then subsurface that. Still, the transition from perspective
to no perspective should be rare-ish, and this allows transitions
and other things that need to subsurface to work, rather than
failing entirely.

Fixes #2998.
2021-08-25 00:01:00 -04:00
Tom Rothamel f8d76fb76a Merge pull request #2996 from RubenGarcia/master
Mention that parameters with default values are possible.
2021-08-24 10:51:41 -04:00
Ruben Jesus Garcia-Hernandez 51c300234f Mention that parameters with default values are possible. 2021-08-24 16:46:32 +02:00
Tom Rothamel afe10a6fe7 Edit down the last commit. 2021-08-23 23:10:56 -04:00
Tom Rothamel 720ad70e0c Merge pull request #2993 from Gouvernathor/patch-5
Document screens' _with_none kwarg and the call screen's with behavior
2021-08-23 23:05:45 -04:00
Tom Rothamel 59f08318fb pyanalysis: Remove unused analyses.
This prevents pyanalysis.rpyb from growing unconstrained.
2021-08-23 22:50:46 -04:00
Tom Rothamel 34ccfe62df Lower the compression level on analysis files.
This should make games load faster, at least on fast storage,
for a minimal increase in size.
2021-08-23 22:31:47 -04:00
Tom Rothamel fe796bbc9c Add the gamedir to the android searchpath. 2021-08-23 22:06:16 -04:00
Tom Rothamel 3d887c787b Handle timing in a move in a transformed layer.
This introduces a new displayable, MatchTimes that passes st and at
to an adjusttimes inside it. This has the effect of undoing the
timing changes that are caused by the transforms in the layer
at list, and making the timing match the transition.
2021-08-23 21:56:04 -04:00
Tom Rothamel 6587085cad Move layer/camera_at_list application into a function.
This is part 1 of making move work in conjunction with the
at lists, which involves move repeating the transformations.
2021-08-23 21:37:55 -04:00
Gouvernathor 7c11e8ed37 Document _with_none and the call's with behavior
fixes #2139
2021-08-23 03:37:10 +02:00
Gouvernathor 2e58ce4544 Update the _parse_errors screen 2021-08-22 14:56:34 +02:00
Tom Rothamel 969cf58a38 Round up viewports to fully contain children.
Fixes #2987.
2021-08-22 01:44:13 -04:00
Tom Rothamel f9234bed69 Prevent the mouse from slowing down AlphaMask.
Fixes #2988, Fixes #2458.
2021-08-21 21:35:22 -04:00
Tom Rothamel 12d14b0fc0 Only scan for .rpas if a directory exists. 2021-08-20 21:31:53 -04:00
Tom Rothamel 307a47c470 Merge pull request #2927 from korden32/patch-1
Search archives in all searchpaths, not just gamedir
2021-08-20 21:26:02 -04:00
Tom Rothamel 5a78f17e92 Merge pull request #2958 from Gouvernathor/patch-4
Fix labels in changelog
2021-08-19 21:31:59 -04:00
Tom Rothamel 70bd11ef6e Merge pull request #2967 from Gouvernathor/patch-5
Document config.has_channel side-effects
2021-08-19 21:20:13 -04:00
Tom Rothamel eccd5855d0 Merge pull request #2965 from RubenGarcia/master
Fix typo.
2021-08-19 21:19:51 -04:00
Tom Rothamel f54c5174b8 Fix updater race conditions.
Fixes #2986.
2021-08-18 19:48:32 -04:00
Tom Rothamel a03fbf8188 Do not show the window when not showing alt dialogue.
Fixes #2984, by treating the alt dialogue the same way
we treat a character with the condition false.
2021-08-17 18:41:52 -04:00
Tom Rothamel f7574a34c1 Allow who.statement_name to be callable.
This makes it possible to extend a function with a method that
selects the statement name. See the next change for the use
case.
2021-08-17 18:41:52 -04:00
Tom Rothamel 82eb7ec134 Merge pull request #2979 from mal/adjust-attrs-lint
Make lint config.adjust_attributes aware
2021-08-17 18:21:21 -04:00
Tom Rothamel 895490ffc0 Merge pull request #2976 from Gouvernathor/patch-7
Update french translations
2021-08-17 18:20:58 -04:00
Andy_kl 394e9d8e48 Keep invariant Node.linenumber refers to the actual string in file for menu Say statement 2021-08-17 19:40:41 +02:00
Tom Rothamel bb4c150c6a android: Documentation. 2021-08-16 23:10:02 -04:00
Tom Rothamel 4d6b91606f android: Report when the bundle key doesn't exist. 2021-08-16 23:10:02 -04:00
Tom Rothamel e59ec61c74 Merge pull request #2983 from mal/fix-gl-prop
Small transform GL property issues
2021-08-16 20:33:23 -04:00
Mal Graty bd7ceb9527 Fix documented name of gl_color_mask 2021-08-16 22:30:15 +01:00
Mal Graty db042399de Order transform gl properties alphabetically 2021-08-16 21:30:11 +01:00
Mal Graty 9c118eb780 Add missing transform gl property 2021-08-16 21:29:34 +01:00
Mal Graty 3ed4291a23 Fix gl_property typo in Transform 2021-08-16 21:28:04 +01:00
Mal Graty f0336b9ec8 Make lint config.adjust_attributes aware
Applies the function when checking a recognised image, and stashes the
original name so that the error report will match the line in the script
being referenced (rather than reporting the adjusted version).
2021-08-15 04:51:02 +01:00
Gouvernathor 8f43ef46fd Update common.rpy 2021-08-14 08:30:57 +02:00
Gouvernathor 263299d37a Update launcher.rpy 2021-08-14 08:30:18 +02:00
Tom Rothamel d1727e0137 doc: Fix typo. 2021-08-13 00:04:33 -04:00
Tom Rothamel 6494b3ddb1 Support loading game assets from Android packs. 2021-08-12 22:41:42 -04:00
Tom Rothamel e044a37a69 android: Interface changes.
* Support selecting and building bundles.
* Support Android 11+ Wi-Fi pair and connect.
2021-08-11 18:14:14 -04:00
Gouvernathor 55c628eff1 Add default value
Without it, the selected clause would not apply since it would be None, and the button would appear enabled because of its list-formed action.
2021-08-10 10:56:53 +02:00
Gouvernathor 9f7b7eec09 Neater code 2021-08-10 10:50:02 +02:00
Gouvernathor f278ae1f6b Fix version comparison
That way only more advanced versions trigger the glowing
2021-08-10 10:46:01 +02:00
Gouvernathor e24f022642 Turn has_upgrade into persistent 2021-08-10 10:39:43 +02:00
Gouvernathor daecb82080 Cleanup and turn has_update into persistent 2021-08-10 10:36:56 +02:00
Gouvernathor 5d25d1b5ef Update the has_update variable at every check 2021-08-10 10:35:23 +02:00
Gouvernathor fb1882e23f Add visual feedback when there is an update
fixes #2961

The transform stuff makes the textbutton glow, the commented-out lines would just make it the color of the Sponsor Information textbutton.
2021-08-10 10:14:37 +02:00
Gouvernathor 8a16dde182 Add update check preference 2021-08-10 10:11:49 +02:00
Gouvernathor 64637d7e84 add update check to the front_page label 2021-08-10 10:10:09 +02:00
Gouvernathor 27f4dbaf55 isolate update check as a function 2021-08-10 10:08:09 +02:00
Gouvernathor f19431c516 Document config.has_channel side-effects 2021-08-09 05:17:25 +02:00
Tom Rothamel 551aebb22b Allow utter_restart to restart Ren'Py without reinitializing.
The goal is to support file downloaders that might restart Ren'Py,
but will redo it without changing the screen information.
2021-08-08 14:04:56 -04:00
Ruben Jesus Garcia-Hernandez 1e9d134e4a Fix typo. 2021-08-08 19:42:58 +02:00
Tom Rothamel 7da3c35dba Fix rt select in the case of a bad link. 2021-08-07 23:31:11 -04:00
Tom Rothamel 96c1510991 Revert "Move finding archives into its own function."
This reverts commit 3a03525490.
2021-08-07 22:47:33 -04:00
Tom Rothamel 3a03525490 Move finding archives into its own function. 2021-08-07 21:51:03 -04:00
Tom Rothamel f63b608baa updater: Allow non-patching updates.
Thes download the entire game, but don't require a web server that's
compatible with zsync.
2021-08-06 20:36:24 -04:00
Tom Rothamel 010dbe9ea8 Play the activate_sound when a bar is activated.
Fixes #2960.
2021-08-05 21:18:20 -04:00
Tom Rothamel 05b89d189e Store base displayables and main displayables separately.
Fixes #2959, a regression introduced by
d49cb97e19 , by separating out the
base displayable that gets focus from the main displayable that
takes scope.
2021-08-04 21:51:44 -04:00
Tom Rothamel ba97538363 Use the correct events for viewport scrolling. 2021-08-03 22:17:38 -04:00
Tom Rothamel 5884eac7b4 atl: Remove prefixes when dispatching events.
This is mainly for selected_hover and selected_idle, which will
become hover and idle if not handled, matching the way these prefixes
are handled in the rest of Ren'Py.

Fixes #2957.
2021-08-03 19:58:29 -04:00
Gouvernathor 62adce9c9e Fix labels in changelog 2021-08-03 05:21:24 +02:00
Tom Rothamel 9dda311e68 Bump version to 7.4.9. 2021-08-02 20:04:39 -04:00
Tom Rothamel 52d0d57e7b Add a way to hide the exceptions produced by the fix for #2945. 2021-08-01 00:50:20 -04:00
Tom Rothamel 7d69b973ac Only access atl_st_offset on an ATLTransform.
Fixes #2952.
2021-07-31 23:05:17 -04:00
Tom Rothamel 86af67b0b2 Update changelog. 2021-07-31 20:02:40 -04:00
Tom Rothamel 899584ea0e Document how transforms inherit properties. 2021-07-31 19:45:03 -04:00
Tom Rothamel d7cbf76f0c Update sponsors doc. 2021-07-31 17:58:21 -04:00
Tom Rothamel 078e65030a Rename 7.4.8. 2021-07-31 17:55:57 -04:00
Tom Rothamel fde3d3757a Agument any non-empty exception. 2021-07-31 17:34:31 -04:00
Tom Rothamel 305abf48bf Merge pull request #2936 from Meithal/patch-1
Update loadsave.py
2021-07-31 17:20:40 -04:00
Tom Rothamel 37826e4403 Merge pull request #2937 from Moshibit/master
fix skins documentation
2021-07-31 17:20:18 -04:00
Tom Rothamel 082f119f16 Make sure text surfaces have an integer size. 2021-07-31 17:09:22 -04:00
Tom Rothamel e186df3e5a Report errors parameterizing an image, if config.developer is True
Fixes #2945.
2021-07-31 16:58:20 -04:00
Tom Rothamel 87692792ac Do not auto-show the dialogue window on centered/vcentered.
This introduces the ability for a character to define its own
statement_name, and uses that ability to create a new statement
that keeps the dialogue window hidden.
2021-07-31 16:25:38 -04:00
Tom Rothamel cfd8530cf2 Store the final width/height of a Viewport.
This needs to be correct for edgescrolling and other things to work.
2021-07-31 15:54:19 -04:00
Tom Rothamel f6e05f532e Allow changing the case of a save on a case-insensitive filesystem.
Fixes #2948.
2021-07-31 15:35:00 -04:00
Tom Rothamel 0af3eaa86e Document how the Android presplash is scaled.
Fixes #2950.
2021-07-31 15:18:20 -04:00
Tom Rothamel 362b815503 Add a not_greedy rollback mode.
This is used by the console to prevent the changes the console
makes from being elimiated when the creator rolls back to the
statement where the changes have been made.
2021-07-31 15:13:54 -04:00
Tom Rothamel 9e93f30109 Create a new Rollback object once rollback is done.
This prevents problems that are caused by a single
rollback object being completed once. Fixes #2942, hopefully
for good this time.
2021-07-31 14:54:40 -04:00
Tom Rothamel c1c7b6259d Clear the list of mutated objects when a rollback occurs.
Fixes #2942.
2021-07-31 12:27:34 -04:00
Tom Rothamel 45e9f2741e Ensure clipping can't hide the caret.
Fixes #2949.
2021-07-31 12:21:48 -04:00
Tom Rothamel 263ee6cac8 Better computation of Button/Window xymaximum. 2021-07-30 22:34:01 -04:00
Tom Rothamel 1e449a1509 Document that gl_depth doesn't consider transparency.
Fixes #2947.
2021-07-30 17:36:34 -04:00
Tom Rothamel d80f614620 Do not zero out at_st_offset on hide.
After the changes in 7.4.7, the st that is passed to ATL is
has the adjustment, so there's no need to reset it.
2021-07-29 22:05:12 -04:00
Tom Rothamel 40fcc752a1 Call update_state to compute ATL transform delay.
Fixes #2939.
2021-07-28 22:31:29 -04:00
Tom Rothamel 2228c4c0d3 Add missing version to changelog. 2021-07-28 20:40:01 -04:00
Tom Rothamel aad66b4240 Add config.single_movie_channel.
This is here to make it easy to have all movies play on a single
channel, making them easier to pause and unpause.
2021-07-27 16:54:32 -04:00
Tom Rothamel 4caf54a288 ffmedia: Support pausing video. 2021-07-27 16:43:47 -04:00
Tom Rothamel 49e4a115e8 ffmedia: Pass pause into ffmedia, use to update an offset time. 2021-07-27 14:26:54 -04:00
Tom Rothamel 8b0cd77a54 Do not suppress non-mouse events on init.
This ensures Ren'Py will get to process events like CONTROLLERADDED.
2021-07-26 21:53:40 -04:00
Tom Rothamel 5841dfb7aa Fix type of the unwritable log file. 2021-07-26 01:43:30 -04:00
Moshibit e828d3ff36 Merge branch 'renpy:master' into master 2021-07-25 22:53:49 -05:00
Meithal 283633200e Update loadsave.py
While stuck in an infinite loop during saving, trying to break from it with a keyboard interrupt causes a crash because that exception args is an empty tuple, so we get an uncaught exception here, this checks that looking args[0] or args[1:] won't lead to a crash.
2021-07-25 19:01:10 +02:00
Tom Rothamel be2ac1f31a Bump version. 2021-07-25 12:03:22 -04:00
Tom Rothamel 0653bd9893 Merge pull request #2922 from Gouvernathor/patch-4
Typos
2021-07-24 15:33:23 -04:00
Tom Rothamel 2284bcb7ef Fix hiding Model()s.
Fixes #2932.
2021-07-24 10:18:07 -04:00
Tom Rothamel 7e6570db8d Add a way to access the accessibility and renderer menus. 2021-07-23 23:08:10 -04:00
Moshibit dd901ceefb Update skins.rst 2021-07-23 15:47:48 -05:00
Tom Rothamel 54b7c25b1f Merge pull request #2929 from Moshibit/master
Fix custom theme
2021-07-23 16:36:32 -04:00
Moshibit f509835746 Update skins.rst 2021-07-23 15:34:32 -05:00
Tom Rothamel 0776a68814 Merge pull request #2930 from Gouvernathor/patch-5
Typos on the changelog
2021-07-23 15:58:04 -04:00
Gouvernathor 9d62705ae9 Fix typos
and de-document the use of windows+left/right keystrokes on windows
2021-07-23 20:57:04 +02:00
Tom Rothamel c61933e37e Document renpy.IgnoreEvent. 2021-07-22 23:03:45 -04:00
Tom Rothamel b934c17fbf Fix links to old documentation. 2021-07-22 22:50:41 -04:00
Tom Rothamel 1f982784d0 doc: Move udd -> cdd. 2021-07-22 22:48:23 -04:00
Moshibit f6eb12a850 Update skins.rst 2021-07-22 20:31:07 -05:00
Moshibit 46d637369f Update skins.rst 2021-07-22 20:30:30 -05:00
Moshibit fe1ee915ac Update skins.rst 2021-07-22 20:26:53 -05:00
Moshibit 57d6832fde Update skins.rst 2021-07-22 20:24:49 -05:00
Moshibit d0f578cda6 Update skins.rst 2021-07-22 20:23:21 -05:00
Moshibit dfbfdd42cd Update skins.rst 2021-07-22 20:22:39 -05:00
Moshibit 16669a8ecd Update skins.rst 2021-07-22 20:22:16 -05:00
Moshibit 4973bb7d5d Update style.rpy 2021-07-22 20:02:04 -05:00
Moshibit 0b63d11f1f Delete skin.rpy 2021-07-22 20:01:24 -05:00
Moshibit 9105255f7b Update style.rpy 2021-07-22 19:20:19 -05:00
Moshibit ed1c6cf8f6 Update skins.rst 2021-07-22 19:15:03 -05:00
Moshibit f1509e1d25 Update skins.rst 2021-07-22 19:14:04 -05:00
Moshibit fad7c1e761 Update skin.rpy 2021-07-22 19:11:40 -05:00
Tom Rothamel efa4bde27c Treat focus changes via renpy.set_focus as non-default.
Fixes #2924.
2021-07-21 23:02:38 -04:00
Tom Rothamel 0a88cdfa14 Fix changing character expressions.
orz.

Fixes #2926.
2021-07-21 22:42:22 -04:00
Tom Rothamel 4e821c0124 Clear pending events when Ren'Py starts.
Fixes #2925.
2021-07-21 18:34:29 -04:00
Tom Rothamel 0117526793 Merge pull request #2928 from midgethetree/fix-credits-typo
Update credits.rst
2021-07-21 17:10:39 -04:00
midgethetree effab2f56b Update credits.rst 2021-07-21 17:08:46 -04:00
KorDen 3d9596e9dc Search archives in all searchpaths, not just gamedir
It makes possible to put rpa archives in Android overwrite folder
2021-07-22 00:06:56 +03:00
Tom Rothamel 149f5a3788 Same fix, but in DynamicImage itself. 2021-07-21 00:13:14 -04:00
Tom Rothamel 972f612cda Prevent crashes during prediction from breaking a DynamicImage invariant. 2021-07-21 00:07:31 -04:00
Tom Rothamel 9556d15707 Document webkit issues. 2021-07-20 22:46:01 -04:00
Tom Rothamel e9a2370802 Fix add.py. 2021-07-20 22:45:41 -04:00
Gouvernathor 23cade695c Typos
the line breaks caused huge font increases
2021-07-21 04:38:55 +02:00
Tom Rothamel 64c936d083 Update changelog. 2021-07-20 22:30:19 -04:00
Tom Rothamel c4e6b8e6b5 Add renpy.set_focus.
This lets the focus be overriden.
2021-07-20 22:24:29 -04:00
Tom Rothamel 834f1bef8b Rename renpy.get_widget{,_properties} to renpy.get_displayable{,_properties}
Keep the old names, for compatibility purposes, but in general we don't
use the name widget anymore.
2021-07-20 22:20:33 -04:00
Tom Rothamel d49cb97e19 The main widget of a textbutton should be the button. 2021-07-20 22:19:05 -04:00
Tom Rothamel a21b8da9bb Update the changelog and incompatible changes. 2021-07-20 22:07:28 -04:00
Tom Rothamel 785c869886 Update the keymap documentation. 2021-07-20 20:50:23 -04:00
Tom Rothamel 0d0646efba Merge pull request #2804 from kobaltcore/better-input-editing
Add quality-of-life editing abilities to the Input field
2021-07-20 20:45:13 -04:00
Tom Rothamel 54d008aed3 Merge pull request #2921 from mal/plug-the-leak
Avoid using a dict as a default argument value
2021-07-20 20:43:53 -04:00
Mal Graty f063bd7097 Avoid using a dict as a default argument value
It's dangerous as it becomes trivial to accidentally pollute what is
expected to be a clean dictionary.
2021-07-21 00:36:24 +01:00
cobaltcore 4fb8cc6f5f Use osctrl for delete binding 2021-07-20 11:06:15 +02:00
cobaltcore b0e66a675c Remove conditional in keymap 2021-07-20 11:06:15 +02:00
cobaltcore 3091b59d45 Implement CUA keybinds 2021-07-20 11:06:15 +02:00
cobaltcore c2d187b9ae Improvement: Add osctrl modifier keybind
This acts like `CMD` on macOS and like `Ctrl` anywhere else.
2021-07-20 11:06:15 +02:00
cobaltcore b568f00270 Add common editing abilities to the Input field 2021-07-20 11:06:15 +02:00
Tom Rothamel 2fc403fc27 Update credits and sponsor docs. 2021-07-20 00:11:27 -04:00
Tom Rothamel dd5bbaf70f layeredimage: Revert now-unneeded change. 2021-07-19 22:12:27 -04:00
Tom Rothamel 1cad875471 layeredimage: Deal with not all group properties being ATL.
Fixes #2916, again.
2021-07-19 22:09:29 -04:00
Tom Rothamel 05f39bde9d Merge pull request #2917 from Gouvernathor/patch-3
Fix #2916
2021-07-19 20:33:17 -04:00
Gouvernathor 742f21beca Take variant and prefix from group_args
if they're not in kwargs, which in the current state of the code they never will.
2021-07-19 18:44:58 +02:00
Gouvernathor 1f700dc1a9 Default group_properties to dict instead of None
Fixes #2916
2021-07-19 16:16:33 +02:00
Tom Rothamel 417e67d1c7 Merge pull request #2912 from Gouvernathor/patch-4
Document access to the warper functions
2021-07-19 00:14:44 -04:00
Tom Rothamel 56fb31c979 layeredimage: Attribute properties take preference over group properties.
Fixes #2915.
2021-07-18 22:48:12 -04:00
Tom Rothamel a3defaf161 Ensure transforms run at least once when replaced.
This means that each transform will get at least one shot to
update the state before replacement, such that showing a
transform and immediately replacing it has an effect.

Fixes #2914.
2021-07-18 22:31:04 -04:00
Gouvernathor 02fa805355 add pause and instant warpers 2021-07-19 03:37:23 +02:00
Gouvernathor 753d5762b3 fix typo 2021-07-19 03:36:30 +02:00
Gouvernathor 0340857237 Switch to _warper 2021-07-19 03:35:00 +02:00
Gouvernathor 9c38331682 Switch to _warpers 2021-07-19 03:33:29 +02:00
Tom Rothamel 62e4f3017b Maintain the invariant that RollbackLog.current = RollbackLog.log[-1]
This was broken by some rollbacks, especially the sort of minimal rollbacks
that hapened in the console. This would cause the game to lose some
rollback information immediately after a rollback, causing problems.

Fixes #2907.
2021-07-18 19:14:47 -04:00
Tom Rothamel 564a491948 Document that "with None" doesn't update screens.
Fixes #2913.
2021-07-18 17:32:32 -04:00
Tom Rothamel 0a2e29eb33 Forcibly round outlines to integers.
Fixes #2911.
2021-07-18 17:17:50 -04:00
Tom Rothamel a9f89e56ca Add a disclaimer for the M1 simulator.
There seems to be a problem with Apple's OpenGL implementation
where it will crash during a dissolve transform. Documenting
this for now to get 7.4.7 out the door.
2021-07-18 17:09:33 -04:00
Gouvernathor 4a9c9f1158 Link transition classes to warpers 2021-07-18 07:58:31 +02:00
Gouvernathor 37d9e3ce4f Document warper functions dictionary 2021-07-18 07:50:57 +02:00
Tom Rothamel 849426917e Fix use of reverse when None.
This manifested in renpyweb, but could potentially affect all
platforms.

Fixes renpy/renpyweb#17.
2021-07-17 19:16:54 -04:00
Tom Rothamel c7ebc46bcc Window: Only apply xmaximum/ymaximum if set.
This means that in the usual case where it's not set, it doesn't
get forced to (0, 0), which fails in the case of a button inside
a viewport.

Fixes #2910.
2021-07-16 22:06:13 -04:00
Tom Rothamel eba15b1e83 gl2: Store the max mipmap level.
An attempt to address #2847 in the blind.
2021-07-16 17:55:41 -04:00
Tom Rothamel 6b640bf6a7 Pad out text to 32px.
This makes it similar to most other images Ren'Py loads, which
have this sort of padding.

An attempt to address #2847, without being able to repeat it.
2021-07-16 17:53:54 -04:00
Tom Rothamel 3001a8aa90 Document that keyup_a doesn't work. (No unicode, use keyup_K_a.) 2021-07-16 17:35:03 -04:00
Tom Rothamel 7708bf0cbb input: Use a dedicated displayable for caret blinking.
This allows us to reset the blinking when the caret is moved,
which is helpful, as the caret needs to be seen to know where it is.
2021-07-15 22:51:33 -04:00
Tom Rothamel 49017f2df8 input: Use a space rather than ZWSP if no content.
This ensures there is always room for the caret to be
drawn.
2021-07-15 22:04:13 -04:00
Tom Rothamel a15a418a02 Merge pull request #2891 from Gouvernathor/patch-4
Upgrade input's caret
2021-07-15 21:54:08 -04:00
Tom Rothamel 2c99d9df45 Update a DynamicDisplayable before visiting its children.
Fixes #2905.
2021-07-14 23:57:59 -04:00
Gouvernathor f8c89541dc Fix dynamic default value 2021-07-15 05:18:21 +02:00
Gouvernathor 13cdf98fe4 Disable caret blink for older code versions 2021-07-15 05:08:21 +02:00
Gouvernathor f92e9548b4 Catch up with bf1a591 2021-07-15 05:04:17 +02:00
Tom Rothamel baf646e350 Document the animation statement.
Fixes #2906.
2021-07-14 22:15:25 -04:00
Tom Rothamel 5b915758cd Merge pull request #2904 from midgethetree/fix-focus-nearest
Fix focus_nearest bug that ignored keyboard_focus
2021-07-13 22:54:40 -04:00
Tom Rothamel ba9a3f24a2 Merge pull request #2903 from midgethetree/fix-gui-preference-rebuild
Fixed SetPreference rebuild attribute
2021-07-13 22:54:22 -04:00
midgethetree 64db00a54a Update focus.py
Minor tweak to previous commit.
2021-07-13 18:50:59 -04:00
midgethetree 54759af09c Fix focus_nearest bug that ignored keyboard_focus
If buttons with keyboard_focus True are shown but the first focusable element has keyboard_focus False, the focus_nearest function would focus on that first element when not focused on anything. This commit fixes that.
2021-07-13 18:46:51 -04:00
Tom Rothamel 734db16d1c gui: Indicate how to get Ren'Py to overwite some files.
Fixes #2898.
2021-07-13 17:27:02 -04:00
midgethetree 6af6694cae Fixed SetPreference rebuild attribute
Now when SetPreference is defined with rebuild=False the rebuild function won't be called, as said in the documentation.
2021-07-13 16:22:27 -04:00
Tom Rothamel 14bb2d0fff Merge pull request #2893 from Moshibit/master
Improve Skins documentation.
2021-07-12 19:21:58 -04:00
Tom Rothamel 3ec83dae1c Merge pull request #2902 from Siege-Wizard/patch-1
Add mark_*_seen and mark_*_unseen functions
2021-07-12 19:20:35 -04:00
Siege-Wizard 4d3dec4e80 Add mark_*_seen and mark_*_unseen functions 2021-07-12 17:26:24 +02:00
Gouvernathor 51eacdd597 Merge branch 'master' into patch-4 2021-07-12 16:30:01 +02:00
Tom Rothamel bf1a591e2d Remove support for config.key_repeat.
This isn't implemented in SDL2, and hence hasn't worked in some
time.

Fixes #2899.
2021-07-11 20:44:45 -04:00
Tom Rothamel f2be07a13d Reset key modifiers when the keymap changes.
This works around a problem on windows where the windows+space
combination changes the keymap, and hence the lifting of the
windows key is not detected.

Fixes #2849.
2021-07-11 20:29:36 -04:00
Tom Rothamel 77e7b6a9a5 gl2: Compute the location of the text rectangle in virtual space.
Fixes #2848.
2021-07-11 14:43:58 -04:00
Tom Rothamel 65d719ecac Propagate transform state between children of an imagebutton.
Fixes #2864.
2021-07-10 03:41:42 -04:00
Gouvernathor ba8496de63 Merge branch 'master' into patch-4 2021-07-10 04:23:17 +02:00
Tom Rothamel 40fdecc0e0 Start the ATL ST Timebase when first shown.
Rather than at the time a containing screen is first shown.
2021-07-09 22:17:27 -04:00
Gouvernathor f9fe673c42 Remove obsolete gl2 references 2021-07-10 04:16:29 +02:00
Moshibit 39a12ae54d Merge pull request #3 from Moshibit/Moshibit-patch-1
Improve Skins documentation.
2021-07-09 16:49:32 -05:00
Tom Rothamel 730a23255f Merge pull request #2881 from midgethetree/input-autosave
autosave on input config variable
2021-07-08 22:26:28 -04:00
Tom Rothamel addda74f6f Merge pull request #2892 from RubenGarcia/master
Fix typo.
2021-07-08 22:26:13 -04:00
Ruben Jesus Garcia-Hernandez cd859fc572 Fix typo. 2021-07-08 18:15:55 +02:00
midgethetree 3f7831794f Documented config.autosave_on_input 2021-07-08 00:25:36 -04:00
Tom Rothamel 3187445cbe Merge pull request #2882 from Moshibit/master
Update launcher spanish translation
2021-07-07 22:30:22 -04:00
Gouvernathor 9784180a5f Betterer blink rewrite
Co-authored-by: Mal Graty <mal.graty@googlemail.com>
2021-07-08 03:41:05 +02:00
Gouvernathor 39b8d1621a Indentation mismatch 2021-07-08 02:31:00 +02:00
Gouvernathor 6fb1562ce7 Update renpy/display/behavior.py
I didn't test that partial function, I'm assuming it's correct

Co-authored-by: Mal Graty <mal.graty@googlemail.com>
2021-07-08 01:12:30 +02:00
Gouvernathor 57e6b93934 Update caret_blink meaning 2021-07-07 06:14:09 +02:00
Gouvernathor fc98fbb311 Update the meaning of config.input_caret_blink 2021-07-07 06:13:08 +02:00
Gouvernathor 6a1160db1e Change default value type 2021-07-07 06:10:21 +02:00
Gouvernathor 354e145f7a Recreating the blink function 2021-07-07 06:08:46 +02:00
Gouvernathor 9bcff3dada Reimplement with a function-based Transform 2021-07-07 05:17:04 +02:00
Gouvernathor 16012cd54b Document the caret_blink opt-out kwarg 2021-07-07 04:29:31 +02:00
Gouvernathor cef7cad98f Document config.input_caret_blink 2021-07-07 04:26:02 +02:00
Gouvernathor 9b95f5682e Add caret blinking with two opt-outs
Three actually, if you count replacing the caret entirely via the style property
2021-07-07 04:24:47 +02:00
Gouvernathor ec8aec642a Add the input_caret_blink config variable 2021-07-07 04:21:33 +02:00
Gouvernathor c18bb66f7b Document the caret's blinking 2021-07-07 04:20:07 +02:00
Tom Rothamel f1b04dd944 Report when a positional argument follows keyword argument.
Fixes #2887, after a recompile.
2021-07-06 20:40:37 -04:00
Tom Rothamel 9778498bf1 Fix and compat last commit.
Per #2890.
2021-07-06 02:29:24 -04:00
Tom Rothamel 8de11ad0d1 Fix issues with floating point x/ysize.
The main issue was basically that xmaxmium was applied twice,
first in renpy.display.render.render, and then again in Window.render.
There was also a problem with xminimum, which would be scaled to
the smaller xmaximum.

Fixes #2890.
2021-07-05 21:53:35 -04:00
Tom Rothamel 1d57acd021 Merge pull request #2888 from Gouvernathor/patch-4
Update (and fix) launcher french translation
2021-07-04 20:11:28 -04:00
Gouvernathor eaa5d6d7eb Fix typo 2021-07-04 21:39:11 +02:00
Gouvernathor 025ffb4a51 Update french translation 2021-07-04 21:38:33 +02:00
Tom Rothamel 0e4521a629 Report empty parameter defaults as an error.
Fixes #2886.
2021-07-03 23:01:32 -04:00
Tom Rothamel 04dbdd8f30 Remove all use of Displayable._show().
After removing it from Transform, the remaining use (in Viewport)
could be trivally inlined, and so it can be remove, simplifying
Ren'Py.
2021-07-03 22:29:51 -04:00
Tom Rothamel ea977dcf47 Remove Transform.show()/ATLTransform._show()
These methods don't do much in the current Ren'Py. ATL
images are predicted by .visit(), while Transform's child is set
when it's added. The only think it's used for is setting the
default_transform's state, and that was fixed by a direct call
to update_state.()

What's more, _show() has caused problems, first #2834, and now
2021-07-03 22:09:27 -04:00
Tom Rothamel db0fba0159 Document persistent._clear(). 2021-07-02 17:59:24 -04:00
Moshibit cc4f4caf12 Improve Skins documentation. 2021-07-01 22:12:38 -05:00
Moshibit 46248b7e9b Update launcher spanish translation 2021-07-01 21:49:21 -05:00
midgethetree 24f5304412 autosave on input config variable
Almost all places where Ren'Py autosaves have a configuration variable that can be set to False to prevent Ren'Py from autosaving at that time. The exception is the input function. This commit creates a new config variable autosave_on_input which can be set to False to disable autosaving when players input text.
2021-07-01 21:25:23 -04:00
Tom Rothamel af7195faab Merge pull request #2850 from Gouvernathor/patch-2
Doc typos
2021-07-01 19:23:11 -04:00
Tom Rothamel 6ec97b72fd Merge pull request #2866 from Moshibit/master
Launcher's custom theme and fix typos in matrix documentation
2021-07-01 19:21:06 -04:00
Moshibit 6c813493bb Update skins.rst 2021-07-01 15:34:57 -05:00
Moshibit 64ff95c824 Update skins.rst 2021-07-01 12:42:37 -05:00
Moshibit 2c1155af7e Update skins.rst 2021-07-01 12:34:59 -05:00
Moshibit ca47f6c42d custom theme update 2021-07-01 12:15:26 -05:00
Moshibit 298f586565 custom theme update 2021-07-01 12:12:45 -05:00
Moshibit 5d9ac79bc2 custom theme update 2021-07-01 12:11:44 -05:00
Moshibit ed2eb6dfb7 Merge branch 'renpy:master' into master 2021-07-01 12:06:42 -05:00
Tom Rothamel 8747f6b724 Document the audio/ directory.
Fixes #2875.
2021-06-30 21:59:17 -04:00
Tom Rothamel 2d7dfc293d Document that ui.adjustment.ranged can be called more than once.
Fixes #2876.
2021-06-30 21:41:16 -04:00
Tom Rothamel 7a657b6299 Automatically enable dummy drivers for most commands. 2021-06-29 21:27:01 -04:00
Tom Rothamel 997438e86a Say.get_code(): Place with after arguments.
Fixes #2874.
2021-06-28 21:16:12 -04:00
Tom Rothamel a5b01b102f Avoid copying the lists that make up layers.
This fixes a class of problem that could be caused by mixing
show and hide in a single operation, with the copy during hide
stopping things from working.

Fixes #2865.
2021-06-27 20:03:07 -04:00
Tom Rothamel fa2268b2c0 Merge pull request #2872 from Siege-Wizard/patch-1
Fix single achievement progress clear
2021-06-26 18:09:36 -04:00
Siege-Wizard ce3e819404 Fix single achievement progress clear
The code to clear a single achievement was treating dicts as sets.
Additionally, only clearing if the achievement was granted means that the progress is not cleared for half-progress achievements.
2021-06-26 15:24:03 +02:00
Tom Rothamel 32eaef1e36 web: Tweak disclaimers. 2021-06-25 19:39:14 -04:00
Tom Rothamel 5cd716f79d webaudio: Unlock the audio context, where needed. 2021-06-24 00:59:50 -04:00
Tom Rothamel d52a2845c2 Alphabetize. 2021-06-24 00:58:38 -04:00
Tom Rothamel 82af0d31ca Add config.audio_filename_callback. 2021-06-24 00:57:23 -04:00
Tom Rothamel 6e35507663 webaudio: Another fix. 2021-06-23 23:15:12 -04:00
Tom Rothamel 28b1a25143 Fix an issue when the first-played sound loops. 2021-06-23 22:45:31 -04:00
Tom Rothamel 262f939b2c webaudio: Fix minor issues. 2021-06-23 22:38:19 -04:00
Tom Rothamel fa19d60610 webaudio: tts. 2021-06-23 21:45:55 -04:00
Tom Rothamel a2dc2a5166 webaudio: Document that opus and ogg aren't supported in Safari. 2021-06-23 21:36:28 -04:00
Tom Rothamel 7a97807fbd webaudio: Write an error to the console if a file can't be decoded. 2021-06-23 21:32:51 -04:00
Tom Rothamel 912e72346d webaudio: Panning. 2021-06-23 21:27:18 -04:00
Tom Rothamel 92cae35954 webaudio: Cancel fades when a new fade occurs. 2021-06-23 21:10:51 -04:00
Tom Rothamel 381bb2d9eb audio: Change the audio API to remove the use of ms as a unit. 2021-06-23 21:01:59 -04:00
Tom Rothamel ee91d6b5e6 webaudio: Support tight fadeouts. 2021-06-23 20:54:30 -04:00
Tom Rothamel 6dc18a7b10 webaudio: Fadein/out. 2021-06-23 01:06:15 -04:00
Tom Rothamel 6e8074e360 webaudio: Allow a channel to start paused. 2021-06-22 00:59:17 -04:00
Moshibit 62add895b4 Fix typos 2021-06-21 11:48:36 -05:00
Tom Rothamel 6dd32af79d webaudio: Implement more of the methods. 2021-06-21 03:01:44 -04:00
Tom Rothamel 92871c75ae webaudio: Multichannel playback with queue. 2021-06-20 23:07:54 -04:00
Tom Rothamel 9403b74113 webaudio: Proxy audio calls from Python to JS. 2021-06-19 22:49:41 -04:00
Tom Rothamel 08a35003b8 webaudio: Allow audio to be routed through the webaudio module. 2021-06-18 21:49:10 -04:00
Tom Rothamel 6d864f1504 Add _screenshot_pattern.
A way to change the screenshot pattern at runtime.

Per #2857.
2021-06-17 17:52:20 -04:00
Tom Rothamel 9594127c28 Fix regression in last commit. 2021-06-17 00:12:38 -04:00
Tom Rothamel 6c2d2eca77 Audio improvements.
* Do not prefix/suffix silence.ogg.
* Do not attempt to parse flags out of AudioData.

Fixes #2855.
2021-06-15 20:52:49 -04:00
Tom Rothamel 44243cb8ff Change the release name. 2021-06-14 20:55:23 -04:00
Tom Rothamel 74b2ffffb3 Check in an empty 00shaders.rpy.
This will prevent a legacy 00shaders.rpyc from causing problems.
2021-06-12 14:33:44 -04:00
Tom Rothamel 5a1e2aae83 Fix example. 2021-06-12 14:28:00 -04:00
Tom Rothamel 373b421bc8 Fix missing camera_list and camera_transform errors.
Per https://lemmasoft.renai.us/forums/viewtopic.php?p=543637#p543637
2021-06-12 13:17:30 -04:00
Tom Rothamel 739a8f5a47 Remove link to renpy.beuc.net, as it appears to be unmaintained. 2021-06-12 12:29:29 -04:00
Tom Rothamel db30a5a590 Fix ATLTransform._show()
* Do not set the atl_state. (It can set it wrong if the times are 0)
* Do not double-call update state.

This addresses #2834.
2021-06-12 02:48:53 -04:00
Tom Rothamel f7c9058e19 Update sponsor docs. 2021-06-11 20:28:51 -04:00
Tom Rothamel bde233af40 Reload project data when the launcher is reloaded.
This allows reload to happen on more screens.
2021-06-10 18:08:52 -04:00
Tom Rothamel a484cfcb88 Avoid reloading the build info after a build happens, as it was just loaded. 2021-06-09 22:44:21 -04:00
Tom Rothamel 5c8d259258 Move to using startfile to start batch/command files. 2021-06-09 22:21:10 -04:00
Tom Rothamel 2aec07d6b9 Quiet down compileall. 2021-06-09 19:19:44 -04:00
Tom Rothamel bee4359ef1 Jump back to the build screen when distribute is done. 2021-06-09 19:12:16 -04:00
Tom Rothamel 78033f953f Update the macOS icon. 2021-06-09 19:08:34 -04:00
Tom Rothamel a98d2df66a Fix console commands (like the itch butler) on mac. 2021-06-09 18:56:12 -04:00
Tom Rothamel 4917544cd8 A pause without a delay causes a checkpoint. 2021-06-08 21:49:26 -04:00
Tom Rothamel 6b7ebbad7c Change the name.
(So it doesn't feel like an entirely different tool.)
2021-06-07 17:52:10 -04:00
Tom Rothamel 05914ae568 doc: Fix title of mouse.rst. 2021-06-07 17:50:28 -04:00
Tom Rothamel 01b3592167 Update changelog. 2021-06-07 00:59:47 -04:00
Tom Rothamel adc575285a Use the approprate timebase when determining if we're on the first ATL frame.
Fixes #2843.
2021-06-06 20:22:58 -04:00
Tom Rothamel 7355c73382 Better error reporting for duplicate labels. 2021-06-06 16:56:02 -04:00
Tom Rothamel 7528e10f28 Prevent infinite loop of pauses. 2021-06-06 16:23:04 -04:00
Gouvernathor 212820c18a Fix typo 2021-06-06 20:49:19 +02:00
Tom Rothamel a56ffb7efe Documentation improvements. 2021-06-06 12:04:04 -04:00
Tom Rothamel 05016c1ee9 Update keywords. 2021-06-06 11:47:31 -04:00
Tom Rothamel 92f9c15c49 Add the camera statement.
This is similar to the show layer statement, except that
the camera list is used rather than the layer_at_list.
2021-06-06 10:50:26 -04:00
Tom Rothamel 521d0b3b13 Add the concept of the camera_list.
This is essentially the same thing as the layer_at_list, except
that it is not cleared when the scene changes, making it suitable
for a set-and-forget 3d stage.
2021-06-06 10:48:25 -04:00
Tom Rothamel 1f1d7cd5b3 Change the default of scene_clears_layer_at_list to True.
This was producing too many obscure errors, and so the camera
statement will be introduced.
2021-06-06 10:41:02 -04:00
Tom Rothamel cf558e1af3 Fixes to model. 2021-06-05 21:21:55 -04:00
Tom Rothamel 4c098064ee Allow the u_renpy variables to be set through transforms. 2021-06-05 01:44:46 -04:00
Tom Rothamel f26e3cc462 Initial checkin of untested Model displayable. 2021-06-05 01:19:55 -04:00
Tom Rothamel 3178495acd gl2: Rename Model to GL2Model.
This shouldn't exist in a save file, and will free the name Model
for a displayable that constructs Models.
2021-06-04 19:45:35 -04:00
Tom Rothamel 0ad0778796 Document controller change. 2021-06-03 22:29:42 -04:00
Tom Rothamel a9c1424f03 Hide the mouse immediately when a controller event occurs.
Fixes #2843.
2021-06-02 18:15:15 -04:00
Tom Rothamel 99d052bd0c Fix an issue loading TransformState from pre-7.4.5. 2021-06-02 02:13:46 -04:00
Tom Rothamel e37615b0be Better error handling for invalid .rpycs.
- Log .rpyc load failures to log.txt.
- Report the right filed that failed to load.
2021-06-01 18:52:20 -04:00
Tom Rothamel 554a89fc61 Document how invoke_in_thread is expected to be used.
Per the discussion in #2842.
2021-06-01 18:32:55 -04:00
Tom Rothamel 1a00655e42 Name and sponsors. 2021-06-01 00:06:23 -04:00
Tom Rothamel de045d96eb Store and reuse the default renderbuffer.
This fixes an issue on iOS where the renderbuffer doesn't default
to 0, and iOS doesn't seem to work if the renderbuffer isn't bound
to the default.
2021-05-31 21:36:00 -04:00
Tom Rothamel cd30206152 Update changelog. 2021-05-31 16:01:43 -04:00
Tom Rothamel 773694f442 Compile Ren'Py before distributing.
This will ensure that if the Python files were changed for some
reason, they'll be recompiled with the Ren'Py path, and not the
user's.

Fixes renpy/renpyweb#16.
2021-05-31 14:19:45 -04:00
Tom Rothamel a9c3afb0e4 Translate strftime piece by piece.
Passing translated strings to strftime doesn't work on Windows 10
when the locale is set to Korean, but passing the standard codes
does. So we pass the standard codes in, and just include the rest
in the final string.

Fixes #2837.
2021-05-31 01:54:21 -04:00
Tom Rothamel f6ff593501 Have the blur shader use a constant number of iterations.
This overcomes a limitation of webgl and some other gl implementations.

Fixes #2838.
2021-05-30 18:20:49 -04:00
Tom Rothamel 0f0e24936a Update changelog. 2021-05-30 11:11:38 -04:00
Tom Rothamel bd96fa9f51 A modal screen should block all events, evne if the mouse is not in Ren'Py.
Fixes #2836.
2021-05-29 19:19:30 -04:00
Tom Rothamel 7950eb6d80 Fix documentation typo. 2021-05-28 19:45:24 -04:00
Tom Rothamel 31d34a4716 Fix mouse example. 2021-05-28 01:28:12 -04:00
Tom Rothamel a87f37417f Bump version. 2021-05-27 00:04:53 -04:00
Tom Rothamel 71d2c7f2d7 Tweak emscripten_sleep timings.
This was intended to help with audio, and might help responsiveness.
2021-05-26 00:37:26 -04:00
Tom Rothamel 000e22d36e Update changelog. 2021-05-25 20:37:22 -04:00
Tom Rothamel eb83ce6a5a doc: Fix typo. 2021-05-24 22:06:07 -04:00
Tom Rothamel f0bcf007b6 Add compat for a behavior changed in 6e8d622282.
Per https://lemmasoft.renai.us/forums/viewtopic.php?f=32&t=62221&p=543 .
2021-05-24 21:29:42 -04:00
Tom Rothamel 196e7e5ae3 Move the add statement to its own section of the screens documentation. 2021-05-24 20:15:23 -04:00
Tom Rothamel a1309906d0 Document how to get out of corrupted textures.
Fixes #2823.
2021-05-24 19:37:34 -04:00
Tom Rothamel 0f28be2336 Tweak the Character documentation. 2021-05-24 18:36:10 -04:00
Tom Rothamel 2d8770ddda Merge pull request #2815 from Gouvernathor/patch-1
Document Character() not requiring a name
2021-05-24 18:20:41 -04:00
Tom Rothamel 53184c3061 Merge pull request #2825 from Gouvernathor/patch-2
Fix problems.rst problem
2021-05-24 18:19:29 -04:00
Gouvernathor 4575414038 Remove unuseful orphan sentinel 2021-05-24 17:06:45 +02:00
Gouvernathor bcadbffa41 Fix problems.rst problem 2021-05-24 17:03:46 +02:00
Tom Rothamel 2fc3721ef4 Merge branch 'master' of github.com:renpy/renpy 2021-05-23 17:41:44 -04:00
Tom Rothamel 83aee2ecfc Merge pull request #2822 from Gouvernathor/patch-2
Turn renpy.absolute into absolute
2021-05-23 16:55:19 -04:00
Gouvernathor 38564e29eb Turn renpy.absolute occurences into absolute (2/2) 2021-05-23 21:02:11 +02:00
Gouvernathor ec5f9633c1 Turn renpy.absolute occurences into absolute (1/2) 2021-05-23 21:00:46 +02:00
Tom Rothamel 0eeeaef1e3 mousearea: Loses focus to something modal above it. 2021-05-23 14:43:46 -04:00
Tom Rothamel 88c2e4843d Change how TIMEVENT w/ modal works.
Rather than propagating TIMEVENT with modal=True through the
entire tree of displayables, this marks the event as modal
when the modal test passes.

This makes it possible for a displayable to know if it has a
modal displayable in front of it.
2021-05-23 14:41:14 -04:00
Tom Rothamel fb373f00c9 Update the changelog. 2021-05-22 20:04:20 -04:00
Tom Rothamel c92151db70 Remove access to the clear theme.
Right now, it's so similar to the default theme, having two
choices is confusing.
2021-05-21 20:33:13 -04:00
Tom Rothamel e921052bec Avoid a save/reload cycle when changing launcher theme.
Makes the problem found in #2816 less severe.
2021-05-21 19:52:21 -04:00
Tom Rothamel 3ec8d8968e Disable autoreload when an update is happening.
This prevents the update from causing autoreload.
2021-05-21 19:18:41 -04:00
Tom Rothamel 18cf187f78 Merge pull request #2818 from Gouvernathor/patch-2
Fix typo in retro-compatibility mode
2021-05-21 11:24:17 -04:00
Gouvernathor 7ab1b21925 Fix typo 2021-05-21 17:22:08 +02:00
Tom Rothamel a5fd514439 Avoid double-substituting when translating who_prefix and what_prefix.
This is a behavior change, but one that seems correct - we're more
likely to want to translate the prefix and suffix directly, rather
than the previous setup where "Prefix[who]Suffix" was translated.

Compat is included.

Fixes #2817.
2021-05-20 20:51:32 -04:00
Gouvernathor 7bdc09f98e Document Character() not requiring a name 2021-05-19 12:19:36 +02:00
Tom Rothamel fe5bdffba9 Fix documentation typos. 2021-05-19 00:56:47 -04:00
Tom Rothamel 979ba6c310 Check in build artifacts. 2021-05-19 00:30:18 -04:00
Tom Rothamel d8be65b689 Merge pull request #2796 from Andykl/memory-skip-constants
Add `skip_constants` keyword for memory profile functions
2021-05-19 00:10:55 -04:00
Tom Rothamel 91a56b0050 Fix doc typos.
Per #2803.
2021-05-18 23:26:19 -04:00
Tom Rothamel 98fe346057 Reorganize documentation.
Per #2810.
2021-05-18 23:22:42 -04:00
Tom Rothamel b64c722704 Doc fixes.
Fixes #2811.
2021-05-18 23:19:56 -04:00
Tom Rothamel a8b94c5cbe Ensure runtime calls to SLScreen use the SLScreen.const_ast field.
This field stores the AST, when no transcludes are supplied.
At https://lemmasoft.renai.us/forums/viewtopic.php?f=8&t=62163 ,
and issue was reported that was caused by code looking at the
unanalyzed ast, and not the analyzed AST taken from disk.
2021-05-18 23:17:40 -04:00
Tom Rothamel 2ed6477406 Update the GL properties documentation.
Document gl_anisotropic, gl_mipmap, and gl_texture_wrap.

Document all properties with the gl_prefix, now that it is
accepted everywhere.
2021-05-17 19:13:33 -04:00
Tom Rothamel ab53653e98 Add gl_texture_wrap.
This lets the creator define the wrap mode of a newly created
texture.

Fixes #2806.
2021-05-17 09:00:49 -04:00
Tom Rothamel e2806a0fdd Strip gl_ prefixes from Render properties.
This will allow the properties to be documented with the gl_ prefixes,
which should make the docs less confusing.
2021-05-17 08:59:37 -04:00
Tom Rothamel 97f4473510 Update changelog. 2021-05-17 08:47:23 -04:00
Tom Rothamel cd955e873e Do not attempt to draw an empty mesh.
This attempts to address renpy/renpyweb#13.
2021-05-17 01:36:03 -04:00
Tom Rothamel 3e6d9837e1 Store the virtual width and height in text.Layout.
This should cache draws and prevent re-layout of text.
2021-05-16 18:18:58 -04:00
Tom Rothamel da13ff608f Remove the android splashscreen once the first frame is up. 2021-05-16 03:09:23 -04:00
Tom Rothamel e57dbe9309 Add renpy.screenshot_to_bytes.
A way of taking a screenshot that's compatibile with im.Data.

Fixes #2808.
2021-05-14 02:02:16 -04:00
Tom Rothamel 52fd578c9b Sponsors updated. 2021-05-13 19:11:19 -04:00
Tom Rothamel 04e1b3fe1a Add renpy.music.get_loop()
Making it possible to get the current audio loop.
2021-05-13 19:06:36 -04:00
Tom Rothamel ab9b2056e2 Add support for masking out passwords.
That is, replacing the text of the password with some other
character.
2021-05-12 21:35:14 -04:00
Tom Rothamel f0e5c55a92 Save into _quit_slot when the MainMenu action is used.
Fixes #2802.
2021-05-12 20:25:49 -04:00
Tom Rothamel c476ae02d9 gl2: Fix memory leak through textures.
The texture list was getting cleared, but not freed, when the
screen was resized.

Fixes #2805.
2021-05-11 08:50:36 -04:00
Tom Rothamel 90cc7fd134 doc: Fix omitted parts of a sentence in the changelog. 2021-05-11 01:21:09 -04:00
Tom Rothamel d33f9ce8c8 Tweak the name. 2021-05-09 23:40:49 -04:00
Tom Rothamel ebf2541a2b Fix typo. 2021-05-09 23:37:19 -04:00
Tom Rothamel a10eede56b doc: Update changelog and credits. 2021-05-09 23:08:03 -04:00
Tom Rothamel 668aa78210 3dstage: Improve documentation. 2021-05-09 22:21:49 -04:00
Tom Rothamel 3341571309 Fix typo. 2021-05-09 22:16:29 -04:00
Tom Rothamel a3d225eeef Allow perspective to take a single float.
This is the distance to the 1:1 plane.
2021-05-09 22:14:12 -04:00
Tom Rothamel 6cf1d9d0bc doc: Update index. 2021-05-09 02:20:18 -04:00
Tom Rothamel 349dda4afc Change the default far-plane. 2021-05-09 02:19:11 -04:00
Tom Rothamel 991e645983 Doc improvements/fixes. 2021-05-09 02:15:57 -04:00
Tom Rothamel 723c1a2184 Add a fov argument to gui.init. 2021-05-09 02:13:24 -04:00
Tom Rothamel 1191bd44ff Document the 3d stage. 2021-05-09 02:12:35 -04:00
Tom Rothamel afa981802d Check in atl/model docs. 2021-05-08 22:00:55 -04:00
Tom Rothamel 26e0484977 Consoldate string translation scanning in a single file.
Removing a legacy function in the process.
2021-05-07 23:34:32 -04:00
Tom Rothamel 084742864b Accept newlines in single-quoted strings.
Fixes #2791.
2021-05-07 23:25:22 -04:00
Tom Rothamel 71b5316d91 Merge pull request #2799 from Gouvernathor/patch-1
Add config.pause_after_rollback to the doc
2021-05-07 23:18:05 -04:00
Gouvernathor b84c94ceb0 Add config.pause_after_rollback to the doc 2021-05-08 05:17:17 +02:00
Tom Rothamel 7cc7e6e539 Automatically switch to the dummy driver if audio doesn't start.
By enabling the dummy driver, it's possible to play video
even if the audio doesn't work.

Fixes #2793.
2021-05-07 23:04:00 -04:00
Tom Rothamel 1ae4c7724f Use soft checkpoints to fix pause problems.
Fixes #2794, fixes #2789.
2021-05-07 22:44:49 -04:00
Tom Rothamel 6088d74398 Revert "Revert "Make sure roll-forward persists through a pause skipped after rollback.""
This reverts commit 648e764afa.
2021-05-07 22:29:21 -04:00
Tom Rothamel 7910963334 Do not include a screenshot in a save if the interface has not been initialized.
This generally would be an autosave on Android, when the interface can't start
propery. Testing and analysis shows that Ren'Py can load these files without
issue.

Fixes #2797.
2021-05-06 21:01:54 -04:00
Tom Rothamel 648e764afa Revert "Make sure roll-forward persists through a pause skipped after rollback."
This reverts commit 74b8975a9f.

Temporarily, until the issues can be fixed.
2021-05-06 02:59:10 -04:00
Tom Rothamel 4443cfb4bd Merge pull request #2790 from Gouvernathor/patch-1
Add a fallback value for ConditionSwitches
2021-05-05 18:08:29 -04:00
Gouvernathor 963cbe07cf Avoid the exception only in non-developer mode 2021-05-06 00:04:58 +02:00
Andy_kl 45de3635d2 Add skip_constants keyword for memory profile functions 2021-05-05 22:47:11 +02:00
Tom Rothamel 74b8975a9f Make sure roll-forward persists through a pause skipped after rollback.
Fixes #2789.
2021-05-04 00:05:08 -04:00
Tom Rothamel 283574353e DynamicDisplayable: Clear raw_child when child is cleared.
Visit now updates the DD, but it can leave a raw_child around,
so this clears that out as part of the dupliction, leaving
the state as what it was if visit wasn't called.

Fixes #2788.
2021-05-03 23:54:15 -04:00
Tom Rothamel 1e704bf620 gl2: Use sized variants of GL_DEPTH_ATTACHMENT on gles.
The unsigned version is found on GL, the sized variants on GLES,
and it's an ANGLE-breaking errot to mix them.

Fixes #2787.
2021-05-03 20:52:49 -04:00
Gouvernathor 3bcfcc58c8 Add a fallback value for ConditionSwitches 2021-05-04 01:13:23 +02:00
Tom Rothamel 4770ddcbb7 Remove the link to the renpyweb patreon.
Now that it's ended.
2021-05-02 21:48:16 -04:00
Tom Rothamel 456d627086 Visit the child of a DynamicDisplayable.
Fixes #2781, and probably other things as well.
2021-05-02 20:41:50 -04:00
Tom Rothamel e151fd9984 Merge pull request #2721 from jsfehler/patch-2
Replace empty tuple/dict func call with literal
2021-05-02 13:10:54 -04:00
Tom Rothamel 038f5306a1 Disallow reloading in a replay.
Fixes #2314. Fixes #2587.
2021-05-02 13:09:06 -04:00
Tom Rothamel 3427c5d6c7 Merge pull request #2784 from Gouvernathor/patch-1
Keep xfit and yfit from overriding non-boolean fit_first values
2021-05-02 12:58:10 -04:00
Gouvernathor 9dde6770f8 Keep xfit and yfit from overriding str fit_first
fixes #2782
2021-05-02 06:36:44 +02:00
Tom Rothamel 8967662f44 Merge pull request #2779 from Moshibit/master
Update Spanish translation of the launcher
2021-05-02 00:13:41 -04:00
Tom Rothamel 05fbf106bc Merge pull request #2780 from CodePsy-2001/master
Fixed awkward Korean Translations
2021-05-02 00:13:30 -04:00
Tom Rothamel 1c0117d6b1 Remove unneeded depth clear. 2021-05-01 00:34:07 -04:00
Tom Rothamel 7798de30d2 Apply a matrixtransform-like offset/unoffset to zzoom. 2021-04-30 23:47:35 -04:00
Tom Rothamel c32c9182be gl2: Restore support for depth and the depth test.
Also, default to creating a 24-bit depth buffer, in gl2 mode.
2021-04-30 23:46:11 -04:00
Tom Rothamel 1149c814e4 Illusrations for 3D Stage documentation. 2021-04-30 02:57:15 -04:00
Tom Rothamel 84989713a8 Apply adjust_attributes to images that need to be parameterized. 2021-04-29 21:43:02 -04:00
Tom Rothamel ed62d691c5 Mouse docs. 2021-04-28 23:01:21 -04:00
Tom Rothamel ffa1893cbb Make MouseDisplayable.add chainable. 2021-04-28 22:12:26 -04:00
Moshibit d5f722e9e8 Update launcher.rpy 2021-04-28 21:05:02 -05:00
CodePsy 8cdc154a07 Update tutorial_screen_displayables.rpy 2021-04-29 01:44:43 +09:00
CodePsy 6512439006 Update tutorial_playing.rpy 2021-04-29 01:43:04 +09:00
CodePsy 9f96a82675 Update tutorial_distribute.rpy 2021-04-29 01:40:10 +09:00
CodePsy d27fb4e5f6 Update tutorial_director.rpy 2021-04-29 01:38:06 +09:00
CodePsy e8448d4980 Update script.rpy 2021-04-29 01:32:36 +09:00
CodePsy 31e653b449 Update indepth_translations.rpy
It contained a serious translation mistake that had not been corrected for a long time.
ex) directory: game/tl/language -> game/tl/언어 (should not be translated...)
2021-04-29 01:30:30 +09:00
CodePsy aba3ef89a3 Update indepth_transitions.rpy 2021-04-29 01:25:47 +09:00
CodePsy 2f7cee7364 Update indepth_text.rpy 2021-04-29 01:19:57 +09:00
CodePsy 295d2bec3e Update indepth_style.rpy 2021-04-29 01:16:53 +09:00
CodePsy 0d43c13a13 Update indepth_minigame.rpy 2021-04-29 01:11:30 +09:00
CodePsy 9b244ccaaa Update indepth_displayables.rpy 2021-04-29 01:07:22 +09:00
CodePsy 487c75a7db KoreanTranslationUpdated
Fixed awkward translations...
2021-04-29 01:04:15 +09:00
Moshibit 31ae188341 Update launcher.rpy 2021-04-28 07:05:35 -05:00
Moshibit 5ad5c86adf Update Spansih translation 2021-04-28 07:04:41 -05:00
Moshibit 696e7edeac Merge pull request #2 from renpy/master
update from renpy-master
2021-04-28 07:02:01 -05:00
Tom Rothamel c667a3d33f Update changelog. 2021-04-28 01:02:35 -04:00
Tom Rothamel 83bda35820 Merge pull request #2484 from Andykl/py-3-threading
Make threading function names consistent to snake_case
2021-04-27 23:43:11 -04:00
Tom Rothamel b4ea1268b8 Update sponsors doc. 2021-04-27 23:41:53 -04:00
Tom Rothamel a21c85e3f8 Various fixes to renpy.get_mouse_name() 2021-04-27 01:25:27 -04:00
Tom Rothamel c5d1729352 Reset the mouse when a default mouse is not given.
Fixes #2776.
2021-04-27 01:23:35 -04:00
Tom Rothamel 747a47bb74 steam: Improve MacOS steam support.
* Put steam_appid.txt in the MacOS directory.
* Ignore steam_appid.txt wherever it is.
2021-04-26 20:47:38 -04:00
Tom Rothamel d801dc9f7a Add caveat. 2021-04-25 22:33:28 -04:00
Tom Rothamel d32c6c2a4f Add config.adjust_attributes.
Per #2775.
2021-04-25 22:24:46 -04:00
Tom Rothamel 0c6d5e8092 lint: Only set the error code if an option are giving.
Setting the error code breaks the launcher, and while it could be
fixed, it also breaks existing CI tooling. So make the change for

Fixes #2772.
2021-04-25 21:32:35 -04:00
Tom Rothamel 10bd81ef50 mousedisplayable: Allow changing and animated mice. 2021-04-24 22:08:33 -04:00
Tom Rothamel d0e4b33f4b Change the default for u_lod_bias to -.5, and make if configurable.
The goal of this is to make sure we're always scaling down, but only
by one mipmap level, so as much information as possible is represented
in the final image, without any being lost by a too-big mipmap.

Per #2764.
2021-04-23 22:44:25 -04:00
Tom Rothamel 4a74d3a763 Open errors and tracebacks in an editor if Ren'Py is run from the launcher. 2021-04-22 22:24:44 -04:00
Tom Rothamel 80eeb9ae1f Add the Swing transition to Ren'Py. 2021-04-21 20:24:31 -04:00
Tom Rothamel b175042357 Allow anything with a __doc__ string to be documented. 2021-04-21 20:24:06 -04:00
Tom Rothamel 213e027b3c Merge pull request #2703 from Gouvernathor/patch-2
Launcher Dark Theme
2021-04-20 22:06:04 -04:00
Tom Rothamel e3a69e21b6 Merge pull request #2771 from midgethetree/bug-hard-pause-unfocused-dismiss
make hard pause undismissable
2021-04-20 22:03:03 -04:00
midgethetree de350efca3 make hard pause undismissable
In projects where 'dismiss_unfocused' has been provided keys, these keys will also dismiss unfocused hard pauses. Generally this is undesirable, so this commit makes it so hard pauses use an empty list for the dismiss_unfocused parameter of the say behavior.
2021-04-19 11:31:07 -04:00
Tom Rothamel 47765c703e stage: Camera movement. 2021-04-19 02:03:03 -04:00
Tom Rothamel 58d73e9ea3 Check and document order of operations for rotation. 2021-04-18 17:21:24 -04:00
Tom Rothamel f2a30b8a02 perspective: Fix anchor coordinates. 2021-04-18 15:32:21 -04:00
Andy_kl 836bc3dfc6 Fix default value of transform property nearest
Per #2770
2021-04-18 19:40:01 +02:00
Tom Rothamel efd6a5d042 Add the MouseDisplayable displayable.
This moves an image around to where the mouse cursor would be,
making it possible to emulate the mouse cursor using displayables.
(And probably other effects.)
2021-04-18 00:13:33 -04:00
Tom Rothamel 293d07f539 Add config.mouse_displayable.
This allows the mouse to be drawn by a displayable, as an alternative
to the default or hardware-accelerated mouse cursors.
2021-04-17 23:57:09 -04:00
Tom Rothamel 758131f5fd Undocument PerspectiveMatrix. 2021-04-17 22:22:30 -04:00
Tom Rothamel fd6cdffa43 gl1: Avoid the texture test after the first start.
Fixes #2762.
2021-04-16 23:51:19 -04:00
Tom Rothamel 163f696d3f If a renderer is given by the environment, override config.gl2.
This is for testing purposes.
2021-04-16 23:51:19 -04:00
Tom Rothamel 4da0ec62cb Merge pull request #2718 from lent1-andrealphusgames/layeredimages_unknown_tags
Avoid unknown attributes warning in layeredimage
2021-04-15 15:46:34 -04:00
Tom Rothamel 391dc101b7 Clear any residual events at android start.
This probably fixes #2768.
2021-04-14 01:34:39 -04:00
Tom Rothamel f63be5c57a gl2: Use the correct internal type when creating a RenderBuffer.
This fixes display on Android.
2021-04-14 01:24:14 -04:00
Tom Rothamel 1103d0397e Reload the game without saving when at the main menu.
Fixes #2761.
2021-04-14 00:35:27 -04:00
Tom Rothamel 77b7a9e116 Improvements to transitions on layers.
* When a layer transition is occuring, use the old (rather than new)
  state for the global transition.
* Allow layer transitions to persist between interactions.
* The scene statement clears layer transitions.

Fixes #2763.
2021-04-14 00:25:09 -04:00
Tom Rothamel ccdb23c6bd Document incompatible changes. 2021-04-13 20:00:47 -04:00
Tom Rothamel ecdfda0a08 Change the behavior of scene to not clear the layer at list.
The goal of this change is that the 3d stage can be set up once,
and then left for the entire game.

Fixes #2766.
2021-04-13 19:52:43 -04:00
Tom Rothamel a38e8c2a05 Add the zzoom property.
If true, the image is scaled so it's 1:1, even if it's not on the
1:1 plane.
2021-04-13 01:19:31 -04:00
Tom Rothamel 14b4a49e01 Fix {x,y}{pos,anchor} inheritance.
Setting these variables to None is required to have diff4 work
properly.
2021-04-13 00:25:09 -04:00
Tom Rothamel 05c5db7e11 Redo how z works.
Now, the distance to the 1:1 z plane is specified as part of the
perspective, which means zanchor (and its weirdness) can go
away.
2021-04-12 21:58:11 -04:00
Tom Rothamel 1220be752c Remove development test. 2021-04-12 21:55:17 -04:00
Tom Rothamel 2b34259319 Centralize the definition of transform properties.
This extends the work done for the uniforms and gl_properties
by making all non-alias properties defined in a single place
in transform.py, and then updating the other data structures
required.
2021-04-12 21:06:55 -04:00
Tom Rothamel 20a29b8047 Merge pull request #2427 from Gouvernathor/master
Porting ImageDissolve to the new matrixcolor system
2021-04-12 19:24:28 -04:00
Gouvernathor 1ece5c9c55 replace config.gl2 with display.render.models 2021-04-12 20:33:01 +02:00
Gouvernathor d50cbc33bc fix typo 2021-04-12 20:25:27 +02:00
Tom Rothamel df85cb5748 atl: Add matrixanchor.
This is the origin of the transform matrix relative to the
transform, which tends to ease writing matrix transforms.
2021-04-11 23:54:47 -04:00
Tom Rothamel 94031c2a69 Default to gl2 mode for new releases. 2021-04-11 22:33:10 -04:00
Tom Rothamel ae5b5c76bf In the mac app, move the Python library into Resources.
This will prevent codesign from trying to sign it, making
notarization possible again.

Fixes #2759.
2021-04-10 23:30:33 -04:00
Tom Rothamel f39e64fd25 Initial work on perspective rendering. 2021-04-09 22:24:00 -04:00
Tom Rothamel bf1f499678 Document size limits for config.mouse. 2021-04-08 09:53:04 -04:00
Tom Rothamel a7d0751872 Add zpos, zanchor, and perspective properties.
Just at the Transform/ATL level, as these still need to be given
meaning.
2021-04-07 21:55:01 -04:00
Tom Rothamel a8adeace3f Fix the type of the blur bias.
Fixes #2757.
2021-04-06 22:51:44 -04:00
Tom Rothamel 6f20c629f0 gl2: Use a Renderbuffer for the color attachment.
Since we're only copying from the framebuffer, we can use a renderbuffer
rather than a texture as the rendering targer. This should be a more
optimized path.
2021-04-06 21:24:15 -04:00
Tom Rothamel 624973d518 Properly match string ends wehn doing newline quoting.
This may need a force recompile to work. Fixes #2756.
2021-04-06 02:23:15 -04:00
Tom Rothamel 25403b6cdf Merge pull request #2755 from Andykl/live2d-fix-dropped-curve
Add implicit Step with last reached value till the end of the motion
2021-04-05 21:02:07 -04:00
Andy_kl 3a61739d69 Add implicit Step with last reached value till the end of the motion 2021-04-05 01:33:01 +02:00
Tom Rothamel b8fc937781 Add release_changes script.
This shows the files that were added and removed between
releases.
2021-04-04 13:26:54 -04:00
Tom Rothamel 7983d80527 lint: Do not warn when defining a builtin name the creater is expected to set.
Fixes #2753.
2021-04-03 19:47:41 -04:00
Tom Rothamel b0842a4f1b Report if a text that doesn't take a close is closed.
Fixes #2752.
2021-04-03 14:15:19 -04:00
Tom Rothamel a5920b2200 Re-add part of acc19171c3.
It was necessary to undo the combining of wait and get, as
this could lead to wait returning None when factor == 0, and
display failing.

However, the last-frame logic makes sense, so re-include it.
2021-04-02 23:16:32 -04:00
Tom Rothamel cee512ea61 Revert "Fixes for Live2D"
This reverts commit acc19171c3.
2021-04-02 23:12:07 -04:00
Tom Rothamel 8aa0cf01cd Use the field for equality comparisons in VariableValue or FieldValue.
Fixes #2747.
2021-04-01 17:53:58 -04:00
Tom Rothamel 360751b071 Set the exit code to 1 when lint fails.
Fixes #2746.
2021-03-31 17:18:39 -04:00
Tom Rothamel 3f4bee5558 Add the matrixtransform transform property.
This allows the reverse matrix to be specified, with the forward
matrix being derived from its inverse.
2021-03-30 19:44:33 -04:00
Tom Rothamel 7229cc87ef Add transform matrices. 2021-03-30 01:13:38 -04:00
Tom Rothamel 15721dce53 Fix typo. 2021-03-29 19:06:24 -04:00
Tom Rothamel 06b4acea6e matrix: Add a method to compute the inverse of a matrix. 2021-03-28 23:02:39 -04:00
Tom Rothamel 349b204405 Better documention for labels with parameters.
Per #2741.
2021-03-28 14:54:28 -04:00
Tom Rothamel 5a441def70 Indicate that renpy.windows (et al) are true/false, not True/False.
Fixes #2739.
2021-03-27 12:51:07 -04:00
Tom Rothamel 4ebf1d0df8 Allow namespaces to determine if define marks a variable as pure.
This makes older code, that might define persistent.whatever = True,
work correctly with screen optimizations.
2021-03-27 00:30:41 -04:00
Tom Rothamel b5a8ba2b1b Use the flat steam API for get_account_id.
This works around a bug on windows (but not on wine) where crashes
seem to happen when a method is called on CSteamID.
2021-03-26 00:26:47 -04:00
Tom Rothamel ba44e94bfd Commit keywords. 2021-03-25 22:55:13 -04:00
Tom Rothamel 1a0a569a12 Change how /** works at the end of a build.classify patter.
Per #2737, it's a bit confusing that excluding /** will exclude
all files in the directory. To fix this, the exclude behavior
is changed to not match a directory that is matched by the pattern
without a trailing * or **.

Fixes #2737.
2021-03-25 22:52:49 -04:00
Tom Rothamel a98c667b97 Revert "distribute: * and ** must match 1 character."
This reverts commit 10904d65c4.
2021-03-25 18:35:52 -04:00
Tom Rothamel c0ddba8c4b Improve handing of TIMEEVENT and modal.
With these changes, a modal TIMEEVENT is introduced, that is
created when a modal displayable ignores an event. This is
handled differenty, most notibly by not being used for
skipping, while still being used for pause and for
timers.
2021-03-24 23:48:46 -04:00
Tom Rothamel cdf4f71d88 Restore the handling of modal screens.
This probably is a fix for #2736, and maybe #2733.
2021-03-24 23:14:51 -04:00
Tom Rothamel 10904d65c4 distribute: * and ** must match 1 character.
Per #2737.
2021-03-23 23:26:06 -04:00
Tom Rothamel f789128208 Avoid pausing after rollbacks.
This tends to improve rollback by having it wind up on a 'real'
statement and not a pause.

Fixes #2731.
2021-03-23 23:11:18 -04:00
Tom Rothamel 639d5d9ce1 Merge pull request #2735 from xavi-mat/master
Update Spanish translation
2021-03-22 19:53:34 -04:00
xavi-mat b5d552f9b3 Update Spanish translation
Missing strings.
2021-03-22 21:43:43 +01:00
xavi-mat 8bd72ea824 Update Spanish translation
Missing strings about JDK
2021-03-22 21:42:03 +01:00
xavi-mat 9dc3152ddf Typo in Spanish translation 2021-03-22 21:27:13 +01:00
xavi-mat 0f98104e05 Typo in Spanish translation 2021-03-22 21:26:50 +01:00
xavi-mat fc4357ea02 Typo in Spanish translation 2021-03-22 21:26:11 +01:00
Tom Rothamel 02c009a859 Merge pull request #2730 from sagittaeri/feature/audio_filename_sync_channel
Can now sync to channel when playing audio
2021-03-21 14:04:25 -04:00
KG c8952a9f86 Added documentation for feature 2021-03-21 16:13:45 +11:00
Tom Rothamel 0fda299d86 Update the changelog for blend. 2021-03-20 21:36:49 -04:00
Tom Rothamel 97156ba471 atl: Add the blend property.
This selects a blend mode.
2021-03-19 22:50:24 -04:00
KG 04e8f89655 Can now sync to channel when playing audio
Ensures that we can sync the audio clip time of new music layer to a channel we specify. This will allow the music layers to remain in sync after save/load (<from X> doesn't sync after save/load).

Usage:
<sync [channel_name]>[audiofilename.ogg]
2021-03-20 12:18:18 +11:00
Tom Rothamel 50aedffdd8 Bump version. 2021-03-18 19:33:39 -04:00
Tom Rothamel ed17bcfc84 Change the name of the release. 2021-03-17 20:51:24 -04:00
Tom Rothamel b8d1b9a4dc Update changelog. 2021-03-16 23:49:48 -04:00
Tom Rothamel ea6de5a7af Update the gl2 function list. 2021-03-16 23:08:46 -04:00
Tom Rothamel 1d8f8a4220 live2d: Support additive and multiplicative blending.
Fixes #2723.
2021-03-16 22:47:17 -04:00
Tom Rothamel 040c7180de Add gl_blend_func.
This property makes it possible to use glBlendFuncSeparate and
glBlendEquationSeparate to customize how pixels are drawn to
the framebuffer.
2021-03-16 22:42:32 -04:00
Tom Rothamel e1e8deee2f Separate texture pixel-perfection from texture size limits.
Fixes #2725, the reina test, which was ultimately cause by coordinates
being wrong when an 8192x8192 texture was shrunk down to 4096x4096.
2021-03-15 23:10:32 -04:00
Tom Rothamel b782ebc0f6 Update the changelog. 2021-03-14 17:43:46 -04:00
Tom Rothamel 7c0d6e3b5f Document old-game. 2021-03-14 17:37:30 -04:00
Tom Rothamel 8f306d06f6 Update sponsor docs. 2021-03-14 17:03:53 -04:00
Tom Rothamel 51262b2062 gl1: Avoid adjusting the size of a maximized window.
Fixes #2722.
2021-03-13 23:13:22 -05:00
Joshua Fehler a1a381884d Replace empty tuple/dict func call with literal 2021-03-13 21:19:54 -05:00
Tom Rothamel 67773d9fe3 live2d: Reset opacities with other parameters. 2021-03-13 21:08:02 -05:00
Andy_kl 211f5368a4 Add Cubism zip files to ignore 2021-03-13 21:33:29 +02:00
Tom Rothamel 2f2f5a3c30 Merge pull request #2720 from Gouvernathor/patch-1
Fix persistent Achievements backend
2021-03-13 13:30:58 -05:00
Gouvernathor d2116b6216 Clear progression when clearing an achievement
Otherwise a state of limbo would happen, when you're at or above the max progression level, but you don't have the achievement. Unlocking the achievement then would require to make a progression even higher than previously recorded.
Also there wouldn't be any way to reset progression towards an achievement.
2021-03-13 19:29:13 +01:00
Gouvernathor 9b7f14aafb Avoid registering invalid values 2021-03-13 19:24:17 +01:00
Tom Rothamel 8cf969bfee Add mixer functions. 2021-03-12 17:30:57 -05:00
Lent1 130eb08652 Avoid unknown attributes warning when defining -attribute and variant in attribute_function 2021-03-12 11:41:55 +01:00
Tom Rothamel 18e87547d1 Merge pull request #2717 from Andykl/fix-l2d
Fixes for Live2D
2021-03-12 00:00:51 -05:00
Andy_kl acc19171c3 Fixes for Live2D 2021-03-12 02:08:32 +02:00
Tom Rothamel 2b90a11621 Add support for old-game.
Old-game is a new directory that stores the .rpyc files from the
last release of the game. Unlike in the rest of Ren'Py, the .rpyc
files in old-game can be checked in - they're not intended to be
changed on a regular basis. Ren'Py preferentially uses the .rpyc
files in old-game when assigning names to statements, which means
that even if something prevents the .rpyc files from being
generated, the old-game .rpycs will be used.
2021-03-10 23:14:08 -05:00
Tom Rothamel 0f7edd23e4 Correct use of config.allow_underfull_grids.
Fixes #2714.
2021-03-10 01:59:45 -05:00
Tom Rothamel e407ac2f58 Report an error for default/define renpy.x.
This is an error that causes weird errors, so it's good to prevent
it.
2021-03-09 23:00:20 -05:00
Andy_kl ef7fc34984 Fix regression of 79296865
Close #2712
2021-03-09 21:01:03 +02:00
Tom Rothamel e56319e11c Bump version. 2021-03-09 00:56:34 -05:00
Tom Rothamel 1064b88875 py3: Compat unicode. 2021-03-08 02:08:37 -05:00
Tom Rothamel beb26aac8a py3: re._pattern_type -> re.Pattern.
Per #2412.
2021-03-08 00:23:04 -05:00
Tom Rothamel 263f3caf13 Update changelog. 2021-03-07 15:34:22 -05:00
Tom Rothamel 4495531585 Merge pull request #2708 from midgethetree/improve-small-gui
Improve small gui
2021-03-07 15:30:52 -05:00
Tom Rothamel 0091838950 Report errors loading GL functions. 2021-03-07 13:31:38 -05:00
Tom Rothamel dd8739ad3f Add config.log_gl_shaders and config.log_gl_extensions.
These should make looking at log.txt files easier, as the important
information is no longer buried under lists of extensions that
Ren'Py doesn't often use.
2021-03-07 13:04:56 -05:00
Tom Rothamel bfe27a29fd Remove the use of gl.uguu.angle.
While it had been used to switch between GLES and ANGLE on windows,
in the most recent SDL2 ANGLE loads anyway. So there isn't much
use in this module, when used with renpy.exe (rather than in
a development mode).
2021-03-07 12:34:35 -05:00
Tom Rothamel 0d918778be gl/gl2: Improve handing of bad GL stacks.
- Fix failover from gl2 to angle2.
- Improve the placement of GL_FAIL_<renderer>, and add it to gl2.
2021-03-07 01:52:00 -05:00
Tom Rothamel 8a5db8b5ed Delete the window when changing renderers.
This let SDL2 create the window again after the GL/GLES settings
have been set. The window creation code is responsible for
selecting the EGL config, and so it's important that it run
in GLES mode.

Fixes #2704.
2021-03-07 01:43:48 -05:00
Tom Rothamel e4e32c1759 Fix tyop.
Fixes #2709.
2021-03-05 20:09:46 -05:00
midgethetree 312dc3ad69 changed slider_pref to slider
The slider_pref style prefix is not used anywhere in the screens. The slider prefix is presumably what was meant to be changed here.
2021-03-05 13:31:06 -05:00
midgethetree 3114f0e061 added choice button text size to small gui variants
Added a "small" variant of gui.choice_button_text_size so the text in choice buttons will by default be larger on small-screen devices.
2021-03-05 13:26:43 -05:00
Tom Rothamel 27a6157d3e Fix typo.
Fixes #2706.
2021-03-04 21:50:15 -05:00
Tom Rothamel 07925c94b4 Merge pull request #2705 from renpy/Beuc-patch-1
doc: clarify video library used
2021-03-03 22:16:17 -05:00
Beuc 9a9c682505 doc: clarify video library used 2021-03-03 21:03:49 +01:00
Gouvernathor 8c8f2ac255 remove unnecessary Action 2021-03-03 16:27:28 +01:00
Gouvernathor 70b1cc58c0 From persistent.dark_theme to persistent.theme 2/2
Now there's the default theme, with generated checkboxes and scrollbar centers but pixel-perfect to the original,
there's the clear theme, same as the default but with generated window and background,
and there's the dark theme, which is the clear theme with tweaked colors.
2021-03-03 12:17:56 +01:00
Gouvernathor c09e2e301a From persistent.dark_theme to persistent.theme 1/2 2021-03-03 12:14:39 +01:00
Tom Rothamel c3acf457f4 Initialize the field storing stats_max on PersistentBackend.
Fixes #2701, introduced by merging #2627.

Also renames the field storing stat_max to self.stat_max.
2021-03-02 23:00:07 -05:00
Tom Rothamel d056f45d84 Add config.main_menu_music_fadein. 2021-03-02 22:46:34 -05:00
Tom Rothamel 5dde40fba4 Fix missing arguments. 2021-03-02 02:11:31 -05:00
Tom Rothamel 66d74400d4 Update changelog and sponsor doc. 2021-03-02 00:16:53 -05:00
Gouvernathor f81483626a Add dark them option in preferences
As change are taken into account in an init block (the skin.rpy user customization sure are), there needs to be a full reload.
Luckily, for the launcher it doesn't take much time.
2021-02-25 00:00:19 +01:00
Gouvernathor 1745d47af0 Delete vscrollbar_center.png 2021-02-24 22:49:00 +01:00
Gouvernathor d069269e57 Delete scrollbar_center.png 2021-02-24 22:48:53 +01:00
Gouvernathor 08d8b7cfcf Delete checkbox_full.png 2021-02-24 22:47:05 +01:00
Gouvernathor 9babae6c85 Delete checkbox_empty.png 2021-02-24 22:46:58 +01:00
Gouvernathor e7c9ccc69e Various
Recreating l_checkbox_box (but as a transform)
Taking into account the image files put by players in the launcher directory
Remains to delete the scrollbars and the checkbox files from the launcher directory
2021-02-24 22:46:38 +01:00
Gouvernathor d587dee63b Add theme switch and fix checkbox offset
Remains to change the dark theme parameters
2021-02-24 17:29:57 +01:00
Gouvernathor a41ee6b0fc Avoid image and transform names spending 2021-02-23 19:01:58 +01:00
Gouvernathor 80dd973b9d Un-diskloading the launcher skin, V1
remain window and background
2021-02-23 18:49:51 +01:00
Andy_kl 49ddd672b3 Make threading function names consistent to snake_case 2020-12-03 01:43:04 +02:00
Gouvernathor cf199aa24e Use gl2 functionalities only when activated
Re-enabled the old implementation when config.gl2 is not active
2020-10-30 03:53:52 +01:00
Gouvernathor 6a3e264055 fixed documentation 2020-10-28 18:14:03 +01:00
Gouvernathor 64e8c8c921 Removed references to im and the old Matrix system
Allowed any (fully opaque) displayable to take the role of the image controlling the transition
2020-10-28 17:11:22 +01:00
Andykl e9c03a18d5 Fix 2020-10-09 05:40:37 +02:00
Andykl cac5921026 Update missed RawTime.mark_constant 2020-10-09 04:38:11 +02:00
Andy_kl c48447ba3c Do SL atl_transform precompilation if it possible 2020-10-09 04:38:11 +02:00
Andy_kl 9b66ce88b4 Compile ATLBlock after analysis if it's a constant.
This allows pre-compiling all constants ATLs that don't have parameters (or have empty), including ATLs defined for show, scene and show layer statements
2020-10-09 04:38:11 +02:00
Andy_kl a67f2b7f9e Make the ATL analyze constant variables
This change adds parameter passing during ATL analysis, so it includes processing of constant variables and pure functions.
This allows more ATL based images and ATL transforms to compile themselves in the init phase.
Anonymous transforms also take them into account based on screen analysis.
2020-10-09 04:38:10 +02:00
Andykl 661d2e9087 Update docs PEP links 2020-10-08 08:46:47 +02:00
Andykl 99be73d984 Fix parameters letated mistake in lint 2020-10-08 08:42:17 +02:00
Andykl 2689dac16b Still was regression 2020-10-08 08:39:29 +02:00
Andykl 6fb3ce7438 Fix regression 2020-10-08 08:34:55 +02:00
Andykl 63a6aa7aa6 Update Ren'Py parameters and arguments according python 3 2020-10-08 07:59:48 +02:00
Joshua Fehler 7f62175f7a Add equality comparison to HistoryEntry 2020-02-18 21:49:04 -05:00
whitesource-bolt-for-github[bot] ae4b1f6e40 Initial WhiteSource configuration file 2019-05-02 15:10:16 +00:00
908 changed files with 120910 additions and 58845 deletions
-13
View File
@@ -1,13 +0,0 @@
[run]
plugins = renpycoverage
[report]
omit =
keywords.py
style.pxd
*pygame_sdl2*
*.rpyc
*/game/*
*style_*_functions.pyx
renpy/gl/gl.pyx
renpy/gl/gl1.pyx
+103 -79
View File
@@ -10,102 +10,126 @@ ehthumbs.db
ehthumbs_vista.db
[Dd]esktop.ini
# Python related files.
*.pyc
*.pyo
*.pyi
*.egg-info
# Editor/tool files.
*~
*.bak
.gdb_history
# Compiled Ren'Py files.
*.rpyc
*.rpyb
*.rpymc
*.pyc
*.pyo
*~
*.bak
saves
tmp
cache
env
# Ren'Py log files.
log.txt
errors.txt
traceback.txt
lint.txt
styles.txt
# Created directories.
saves/
tmp/
cache/
# Executables.
/renpy.exe
/renpy2.exe
/renpy3.exe
/renpy-32.exe
/renpy.sh
/renpy2.sh
/renpy3.sh
/renpy.app
/renpy2.app
/renpy3.app
/7z.sfx
# Libraries.
/lib
# Platforms.
/rapt
/rapt2
/rapt3
/renios
/renios2
/renios3
/web
/web2
/web3
# Docs.
/sphinx/source/inc
/sphinx/source/thequestion.rst
/doc
/doc-web
/LICENSE.txt
# Gui template.
/gui/game/gui
/android
/build
/dist
/dists
/renpy.app
# Editors.
/jedit
/lint.txt
/renpy.code
/*testing*
/screenshot*
/renpy.exe
/renpy-32.exe
/renpy.sh
/lib
/lib.old
/lib2
/lib3
/doc
/.pydevproject
/.pydevproject.bak
/.project
/.cproject
/.settings
/LICENSE.txt
/templates/english/README.html
/the_question/README.html
/tutorial/README.html
/renpy/angle/*.pyx
/renpy/angle/*.pxd
/renpy-ppc.zip
/module/build
/module/gen*
/editra
/atom
/launcher/game/theme
/launcher/game/script_version.rpy
/vscode
# Generated source.
/renpy/vc_version.py
/module/gen/
/module/gen3/
/module/gen-static/
/module/gen3-static/
/tutorial/game/tutorial_director.rpy
# Module build.
/module/build
/module/dist
/module/emscripten-static
# Download target.
/dl
renpy/vc_version.py
.externalToolBuilders
/rapt
/evil
/iaptest
# Pygame_sdl2.
/pygame_sdl2
/renios
/steam_appid.txt
/.coverage
/id
/ai
/interface_7
/htmlcov
/the_question*/.android.json
/WINDOWS.rst
/old
/*-all/
/*-win/
/*-mac/
/*-linux*/
/*-dists/
doc-web
# Updater.
update.pem
sphinx/source/inc
sphinx/source/thequestion.rst
tutorial/game/tutorial_director.rpy
launcher/theme
module/emscripten-static/
web/
# Steam.
steam_appid.txt
/steamapi.py
# Android.
*.keystore
# Type analysis.
/typings
# Live2D
cubism
glexperiment
live2d
rapt2
rapt3
renios2
renios3
notarized
CubismSdkForNative-4-*.zip
# Created files.
/screenshot*
.android.json
# Old files.
/0old
# Works in progress, throwaway scripts, etc.
/scratch
/*-dists
/c
/cg
/.vscode/launch.json
-2
View File
@@ -1,2 +0,0 @@
[pep8]
ignore=E123,E20,E22,E501,E702,E266,E265,E262
+214
View File
@@ -0,0 +1,214 @@
{
"files.watcherExclude": {
"**/renpy/0old/**" : true,
"**/renpy/atom/**" : true,
"**/renpy/cubism/**" : true,
"**/renpy/dists/**" : true,
"**/renpy/dl/**" : true,
"**/renpy/doc/**" : true,
"**/renpy/doc-web/**" : true,
"**/renpy/jedit/**" : true,
"**/renpy/renpy*.app/**" : true,
"**/renpy/tmp/**" : true,
"**/renpy/web/**" : true,
},
"files.exclude": {
"0old": true,
"**-dists": true,
"**/*.pyc": true,
"**/*.pyo": true,
"renpy/**/*.pyi": true,
"**/*.rpmc": true,
"**/*.rpyc": true,
"**/__pycache__": true,
"**/screenshot-*": true,
"7z.sfx": true,
"atom": true,
"cubism": true,
"dl": true,
"doc": true,
"doc-web": true,
"jedit": true,
"lib*": true,
"live2d": true,
"rapt*": true,
"renios*": true,
"renpy*.app": true,
"renpy*.exe": true,
"tmp": true,
"web": true,
"**/*.rpa": true,
"**/*.rpymc": true,
"**/cache/": true
},
"python.languageServer": "Pylance",
"python.analysis.typeCheckingMode": "basic",
"python.analysis.diagnosticMode": "workspace",
"python.linting.pylintEnabled": false,
"python.analysis.diagnosticSeverityOverrides": {
"reportMissingModuleSource": "none"
},
"esbonio.server.enabled": true,
"esbonio.sphinx.confDir": "",
"renpy.excludeCompiledFilesFromWorkspace": true,
"renpy.watchFoldersForChanges": false,
"renpy.warnOnInvalidVariableNames": "Disabled",
"renpy.warnOnInvalidFilenameIssues": "Disabled",
"renpy.warnOnIndentationAndSpacingIssues": "Disabled",
"editor.tokenColorCustomizations": {
"textMateRules": [
{
"scope": "renpy.meta.plain",
"settings": {
"fontStyle": ""
}
},
{
"scope": "renpy.meta.i",
"settings": {
"fontStyle": "italic"
}
},
{
"scope": "renpy.meta.b",
"settings": {
"fontStyle": "bold"
}
},
{
"scope": [
"renpy.meta.u",
"renpy.meta.a"
],
"settings": {
"fontStyle": "underline"
}
},
{
"scope": "renpy.meta.s",
"settings": {
"fontStyle": "strikethrough"
}
},
{
"scope": "renpy.meta.i renpy.meta.b",
"settings": {
"fontStyle": "italic bold"
}
},
{
"scope": "renpy.meta.i renpy.meta.u",
"settings": {
"fontStyle": "italic underline"
}
},
{
"scope": "renpy.meta.i renpy.meta.s",
"settings": {
"fontStyle": "italic strikethrough"
}
},
{
"scope": "renpy.meta.b renpy.meta.u",
"settings": {
"fontStyle": "bold underline"
}
},
{
"scope": "renpy.meta.b renpy.meta.s",
"settings": {
"fontStyle": "bold strikethrough"
}
},
{
"scope": "renpy.meta.u renpy.meta.s",
"settings": {
"fontStyle": "underline strikethrough"
}
},
{
"scope": "renpy.meta.i renpy.meta.b renpy.meta.u",
"settings": {
"fontStyle": "italic bold underline"
}
},
{
"scope": "renpy.meta.i renpy.meta.b renpy.meta.s",
"settings": {
"fontStyle": "italic bold strikethrough"
}
},
{
"scope": "renpy.meta.i renpy.meta.u renpy.meta.s",
"settings": {
"fontStyle": "italic underline strikethrough"
}
},
{
"scope": "renpy.meta.b renpy.meta.u renpy.meta.s",
"settings": {
"fontStyle": "bold underline strikethrough"
}
},
{
"scope": "renpy.meta.i renpy.meta.b renpy.meta.u renpy.meta.s",
"settings": {
"fontStyle": "italic bold underline strikethrough"
}
},
{
"scope": "renpy.meta.color.text",
"settings": {
"foreground": "#ffffff"
}
},
{
"scope": "text.notes.info",
"settings": {
"foreground": "#17a2b8",
"fontStyle": "bold"
}
},
{
"scope": "text.notes.success",
"settings": {
"foreground": "#28a745",
"fontStyle": "bold"
}
},
{
"scope": "text.notes.warning",
"settings": {
"foreground": "#ffc107",
"fontStyle": "bold"
}
},
{
"scope": "text.notes.danger",
"settings": {
"foreground": "#dc3545",
"fontStyle": "bold"
}
},
{
"scope": "renpy.meta.color.#fff",
"settings": {
"foreground": "#fff"
}
},
{
"scope": "renpy.meta.color.#fcc",
"settings": {
"foreground": "#fcc"
}
},
{
"scope": "renpy.meta.color.#cfc",
"settings": {
"foreground": "#cfc"
}
}
]
},
}
BIN
View File
Binary file not shown.
+15 -10
View File
@@ -49,29 +49,34 @@ 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 virtualenvwrapper python-dev libavcodec-dev libavformat-dev \
libavresample-dev libswresample-dev libswscale-dev libfreetype6-dev libglew1.6-dev \
libfribidi-dev libsdl2-dev libsdl2-image-dev libsdl2-gfx-dev \
libsdl2-mixer-dev libsdl2-ttf-dev libjpeg-dev
sudo apt install virtualenvwrapper python3-dev libavcodec-dev libavformat-dev \
libswresample-dev libswscale-dev libharfbuzz-dev libfreetype6-dev libfribidi-dev libsdl2-dev \
libsdl2-image-dev libsdl2-gfx-dev libsdl2-mixer-dev libsdl2-ttf-dev libjpeg-dev
Ren'Py requires SDL_image 2.6 or greater. If your distribution doesn't include
that version, you'll need to download it from:
https://github.com/libsdl-org/SDL_image/tree/SDL2
We strongly suggest installing the Ren'Py modules into a Python
virtualenv. To create a new virtualenv, open a new terminal and run::
. /usr/share/virtualenvwrapper/virtualenvwrapper.sh
mkvirtualenv renpy
To return to this virtualenv later, run::
. /usr/share/virtualenvwrapper/virtualenvwrapper.sh
workon renpy
After activating the virtualenv, install cython, future, and six::
After activating the virtualenv, install additional dependencies::
pip install -U cython future six
pip install -U cython future six typing pefile requests ecdsa
Then, install pygame_sdl2 by running the following commands::
git clone https://www.github.com/renpy/pygame_sdl2
pushd pygame_sdl2
python fix_virtualenv.py $VIRTUAL_ENV
python setup.py install
python setup.py install_headers
popd
@@ -80,7 +85,7 @@ Next, set RENPY_DEPS_INSTALL To a \:-separated (\;-separated on Windows)
list of paths containing the dependencies, and RENPY_CYTHON to the name
of the cython command::
export RENPY_DEPS_INSTALL="/usr:/usr/lib/$(uname -m)-linux-gnu/"
export RENPY_DEPS_INSTALL="/usr:/usr/lib/$(gcc -dumpmachine)/"
export RENPY_CYTHON=cython
Finally, use setup.py in the Ren'Py ``module`` directory to compile and
@@ -93,7 +98,7 @@ install the modules that support Ren'Py::
Ren'Py will be installed into the activated virtualenv. It can then be run
using the command::
python -O renpy.py
python renpy.py
Documentation
@@ -107,7 +112,7 @@ link in a nightly build, or compile the modules as described above. You'll
also need the `Sphinx <https://www.sphinx-doc.org>`_ documentation generator.
If you have pip working, install Sphinx using::
pip install -U sphinx
pip install -U sphinx sphinx_rtd_theme sphinx_rtd_dark_mode
Once Sphinx is installed, change into the ``sphinx`` directory inside the
Ren'Py checkout and run::
+12 -1
View File
@@ -42,4 +42,15 @@ those related to coding) are deliberately left untranslated (or the original wor
are provided in brackets) to avoid confusion, relying on their common use in
Turkish language and among Turkish developers.
* Arda Güler (WKFO) <ardaguler09@gmail.com>
* Arda Güler (WKFO) <ardaguler09@gmail.com>
Finnish
---------
Translation to the Finnish language. Most terms have been translated,
sometimes requiring some imagination to come up with suitable terms.
The quality is not perfect, but it should make sense to any developer
fluent in Finnish but not English. Adjustments will be made if better
translations are suggested.
* Lari Liuhamo (Diapolo10) <lari.liuhamo+github116504@gmail.com>
+48 -4
View File
@@ -1,4 +1,4 @@
#!/usr/bin/env python2
#!/usr/bin/env python
from __future__ import print_function
import argparse
@@ -12,11 +12,14 @@ SOURCE = [
"/home/tom/ab/renpy",
"/home/tom/ab/renpy-build",
"/home/tom/ab/pygame_sdl2",
"/home/tom/ab/renpyweb",
"/home/tom/ab/renpy-build/renpyweb",
]
version = ".".join(str(i) for i in version_tuple)
short_version = ".".join(str(i) for i in version_tuple[:-1])
from renpy.versions import generate_vc_version
version = generate_vc_version()["version"]
short_version = version.rpartition(".")[0]
major = version.partition(".")[0]
print("Version", version)
ap = argparse.ArgumentParser()
@@ -27,9 +30,48 @@ ap.add_argument("--experimental", action="store_true")
ap.add_argument("--no-tag", "-n", action="store_true")
ap.add_argument("--push-tags", action="store_true")
ap.add_argument("--delete-tag")
ap.add_argument("--github", action="store_true")
ap.add_argument("--real", action="store_true")
args = ap.parse_args()
if not args.real:
print("Did you want to use scripts/add_all.sh? If not, give --real.")
sys.exit(1)
if args.github:
subprocess.call([ "git", "push", "--tags" ])
subprocess.call([ "gh", "release", "create", version, "--notes", "See https://www.renpy.org/release/" + short_version, "-t", "Ren'Py {}".format(short_version) ])
dn = "/home/tom/ab/renpy/dl/" + short_version
for fn in os.listdir(dn):
if fn == ".build_cache":
continue
if fn.endswith(".update.gz"):
continue
if fn.endswith(".update.json"):
continue
if fn.startswith("updates.json"):
continue
if fn.endswith(".zsync"):
continue
if fn.endswith(".sums"):
continue
subprocess.call([ "gh", "release", "upload", version, os.path.join(dn, fn) ])
sys.exit(0)
if args.release:
subprocess.check_call([ "/home/tom/ab/renpy/scripts/checksums.py", "/home/tom/ab/renpy/dl/" + short_version ])
@@ -74,6 +116,8 @@ else:
if args.no_tag:
tag = False
links = [ i + "-" + major for i in links ]
if tag:
for i in SOURCE:
os.chdir(i)
-10
View File
@@ -1,10 +0,0 @@
# 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
setup(
packages=['renpy', 'renpy.gl', 'renpy.angle', 'renpy.display', 'renpy.audio', 'renpy.text', 'pysdlsound'],
package_dir={ 'pysdlsound' : 'module' },
)
-2
View File
@@ -1,2 +0,0 @@
lib\windows-i686\python.exe -OO renpy.py tutorial
pause
-11
View File
@@ -1,11 +0,0 @@
#!/bin/bash
if [ -z "$RENPY_COVERAGE" ]; then
echo "$0 needs to be run with RENPY_COVERAGE set, probably in a virtualenv."
exit 1
fi
./run.sh --build || exit 1
coverage run renpy.py "$@"
coverage html
xdg-open htmlcov/index.html
-10
View File
@@ -1,10 +0,0 @@
#!/bin/bash
# This builds out of date modules using the default C compiler, and then
# runs them.
ROOT="$(dirname $(realpath $0))"
export RENPY_GDB="gdb --args"
. "$ROOT/run.sh" "$@"
+105 -57
View File
@@ -1,7 +1,11 @@
#!/home/tom/ab/renpy/lib/linux-x86_64/python -O
#!/home/tom/ab/renpy/lib/py3-linux-x86_64/python
# Builds a distribution of Ren'Py.
from __future__ import print_function
from __future__ import division, absolute_import, with_statement, print_function, unicode_literals
import future.standard_library
import future.utils
PY2 = future.utils.PY2
import sys
import os
@@ -10,19 +14,37 @@ import shutil
import subprocess
import argparse
import time
import collections
try:
# reload is built-in in Python 2, in importlib in Python 3
reload
except NameError:
from importlib import reload
except ImportError:
pass
if not sys.flags.optimize:
raise Exception("Optimization disabled.")
ROOT = os.path.dirname(os.path.abspath(__file__))
def zip_rapt_symbols(destination):
"""
Zips up the rapt symbols.
"""
import zipfile
if PY2:
zf = zipfile.ZipFile(destination + "/android-native-symbols.zip", "w", zipfile.ZIP_DEFLATED)
else:
zf = zipfile.ZipFile(destination + "/android-native-symbols.zip", "w", zipfile.ZIP_DEFLATED, compresslevel=3)
for dn, dirs, files in os.walk("rapt/symbols"):
for fn in dirs + files:
fn = os.path.join(dn, fn)
arcname = os.path.relpath(fn, "rapt/symbols")
zf.write(fn, arcname)
zf.close()
def copy_tutorial_file(src, dest):
"""
Copies a file from src to dst. Lines between "# tutorial-only" and
@@ -32,7 +54,7 @@ def copy_tutorial_file(src, dest):
# True if we want to copy the line.
copy = True
with open(src, "rb") as sf, open(dest, "wb") as df:
with open(src, "r") as sf, open(dest, "w") as df:
for l in sf:
if "# tutorial-only" in l:
copy = False
@@ -42,14 +64,24 @@ def copy_tutorial_file(src, dest):
if copy:
df.write(l)
def link_directory(dirname):
dn = os.path.join(ROOT, dirname)
if os.path.exists(dn):
os.unlink(dn)
if PY2:
source = dn + "2"
else:
source = dn + "3"
if os.path.exists(source):
os.symlink(source, dn)
def main():
start = time.time()
if not sys.flags.optimize:
raise Exception("Not running with python optimization.")
ap = argparse.ArgumentParser()
ap.add_argument("version", nargs="?")
ap.add_argument("--fast", action="store_true")
@@ -60,50 +92,64 @@ def main():
ap.add_argument("--nosign", action="store_false", dest="sign")
ap.add_argument("--notarized", action="store_true", dest="notarized")
ap.add_argument("--vc-version-only", action="store_true")
ap.add_argument("--link-directories", action="store_true")
ap.add_argument("--append-version", action="store_true")
ap.add_argument("--nightly", action="store_true")
ap.add_argument("--print-version", action="store_true")
args = ap.parse_args()
link_directory("rapt")
link_directory("renios")
link_directory("web")
import renpy.versions
renpy.versions.generate_vc_version(nightly=args.nightly)
if args.link_directories or args.vc_version_only:
return
if not os.path.abspath(sys.executable).startswith(ROOT + "/lib"):
raise Exception("Distribute must be run with the python in lib/.")
if args.sign:
os.environ["RENPY_MAC_IDENTITY"] = "Developer ID Application: Tom Rothamel (XHTE5H7Z79)"
# Revision updating is done early, so we can do it even if the rest
# of the program fails.
# Determine the version. We grab the current revision, and if any
# file has changed, bump it by 1.
import renpy
if args.version is None:
args.version = ".".join(str(i) for i in renpy.version_tuple[:-1]) # @UndefinedVariable
match_version = ".".join(str(i) for i in renpy.version_tuple[:2]) # @UndefinedVariable
s = subprocess.check_output([ "git", "describe", "--tags", "--dirty", "--match", "start-" + match_version ])
parts = s.strip().split("-")
if len(parts) <= 3:
vc_version = 0
else:
vc_version = int(parts[2])
if parts[-1] == "dirty":
vc_version += 1
with open("renpy/vc_version.py", "w") as f:
f.write("vc_version = {}".format(vc_version))
if args.vc_version_only:
return
if PY2 and not sys.flags.optimize:
raise Exception("Not running with python optimization.")
try:
reload(sys.modules['renpy.vc_version']) # @UndefinedVariable
except:
import renpy.vc_version # @UnusedImport
vc_version_base = os.path.splitext(renpy.vc_version.__file__)[0]
reload(sys.modules['renpy'])
# Delete the .pyc and .pyo files, as reload can choose one of them instead
# of the new .py file.
for fn in [ vc_version_base + ".pyc", vc_version_base + ".pyo" ]:
if os.path.exists(fn):
os.unlink(fn)
reload(renpy.vc_version)
except Exception:
import renpy.vc_version
# A normal reload is fine, as renpy/__init__.py won't change.
reload(renpy)
if args.print_version:
print(renpy.version_only)
return
if args.version is None:
if args.nightly:
args.version = renpy.version_only
else:
args.version = ".".join(str(i) for i in renpy.version_tuple[:-1])
if args.append_version:
args.version += "-" + renpy.version_only
# Check that the versions match.
full_version = renpy.version_only # @UndefinedVariable
full_version = renpy.version_only # @UndefinedVariable
if "-" not in args.version \
and not full_version.startswith(args.version):
raise Exception("The command-line and Ren'Py versions do not match.")
@@ -121,19 +167,19 @@ def main():
print("Version {} ({})".format(args.version, full_version))
# Perhaps autobuild.
if "RENPY_BUILD_ALL" in os.environ:
print("Autobuild...")
subprocess.check_call(["scripts/autobuild.sh"])
if sys.version_info[0] >= 3:
renpy_sh = "./renpy3.sh"
else:
renpy_sh = "./renpy2.sh"
# Compile all the python files.
compileall.compile_dir("renpy/", ddir="renpy/", force=1, quiet=1)
compileall.compile_dir("renpy/", ddir="renpy/", force=True, quiet=1)
# Compile the various games.
if not args.fast:
for i in [ 'tutorial', 'launcher', 'the_question' ]:
print("Compiling", i)
subprocess.check_call(["./renpy.sh", i, "quit" ])
subprocess.check_call([renpy_sh, i, "compile" ])
# Kick off the rapt build.
if not args.fast:
@@ -142,8 +188,8 @@ def main():
sys.path.insert(0, os.path.join(ROOT, "rapt", "buildlib"))
import rapt.interface # @UnresolvedImport
import rapt.build # @UnresolvedImport
import rapt.interface # type: ignore
import rapt.build # type: ignore
interface = rapt.interface.Interface()
rapt.build.distclean(interface)
@@ -156,10 +202,12 @@ def main():
if not os.path.exists(destination):
os.makedirs(destination)
zip_rapt_symbols(destination)
if args.fast:
cmd = [
"./renpy.sh",
renpy_sh,
"launcher",
"distribute",
"launcher",
@@ -172,7 +220,7 @@ def main():
else:
cmd = [
"./renpy.sh",
renpy_sh,
"launcher",
"distribute",
"launcher",
@@ -204,7 +252,7 @@ def main():
"-q",
"egg_info",
"--tag-build",
"-for-renpy-" + args.version,
"+renpy" + args.version,
"sdist",
"-d",
os.path.abspath(destination)
@@ -232,8 +280,8 @@ def main():
sys.stdout.write("Creating -sdk.7z")
p = subprocess.Popen([ "7z", "a", sdk +".7z", sdk], stdout=subprocess.PIPE)
for i, _l in enumerate(p.stdout):
p = subprocess.Popen([ "7z", "a", sdk + ".7z", sdk], stdout=subprocess.PIPE)
for i, _l in enumerate(p.stdout): # type: ignore
if i % 10 != 0:
continue
+11 -5
View File
@@ -11,6 +11,8 @@ init offset = -2
init python:
gui.init(1280, 720)
## Enable checks for invalid or unstable properties in screens or transforms
define config.check_conflicting_properties = True
################################################################################
@@ -342,6 +344,9 @@ define config.history_length = 250
## at the cost of performance.
define gui.history_height = gui.scale(140)
## Additional space to add between history screen entries.
define gui.history_spacing = 0
## The position, width, and alignment of the label giving the name of the
## speaking character.
define gui.history_name_xpos = gui.scale(155)
@@ -399,6 +404,7 @@ define gui.nvl_thought_xalign = 0.0
define gui.nvl_button_xpos = gui.scale(450)
define gui.nvl_button_xalign = 0.0
## Localization ################################################################
## This controls where a line break is permitted. The default is suitable for
@@ -416,13 +422,15 @@ init python:
## This increases the size of the quick buttons to make them easier to
## touch on tablets and phones.
if renpy.variant("touch"):
@gui.variant
def touch():
gui.quick_button_borders = Borders(gui.scale(40), gui.scale(14), gui.scale(40), gui.scale(0))
## This changes the size and spacing of various GUI elements to ensure
## they are easily visible on phones.
if renpy.variant("small"):
@gui.variant
def small():
## Font sizes.
gui.text_size = gui.scale(30)
@@ -442,6 +450,7 @@ init python:
gui.slider_size = gui.scale(36)
gui.choice_button_width = gui.scale(1240)
gui.choice_button_text_size = gui.scale(30)
gui.navigation_spacing = gui.scale(20)
gui.pref_button_spacing = gui.scale(10)
@@ -470,6 +479,3 @@ init python:
gui.nvl_button_width = gui.scale(1240)
gui.nvl_button_xpos = gui.scale(20)
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

+6 -6
View File
@@ -44,9 +44,9 @@ define build.name = "gui"
## Sounds and music ############################################################
## These three variables control which mixers are shown to the player
## by default. Setting one of these to False will hide the appropriate
## mixer.
## These three variables control, among other things, which mixers are
## shown to the player by default. Setting one of these to False will
## hide the appropriate mixer.
define config.has_sound = True
define config.has_music = True
@@ -200,9 +200,9 @@ init python:
build.documentation('*.txt')
## A Google Play license key is required to download expansion files and
## perform in-app purchases. It can be found on the "Services & APIs" page
## of the Google Play developer console.
## A Google Play license key is required to perform in-app purchases.
## It can be found in the Google Play developer console,
## under "Monetize" > "Monetization Setup" > "Licensing".
# define build.google_play_key = "..."
+139 -42
View File
@@ -160,6 +160,7 @@ style say_dialogue:
xsize gui.dialogue_width
ypos gui.dialogue_ypos
adjust_spacing False
## Input screen ################################################################
##
@@ -177,7 +178,7 @@ screen input(prompt):
window:
vbox:
xalign gui.dialogue_text_xalign
xanchor gui.dialogue_text_xalign
xpos gui.dialogue_xpos
xsize gui.dialogue_width
ypos gui.dialogue_ypos
@@ -212,11 +213,6 @@ screen choice(items):
textbutton i.caption action i.action
## When this is true, menu captions will be spoken by the narrator. When
## false, menu captions will be displayed as empty buttons.
define config.narrator_menu = True
style choice_vbox is vbox
style choice_button is button
style choice_button_text is button_text
@@ -412,11 +408,11 @@ style main_menu_version:
## This lays out the basic common structure of a game menu screen. It's called
## with the screen title, and displays the background, title, and navigation.
##
## The scroll parameter can be None, or one of "viewport" or "vpgrid". When
## this screen is intended to be used with one or more children, which are
## The scroll parameter can be None, or one of "viewport" or "vpgrid".
## This screen is intended to be used with one or more children, which are
## transcluded (placed) inside it.
screen game_menu(title, scroll=None, yinitial=0.0):
screen game_menu(title, scroll=None, yinitial=0.0, spacing=0):
style_prefix "game_menu"
@@ -449,6 +445,8 @@ screen game_menu(title, scroll=None, yinitial=0.0):
side_yfill True
vbox:
spacing spacing
transclude
elif scroll == "vpgrid":
@@ -464,6 +462,8 @@ screen game_menu(title, scroll=None, yinitial=0.0):
side_yfill True
spacing spacing
transclude
else:
@@ -650,27 +650,40 @@ screen file_slots(title):
key "save_delete" action FileDelete(slot)
## Buttons to access other pages.
hbox:
vbox:
style_prefix "page"
xalign 0.5
yalign 1.0
spacing gui.page_spacing
hbox:
xalign 0.5
textbutton _("<") action FilePagePrevious()
spacing gui.page_spacing
if config.has_autosave:
textbutton _("{#auto_page}A") action FilePage("auto")
textbutton _("<") action FilePagePrevious()
if config.has_quicksave:
textbutton _("{#quick_page}Q") action FilePage("quick")
if config.has_autosave:
textbutton _("{#auto_page}A") action FilePage("auto")
## range(1, 10) gives the numbers from 1 to 9.
for page in range(1, 10):
textbutton "[page]" action FilePage(page)
if config.has_quicksave:
textbutton _("{#quick_page}Q") action FilePage("quick")
textbutton _(">") action FilePageNext()
## range(1, 10) gives the numbers from 1 to 9.
for page in range(1, 10):
textbutton "[page]" action FilePage(page)
textbutton _(">") action FilePageNext()
if config.has_sync:
if CurrentScreenName() == "save":
textbutton _("Upload Sync"):
action UploadSync()
xalign 0.5
else:
textbutton _("Download Sync"):
action DownloadSync()
xalign 0.5
style page_label is gui_label
@@ -688,7 +701,7 @@ style page_label:
ypadding gui.scale(3)
style page_label_text:
text_align 0.5
textalign 0.5
layout "subtitle"
hover_color gui.hover_color
@@ -731,13 +744,6 @@ screen preferences():
textbutton _("Window") action Preference("display", "window")
textbutton _("Fullscreen") action Preference("display", "fullscreen")
vbox:
style_prefix "radio"
label _("Rollback Side")
textbutton _("Disable") action Preference("rollback side", "disable")
textbutton _("Left") action Preference("rollback side", "left")
textbutton _("Right") action Preference("rollback side", "right")
vbox:
style_prefix "check"
label _("Skip")
@@ -886,7 +892,7 @@ screen history():
## Avoid predicting this screen, as it can be very large.
predict False
use game_menu(_("History"), scroll=("vpgrid" if gui.history_height else "viewport"), yinitial=1.0):
use game_menu(_("History"), scroll=("vpgrid" if gui.history_height else "viewport"), yinitial=1.0, spacing=gui.history_spacing):
style_prefix "history"
@@ -919,7 +925,7 @@ screen history():
## This determines what tags are allowed to be displayed on the history
## screen.
define gui.history_allow_tags = { "alt", "noalt" }
define gui.history_allow_tags = { "alt", "noalt", "rt", "rb", "art" }
style history_window is empty
@@ -928,8 +934,6 @@ style history_name is gui_label
style history_name_text is gui_label_text
style history_text is gui_text
style history_text is gui_text
style history_label is gui_label
style history_label_text is gui_label_text
@@ -945,7 +949,7 @@ style history_name:
style history_name_text:
min_width gui.history_name_width
text_align gui.history_name_xalign
textalign gui.history_name_xalign
style history_text:
xpos gui.history_text_xpos
@@ -953,7 +957,7 @@ style history_text:
xanchor gui.history_text_xalign
xsize gui.history_text_width
min_width gui.history_text_width
text_align gui.history_text_xalign
textalign gui.history_text_xalign
layout ("subtitle" if gui.history_text_xalign else "tex")
style history_label:
@@ -1044,6 +1048,10 @@ screen keyboard_help():
label "V"
text _("Toggles assistive {a=https://www.renpy.org/l/voicing}self-voicing{/a}.")
hbox:
label "Shift+A"
text _("Opens the accessibility menu.")
screen mouse_help():
@@ -1118,7 +1126,7 @@ style help_label:
style help_label_text:
size gui.text_size
xalign 1.0
text_align 1.0
textalign 1.0
@@ -1180,7 +1188,7 @@ style confirm_frame:
yalign .5
style confirm_prompt_text:
text_align 0.5
textalign 0.5
layout "subtitle"
style confirm_button:
@@ -1314,7 +1322,7 @@ screen nvl(dialogue, items=None):
use nvl_dialogue(dialogue)
## Displays the menu, if given. The menu may be displayed incorrectly
## if config.narrator_menu is set to True, as it is above.
## if config.narrator_menu is set to True.
for i in items:
textbutton i.caption:
@@ -1374,7 +1382,7 @@ style nvl_label:
yanchor 0.0
xsize gui.nvl_name_width
min_width gui.nvl_name_width
text_align gui.nvl_name_xalign
textalign gui.nvl_name_xalign
style nvl_dialogue:
xpos gui.nvl_text_xpos
@@ -1382,7 +1390,7 @@ style nvl_dialogue:
ypos gui.nvl_text_ypos
xsize gui.nvl_text_width
min_width gui.nvl_text_width
text_align gui.nvl_text_xalign
textalign gui.nvl_text_xalign
layout ("subtitle" if gui.nvl_text_xalign else "tex")
style nvl_thought:
@@ -1391,7 +1399,7 @@ style nvl_thought:
ypos gui.nvl_thought_ypos
xsize gui.nvl_thought_width
min_width gui.nvl_thought_width
text_align gui.nvl_thought_xalign
textalign gui.nvl_thought_xalign
layout ("subtitle" if gui.nvl_text_xalign else "tex")
style nvl_button:
@@ -1403,6 +1411,95 @@ style nvl_button_text:
properties gui.button_text_properties("nvl_button")
## Bubble screen ###############################################################
##
## The bubble screen is used to display dialogue to the player when using
## speech bubbles. The bubble screen takes the same parameters as the say
## screen, must create a displayable with the id of "what", and can create
## displayables with the "namebox", "who", and "window" ids.
##
## https://www.renpy.org/doc/html/bubble.html#bubble-screen
screen bubble(who, what):
style_prefix "bubble"
window:
id "window"
if who is not None:
window:
id "namebox"
style "bubble_namebox"
text who:
id "who"
text what:
id "what"
style bubble_window is empty
style bubble_namebox is empty
style bubble_who is default
style bubble_what is default
style bubble_window:
xpadding 30
top_padding 5
bottom_padding 5
style bubble_namebox:
xalign 0.5
style bubble_who:
xalign 0.5
textalign 0.5
color "#000"
style bubble_what:
align (0.5, 0.5)
text_align 0.5
layout "subtitle"
color "#000"
define bubble.frame = Frame("gui/bubble.png", 55, 55, 55, 95)
define bubble.thoughtframe = Frame("gui/thoughtbubble.png", 55, 55, 55, 55)
define bubble.properties = {
"bottom_left" : {
"window_background" : Transform(bubble.frame, xzoom=1, yzoom=1),
"window_bottom_padding" : 27,
},
"bottom_right" : {
"window_background" : Transform(bubble.frame, xzoom=-1, yzoom=1),
"window_bottom_padding" : 27,
},
"top_left" : {
"window_background" : Transform(bubble.frame, xzoom=1, yzoom=-1),
"window_top_padding" : 27,
},
"top_right" : {
"window_background" : Transform(bubble.frame, xzoom=-1, yzoom=-1),
"window_top_padding" : 27,
},
"thought" : {
"window_background" : bubble.thoughtframe,
}
}
define bubble.expand_area = {
"bottom_left" : (0, 0, 0, 22),
"bottom_right" : (0, 0, 0, 22),
"top_left" : (0, 22, 0, 0),
"top_right" : (0, 22, 0, 0),
"thought" : (0, 0, 0, 0),
}
################################################################################
## Mobile Variants
@@ -1505,10 +1602,10 @@ style vslider:
base_bar Frame("gui/phone/slider/vertical_[prefix_]bar.png", gui.vslider_borders, tile=gui.slider_tile)
thumb "gui/phone/slider/vertical_[prefix_]thumb.png"
style slider_pref_vbox:
style slider_vbox:
variant "small"
xsize None
style slider_pref_slider:
style slider_slider:
variant "small"
xsize gui.scale(600)
-178
View File
@@ -1,178 +0,0 @@
<html>
<head>
<title>README</title>
<style>
BODY {
background: #fff;
color: #444;
padding-left: 20%;
padding-top: 1em;
padding-bottom: 1em;
padding-right: 20%;
font-family: sans-serif;
line-height: 1.6em;
}
DT {
font-weight: bold;
margin-top: .33em;
}
H2 {
color: #000;
margin-left: -2.5em;
}
H3 {
color: #000;
margin-left: -1.5em;
}
.editsection {
display: none;
}
</style>
</head>
<body>
<h2>Basic Help</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>
<h3>Game Menu</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>
<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>
<h3>Key and Mouse Bindings</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>Navigates between 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, canceling 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="https://www.renpy.org/doc/html/self_voicing.html">self-voicing</a>
documentation.
</dd>
<dt>Shift+C</dt>
<dd>Toggles clipboard-voicing mode, which copies text to the clipboard so it can be read by a screen reader.</dd>
</dl>
<h3>Controller Support and Bindings</h3>
<p>
This game should automatically detect and use game controllers supported by
SDL2. Other controllers can be configured using third-party configuration tools
like the <a href="http://www.generalarcade.com/gamepadtool/">SDL2 Gampad Tool</a>
</p>
<p>
A small number of systems may have problems using detected game controllers. Should
that happen, hold down shift as the game starts, and disable the controller support.
</p>
<p>The following bindings are used:</p>
<dl>
<dt>Right Trigger, A (Bottom Button)</dt>
<dd>Advances through the game, activates menu choices, buttons, and sliders.</dd>
<dt>Guide, Start</dt>
<dd>Enters the game menu. When in the game menu, returns to the game.</dd>
<dt>Directional Pad, Analog Sticks</dt>
<dd>Navigates between menu choices, buttons, and sliders.</dd>
<dt>Left Trigger, Left Shoulder, Back</dt>
<dd>Causes rollback to occur. Rollback reverses the game back in time, showing prior text and even allowing
menu choices to be changed.</dd>
<dt>Right Shoulder</dt>
<dd>Causes rollforward to occur, canceling out a previous rollback.</dd>
<dt>Y (Top Button)</dt>
<dd>Hides the text window and other transient displays.</dd>
</dl>
<h2>Legal Notice</h2>
<p>
This program contains free software licensed under a number of licenses, including the GNU Lesser Public License. A
complete list of software is available at <a href="https://www.renpy.org/doc/html/license.html">https://www.renpy.org/doc/html/license.html</a>.
</p>
</body>
</html>
+86
View File
@@ -0,0 +1,86 @@
#!/usr/bin/env python
# The path to a copy of Atom that's been installed globally, if one exists.
# This is overidden by RENPY_ATOM, if set. If either is given, that is used
# and no special handing of the .atom directory is performed.
ATOM = None
import sys
import os
import subprocess
import platform
import shutil
import renpy
class Editor(renpy.editor.Editor):
has_projects = True
def get_atom(self):
"""
Returns the path to the atom executable, if None. Also takes care
of setting up the .atom directory if it's not available.
"""
atom = os.environ.get("RENPY_ATOM", ATOM)
if atom is not None:
return atom
DIR = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
DIR = os.path.join(renpy.exports.fsdecode(DIR), "atom")
if renpy.windows:
atom = os.path.join(DIR, "atom-windows", "atom.exe")
elif renpy.macintosh:
atom = os.path.join(DIR, "Atom.app", "Contents", "Resources", "app", "atom.sh")
else:
atom = os.path.join(DIR, "atom-linux-" + platform.machine(), "atom")
default_dot_atom = os.path.join(DIR, "default-dot-atom")
dot_atom = os.path.join(DIR, ".atom")
if not os.path.exists(dot_atom) and os.path.exists(default_dot_atom):
shutil.copytree(default_dot_atom, dot_atom)
return atom
def begin(self, new_window=False, **kwargs):
self.args = [ ]
def open(self, filename, line=None, **kwargs):
if line:
filename = "{}:{}".format(filename, line)
self.args.append(filename)
def open_project(self, project):
self.args.append(project)
def end(self, **kwargs):
atom = self.get_atom()
self.args.reverse()
args = [ atom ] + self.args
args = [ renpy.exports.fsencode(i) for i in args ]
subprocess.Popen(args)
def main():
e = Editor()
e.begin()
for i in sys.argv[1:]:
e.open(i)
e.end()
if __name__ == "__main__":
main()
@@ -0,0 +1,89 @@
import os
import subprocess
import sys
import renpy
class Editor(renpy.editor.Editor):
has_projects = True
def get_code(self):
"""
Returns the path to the code executable.
"""
system = __file__.endswith(" (System).edit.py")
if system:
if "RENPY_VSCODE" in os.environ:
return os.environ["RENPY_VSCODE"]
if renpy.windows:
return "code.cmd"
if renpy.macintosh and os.path.exists("/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code"):
return "/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code"
return "code"
else:
RENPY_VSCODE = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "vscode"))
if renpy.windows:
code = os.path.join(RENPY_VSCODE, "VSCode-win32-x64", "bin", "code.cmd")
elif renpy.macintosh:
code = os.path.join(RENPY_VSCODE, "Visual Studio Code.app", "Contents", "Resources", "app", "bin", "code")
elif renpy.linux:
if renpy.arch == "aarch64":
arch = "arm64"
elif renpy.arch == "armv7l":
arch = "arm"
else:
arch = "x64"
code = os.path.join(RENPY_VSCODE, "VSCode-linux-" + arch, "bin", "code")
else:
code = "code"
return code
def open(self, filename, line=None, **kwargs):
if line:
filename = "{}:{}".format(filename, line)
self.args.append(filename)
def open_project(self, project):
self.args.append(project)
def begin(self, new_window=False, **kwargs):
self.args = [ ]
def end(self, **kwargs):
self.args.reverse()
code = self.get_code()
args = [ code, "-g" ] + self.args
args = [ renpy.exports.fsencode(i) for i in args ]
if renpy.windows:
CREATE_NO_WINDOW = 0x08000000
subprocess.Popen(args, creationflags=CREATE_NO_WINDOW)
else:
subprocess.Popen(args)
def main():
e = Editor()
e.begin()
for i in sys.argv[1:]:
e.open(i)
e.end()
if __name__ == "__main__":
main()
+89
View File
@@ -0,0 +1,89 @@
import os
import subprocess
import sys
import renpy
class Editor(renpy.editor.Editor):
has_projects = True
def get_code(self):
"""
Returns the path to the code executable.
"""
system = __file__.endswith(" (System).edit.py")
if system:
if "RENPY_VSCODE" in os.environ:
return os.environ["RENPY_VSCODE"]
if renpy.windows:
return "code.cmd"
if renpy.macintosh and os.path.exists("/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code"):
return "/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code"
return "code"
else:
RENPY_VSCODE = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "vscode"))
if renpy.windows:
code = os.path.join(RENPY_VSCODE, "VSCode-win32-x64", "bin", "code.cmd")
elif renpy.macintosh:
code = os.path.join(RENPY_VSCODE, "Visual Studio Code.app", "Contents", "Resources", "app", "bin", "code")
elif renpy.linux:
if renpy.arch == "aarch64":
arch = "arm64"
elif renpy.arch == "armv7l":
arch = "arm"
else:
arch = "x64"
code = os.path.join(RENPY_VSCODE, "VSCode-linux-" + arch, "bin", "code")
else:
code = "code"
return code
def open(self, filename, line=None, **kwargs):
if line:
filename = "{}:{}".format(filename, line)
self.args.append(filename)
def open_project(self, project):
self.args.append(project)
def begin(self, new_window=False, **kwargs):
self.args = [ ]
def end(self, **kwargs):
self.args.reverse()
code = self.get_code()
args = [ code, "-g" ] + self.args
args = [ renpy.exports.fsencode(i) for i in args ]
if renpy.windows:
CREATE_NO_WINDOW = 0x08000000
subprocess.Popen(args, creationflags=CREATE_NO_WINDOW)
else:
subprocess.Popen(args)
def main():
e = Editor()
e.begin()
for i in sys.argv[1:]:
e.open(i)
e.end()
if __name__ == "__main__":
main()
-144
View File
@@ -1,144 +0,0 @@
import binascii
def a2b(a):
return binascii.a2b_hex(''.join(a.split()))
resources = {
260 : a2b('''
01 00 ff ff 00 00 00 00 00 00 00 00 c8 00 c0 80
02 00 00 00 00 00 b8 00 29 00 00 00 00 00 00 00
08 00 90 01 00 01 4d 00 53 00 20 00 53 00 68 00
65 00 6c 00 6c 00 20 00 44 00 6c 00 67 00 00 00
00 00 00 00 00 00 00 00 01 00 01 50 7f 00 14 00
32 00 0e 00 01 00 00 00 ff ff 80 00 4f 00 4b 00
00 00 00 00 00 00 00 00 00 00 00 00 04 08 00 50
07 00 07 00 aa 00 0c 00 ea 03 00 00 ff ff 81 00
00 00 00 00
'''),
261 : a2b('''
01 00 ff ff 00 00 00 00 00 00 00 00 c8 00 c0 80
04 00 00 00 00 00 b8 00 3a 00 00 00 00 00 00 00
08 00 90 01 00 01 4d 00 53 00 20 00 53 00 68 00
65 00 6c 00 6c 00 20 00 44 00 6c 00 67 00 00 00
00 00 00 00 00 00 00 00 80 00 81 50 07 00 14 00
aa 00 0c 00 ec 03 00 00 ff ff 81 00 00 00 00 00
00 00 00 00 00 00 00 00 01 00 01 50 7f 00 25 00
32 00 0e 00 01 00 00 00 ff ff 80 00 4f 00 4b 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 50
4a 00 25 00 32 00 0e 00 02 00 00 00 ff ff 80 00
43 00 61 00 6e 00 63 00 65 00 6c 00 00 00 00 00
00 00 00 00 00 00 00 00 04 08 00 50 07 00 07 00
aa 00 0c 00 eb 03 00 00 ff ff 81 00 00 00 00 00
'''),
262 : a2b('''
01 00 ff ff 00 00 00 00 00 00 00 00 c8 00 c0 80
04 00 00 00 00 00 b8 00 29 00 00 00 00 00 00 00
08 00 90 01 00 01 4d 00 53 00 20 00 53 00 68 00
65 00 6c 00 6c 00 20 00 44 00 6c 00 67 00 00 00
00 00 00 00 00 00 00 00 00 00 01 50 7f 00 14 00
32 00 0e 00 06 00 00 00 ff ff 80 00 59 00 65 00
73 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
04 08 00 50 07 00 07 00 aa 00 0c 00 ed 03 00 00
ff ff 81 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 01 50 07 00 14 00 32 00 0e 00 07 00 00 00
ff ff 80 00 4e 00 6f 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 01 50 4b 00 14 00 32 00 0e 00
02 00 00 00 ff ff 80 00 43 00 61 00 6e 00 63 00
65 00 6c 00 00 00 00 00
'''),
263 : a2b('''
01 00 ff ff 00 00 00 00 00 00 00 00 80 00 ca 80
03 00 00 00 00 00 e2 00 29 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 81 50 07 00 14 00
97 00 0e 00 eb 03 00 00 6d 00 73 00 63 00 74 00
6c 00 73 00 5f 00 70 00 72 00 6f 00 67 00 72 00
65 00 73 00 73 00 33 00 32 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 04 08 00 50 07 00 07 00
d4 00 0c 00 ea 03 00 00 ff ff 81 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 50 a9 00 14 00
32 00 0e 00 02 00 00 00 ff ff 80 00 43 00 61 00
6e 00 63 00 65 00 6c 00 00 00 00 00
'''),
264 : a2b('''
01 00 ff ff 00 00 00 00 00 00 00 00 c8 00 c0 80
04 00 00 00 00 00 b8 00 3a 00 00 00 00 00 00 00
08 00 90 01 00 01 4d 00 53 00 20 00 53 00 68 00
65 00 6c 00 6c 00 20 00 44 00 6c 00 67 00 00 00
00 00 00 00 00 00 00 00 a0 00 81 50 07 00 14 00
aa 00 0c 00 ec 03 00 00 ff ff 81 00 00 00 00 00
00 00 00 00 00 00 00 00 01 00 01 50 7f 00 25 00
32 00 0e 00 01 00 00 00 ff ff 80 00 4f 00 4b 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 50
4a 00 25 00 32 00 0e 00 02 00 00 00 ff ff 80 00
43 00 61 00 6e 00 63 00 65 00 6c 00 00 00 00 00
00 00 00 00 00 00 00 00 04 08 00 50 07 00 07 00
aa 00 0c 00 eb 03 00 00 ff ff 81 00 00 00 00 00
'''),
265 : a2b('''
01 00 ff ff 00 00 00 00 00 00 00 00 c8 00 c8 80
12 00 00 00 00 00 d9 00 fc 00 00 00 00 00 00 00
08 00 90 01 00 01 4d 00 53 00 20 00 53 00 68 00
65 00 6c 00 6c 00 20 00 44 00 6c 00 67 00 00 00
00 00 00 00 00 00 00 00 01 00 01 50 6c 00 ea 00
30 00 0e 00 01 00 00 00 ff ff 80 00 4f 00 4b 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 50
a2 00 ea 00 30 00 0e 00 02 00 00 00 ff ff 80 00
43 00 61 00 6e 00 63 00 65 00 6c 00 00 00 00 00
00 00 00 00 00 00 00 00 07 00 00 50 06 00 06 00
cc 00 4e 00 ff ff ff ff ff ff 80 00 00 00 00 00
00 00 00 00 00 00 00 00 03 00 21 50 48 00 12 00
84 00 64 00 03 00 00 00 ff ff 85 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 02 50 0c 00 24 00
c0 00 08 00 04 00 00 00 ff ff 82 00 00 00 00 00
00 00 00 00 00 00 00 00 80 00 81 50 0c 00 30 00
c0 00 0e 00 05 00 00 00 ff ff 81 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 01 50 9c 00 42 00
30 00 0e 00 06 00 00 00 ff ff 80 00 41 00 64 00
64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
07 00 00 50 06 00 54 00 cb 00 3c 00 ff ff ff ff
ff ff 80 00 00 00 00 00 00 00 00 00 00 00 00 00
03 00 21 50 48 00 61 00 84 00 64 00 07 00 00 00
ff ff 85 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 02 50 0c 00 72 00 c0 00 08 00 08 00 00 00
ff ff 82 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 01 50 9c 00 7e 00 30 00 0e 00 09 00 00 00
ff ff 80 00 41 00 64 00 64 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 01 50 06 00 96 00
42 00 0e 00 0a 00 00 00 ff ff 80 00 41 00 64 00
64 00 20 00 66 00 69 00 6c 00 65 00 2e 00 2e 00
2e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 01 50 4e 00 96 00 42 00 0e 00 0b 00 00 00
ff ff 80 00 41 00 64 00 64 00 20 00 6e 00 65 00
77 00 20 00 66 00 69 00 6c 00 65 00 2e 00 2e 00
2e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 01 50 06 00 a8 00 42 00 0e 00 0c 00 00 00
ff ff 80 00 41 00 64 00 64 00 20 00 66 00 6f 00
6c 00 64 00 65 00 72 00 2e 00 2e 00 2e 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 07 00 00 50
06 00 c6 00 cc 00 1e 00 ff ff ff ff ff ff 80 00
43 00 6f 00 6d 00 6d 00 61 00 6e 00 64 00 20 00
6c 00 69 00 6e 00 65 00 3a 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 80 00 81 50 0c 00 d2 00
c0 00 0e 00 0e 00 00 00 ff ff 81 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 02 50 0c 00 14 00
3c 00 08 00 1e 00 00 00 ff ff 82 00 4f 00 70 00
74 00 69 00 6f 00 6e 00 3a 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 02 50 0c 00 63 00
3c 00 08 00 46 00 00 00 ff ff 82 00 43 00 6f 00
6d 00 6d 00 61 00 6e 00 64 00 3a 00 00 00 00 00
'''),
270 : a2b('''
01 00 ff ff 00 00 00 00 00 00 00 00 48 04 00 44
02 00 00 00 00 00 23 01 1a 00 00 00 00 00 00 00
08 00 00 00 00 00 4d 00 53 00 20 00 53 00 68 00
65 00 6c 00 6c 00 20 00 44 00 6c 00 67 00 00 00
00 00 00 00 00 00 00 00 01 00 02 50 00 00 07 00
23 01 08 00 ff ff ff ff ff ff 82 00 53 00 74 00
61 00 74 00 69 00 63 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 02 40 00 00 12 00 23 01 08 00
5f 04 00 00 ff ff 82 00 73 00 74 00 63 00 33 00
32 00 00 00 00 00
'''),
}
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 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
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 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
+2 -2
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 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
@@ -54,7 +54,7 @@ label add_file:
try:
os.makedirs(dir)
except:
except Exception:
pass
contents = u"\uFEFF"
+255 -67
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 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
@@ -19,37 +19,48 @@
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
default persistent.android_bundle = False
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
ANDROID_NO_BUNDLE_KEY = 4
ANDROID_NO_CONFIG = 5
ANDROID_NO_BUNDLE = 6
ANDROID_OK = 7
JDK_REQUIREMENT = 42
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 64-bit/x64 Java 8 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=https://adoptopenjdk.net/?variant=openjdk8&jvmVariant=hotspot}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_KEY_TEXT = _("RAPT has been installed, but a key hasn't been configured. Please generate new keys, or copy android.keystore and bundle.keystore to the base directory.")
NO_CONFIG_TEXT = _("The current project has not been configured. Use \"Configure\" to configure it before building.")
NO_BUNDLE_TEXT = _("Please select if you want a Play Bundle (for Google Play), or a Universal APK (for sideloading and other app stores).")
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.")
OUYA_TEXT = _("Attempts to emulate a televison-based Android 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.")
INSTALL_SDK_TEXT = _("Downloads and installs the Android SDK and supporting packages. Optionally, generates the keys required to sign the package.")
INSTALL_SDK_TEXT = _("Downloads and installs the Android SDK and supporting packages.")
GENERATE_KEYS_TEXT = _("Generates the keys required to sign the package.")
CONFIGURE_TEXT = _("Configures the package name, version, and other information about this project.")
PLAY_KEYS_TEXT = _("Opens the file containing the Google Play keys in the editor.\n\nThis is only needed if the application is using an expansion APK. Read the documentation for more details.")
BUILD_TEXT = _("Builds the Android package.")
BUILD_AND_INSTALL_TEXT = _("Builds the Android package, and installs it on an Android device connected to your computer.")
BUILD_INSTALL_AND_LAUNCH_TEXT = _("Builds the Android package, installs it on an Android device connected to your computer, then launches the app on your device.")
LOGCAT_TEXT = _("Retrieves the log from the Android device and writes it to a file.")
LIST_DEVICES_TEXT = _("Lists the connected devices.")
PAIR_TEXT = _("Pairs with a device over Wi-Fi, on Android 11+.")
CONNECT_TEXT = _("Connects to a device over Wi-Fi, on Android 11+.")
DISCONNECT_TEXT = _("Disconnects a device connected over Wi-Fi.")
DEBUG_TEXT = _("Selects the Debug build, which can be accessed through Android Studio. Changing between debug and release builds requires an uninstall from your device.")
RELEASE_TEXT = _("Selects the Release build, which can be uploaded to stores. Changing between debug and release builds requires an uninstall from your device.")
CLEAN_TEXT = _("Removes Android temporary files.")
PLAY_BUNDLE_TEXT = _("Builds an Android App Bundle (ABB), intended to be uploaded to Google Play. This can include up to 2GB of data.")
UNIVERSAL_APK_TEXT = _("Builds a Universal APK package, intended for sideloading and stores other than Google Play. This can include up to 2GB of data.")
import subprocess
import re
@@ -82,13 +93,17 @@ init python:
import rapt.install_sdk
import rapt.plat
import rapt.interface
import rapt.keys
rapt.plat.renpy = True
rapt.plat.translate = __
JDK_REQUIREMENT = rapt.plat.jdk_requirement
else:
rapt = None
def AndroidState():
"""
Determines the state of the android install, and returns it.
@@ -96,14 +111,18 @@ init python:
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.adb):
return ANDROID_NO_SDK
if not os.path.exists(rapt.plat.path("project/local.properties")):
if not rapt.keys.keys_exist(project.current.path):
return ANDROID_NO_KEY
if not os.path.exists(os.path.join(project.current.path, ".android.json")):
if not any([
os.path.exists(os.path.join(project.current.path, "android.json")),
os.path.exists(os.path.join(project.current.path, ".android.json"))
]):
return ANDROID_NO_CONFIG
if persistent.android_bundle is None:
return ANDROID_NO_BUNDLE
return ANDROID_OK
@@ -114,14 +133,14 @@ init python:
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_NO_BUNDLE:
return NO_BUNDLE_TEXT
if state == ANDROID_OK:
return OK_TEXT
@@ -160,34 +179,26 @@ init python:
build = p.dump["build"]
filename = os.path.join(p.path, ".android.json")
with open(filename, "rb") as f:
android_json = json.load(f)
old_android_json = dict(android_json)
c = rapt.configure.Configuration(p.path)
if "google_play_key" in build:
android_json["google_play_key"] = build["google_play_key"]
c.google_play_key = build["google_play_key"]
else:
android_json.pop("google_play_key", None)
c.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"])
c.google_play_salt = ", ".join(str(i) for i in build["google_play_salt"])
else:
android_json.pop("google_play_salt", None)
c.google_play_salt = None
if android_json != old_android_json:
with open(filename, "wb") as f:
json.dump(android_json, f)
c.save(p.path)
def android_build(command, p=None, gui=True, launch=False, destination=None, opendir=False):
def android_build(p=None, gui=True, bundle=False, install=False, launch=False, destination=None, opendir=False):
"""
This actually builds the package.
"""
@@ -235,7 +246,7 @@ init python:
parent = os.path.dirname(p.path)
destination_dir = os.path.join(parent, destination)
except:
except Exception:
destination_dir = None
dir_to_open = source_dir
@@ -246,7 +257,7 @@ init python:
try:
os.makedirs(destination_dir)
except:
except Exception:
pass
try:
@@ -256,17 +267,18 @@ init python:
dir_to_open = destination_dir
except:
except Exception:
import traceback
traceback.print_exc()
pass
if opendir:
store.OpenDirectory(dir_to_open)()
dir_to_open = os.path.join(p.path, dir_to_open)
renpy.run(store.OpenDirectory(dir_to_open, absolute=True))
with interface.nolinks():
rapt.build.build(rapt_interface, dist, command, launch=launch, finished=finished)
rapt.build.build(rapt_interface, dist, p.path, bundle=bundle, install=install, launch=launch, finished=finished, permissions=p.dump['build']['android_permissions'])
def android_build_argument(cmd):
@@ -366,29 +378,32 @@ screen android:
frame style "l_indent":
has vbox
hbox:
spacing 15
textbutton _("Debug"):
action SetDict(project.current.data, "android_build", "Debug")
hovered tt.Action(DEBUG_TEXT)
textbutton _("Release"):
action SetDict(project.current.data, "android_build", "Release")
hovered tt.Action(RELEASE_TEXT)
add HALF_SPACER
textbutton _("Install SDK & Create Keys"):
textbutton _("Install SDK"):
action AndroidIfState(state, ANDROID_NO_SDK, Jump("android_installsdk"))
hovered tt.Action(INSTALL_SDK_TEXT)
textbutton _("Generate Keys"):
action AndroidIfState(state, ANDROID_NO_KEY, Jump("android_keys"))
hovered tt.Action(GENERATE_KEYS_TEXT)
textbutton _("Configure"):
action AndroidIfState(state, ANDROID_NO_CONFIG, Jump("android_configure"))
action AndroidIfState(state, ANDROID_NO_KEY, Jump("android_configure"))
hovered tt.Action(CONFIGURE_TEXT)
add SPACER
textbutton _("Play Bundle"):
action SetField(persistent, "android_bundle", True)
hovered tt.Action(PLAY_BUNDLE_TEXT)
style "l_checkbox"
textbutton _("Universal APK"):
action SetField(persistent, "android_bundle", False)
hovered tt.Action(UNIVERSAL_APK_TEXT)
style "l_checkbox"
add SPACER
textbutton _("Build Package"):
action AndroidIfState(state, ANDROID_OK, AndroidBuild("android_build"))
hovered tt.Action(BUILD_TEXT)
@@ -401,7 +416,19 @@ screen android:
action AndroidIfState(state, ANDROID_OK, AndroidBuild("android_build_install_and_launch"))
hovered tt.Action(BUILD_INSTALL_AND_LAUNCH_TEXT)
add SPACER
add SPACER
textbutton _("Force Recompile") action DataToggle("force_recompile") style "l_checkbox"
# Right side.
frame:
style "l_indent"
xmaximum ONEHALF
xfill True
has vbox
add SEPARATOR2
frame:
@@ -420,15 +447,27 @@ screen android:
action AndroidIfState(state, ANDROID_NO_KEY, Jump("logcat"))
hovered tt.Action(LOGCAT_TEXT)
textbutton _("List Devices"):
action AndroidIfState(state, ANDROID_NO_KEY, Jump("android_list_devices"))
hovered tt.Action(LIST_DEVICES_TEXT)
# Right side.
frame:
style "l_indent"
xmaximum ONEHALF
xfill True
textbutton _("Wi-Fi Debugging Pair"):
action AndroidIfState(state, ANDROID_NO_KEY, Jump("android_pair"))
hovered tt.Action(PAIR_TEXT)
has vbox
textbutton _("Wi-Fi Debugging Connect"):
action AndroidIfState(state, ANDROID_NO_KEY, Jump("android_connect"))
hovered tt.Action(CONNECT_TEXT)
textbutton _("Wi-Fi Debugging Disconnect"):
action AndroidIfState(state, ANDROID_NO_KEY, Jump("android_disconnect"))
hovered tt.Action(DISCONNECT_TEXT)
textbutton _("Clean"):
action AndroidIfState(state, ANDROID_NO_KEY, Jump("android_clean"))
hovered tt.Action(CLEAN_TEXT)
add SPACER
add SEPARATOR2
frame:
@@ -464,6 +503,14 @@ label android_installsdk:
jump android
label android_keys:
python:
rapt.keys.generate_keys(MobileInterface("android"), project.current.path)
jump android
label android_configure:
python:
@@ -480,20 +527,20 @@ label android_configure:
label android_build:
$ android_build([ android_build_argument("assemble") ], opendir=True)
$ android_build(bundle=persistent.android_bundle, opendir=True)
jump android
label android_build_and_install:
$ android_build([ android_build_argument("install") ])
$ android_build(bundle=persistent.android_bundle, install=True, opendir=True)
jump android
label android_build_install_and_launch:
$ android_build([android_build_argument("install") ], launch=True)
$ android_build(bundle=persistent.android_bundle, install=True, launch=True, opendir=True)
jump android
@@ -508,22 +555,163 @@ label logcat:
jump android
label android_list_devices:
python hide:
cc = ConsoleCommand()
cc.add(rapt.plat.adb, "devices")
cc.run()
jump android
label android_pair:
python hide:
pairing_code = interface.input(
_("Wi-Fi Pairing Code"),
_("If supported, this can be found in 'Developer options', 'Wireless debugging', 'Pair device with pairing code'."),
sanitize=False,
cancel=Jump("android"),
)
host = interface.input(
_("Pairing Host & Port"),
_("If supported, this can be found in 'Developer options', 'Wireless debugging', 'Pair device with pairing code'."),
sanitize=False,
cancel=Jump("android"),
)
cc = ConsoleCommand()
cc.add(rapt.plat.adb, "pair", host, pairing_code)
cc.run()
jump android
label android_connect:
python hide:
host = interface.input(
_("IP Address & Port"),
_("If supported, this can be found in 'Developer options', 'Wireless debugging'."),
sanitize=False,
cancel=Jump("android"),
)
cc = ConsoleCommand()
cc.add(rapt.plat.adb, "connect", host)
cc.run()
jump android
label android_disconnect:
python hide:
host = interface.input(
_("IP Address & Port"),
_("This can be found in 'List Devices'."),
sanitize=False,
cancel=Jump("android"),
)
cc = ConsoleCommand()
cc.add(rapt.plat.adb, "disconnect", host)
cc.run()
jump android
label android_clean:
python hide:
import shutil
import time
interface = MobileInterface("android")
interface.info(_("Cleaning up Android project."))
# Get the android json file, for the update_always key.
try:
filename = os.path.join(project.current.path, ".android.json")
with open(filename, "rb") as f:
android_json = json.load(f)
except Exception:
android_json = {}
# Clean up the files.
def clean(path):
if os.path.exists(path):
shutil.rmtree(path)
if android_json.get("update_always", True):
try:
with open(rapt.plat.path("project/local.properties"), "r") as f:
local_properties = f.read()
except Exception:
local_properties = None
try:
with open(rapt.plat.path("project/bundle.properties"), "r") as f:
bundle_properties = f.read()
except Exception:
bundle_properties = None
try:
with open(rapt.plat.path("project/gradle.properties"), "r") as f:
gradle_properties = f.read()
except Exception:
gradle_properties = None
clean(rapt.plat.path("project"))
if local_properties or bundle_properties or gradle_properties:
os.mkdir(rapt.plat.path("project"))
if local_properties:
with open(rapt.plat.path("project/local.properties"), "w") as f:
f.write(local_properties)
if bundle_properties:
with open(rapt.plat.path("project/bundle.properties"), "w") as f:
f.write(bundle_properties)
if gradle_properties:
with open(rapt.plat.path("project/gradle.properties"), "w") as f:
f.write(gradle_properties)
clean(rapt.plat.path("bin"))
clean(project.current.temp_filename("android.dist"))
# This can go really fast, so pause so it looks like something is happening.
time.sleep(.5)
jump android
init python:
def android_build_command():
ap = renpy.arguments.ArgumentParser()
ap.add_argument("android_project", help="The path to the project directory.")
ap.add_argument("gradle_commands", help="Commands to pass to gradle. (Try 'installDebug' or 'assembleRelease'.)", nargs='+')
ap.add_argument("--launch", action="store_true", help="Launches the app after build and install compete.")
ap.add_argument("--bundle", action="store_true", help="Builds an android app bundle.")
ap.add_argument("--install", action="store_true", help="Installs the app on a device.")
ap.add_argument("--launch", action="store_true", help="Launches the app after build and install complete. Implies --install.")
ap.add_argument("--destination", "--dest", default=None, action="store", help="The directory where the packaged files should be placed.")
args = ap.parse_args()
if args.launch:
args.install = True
p = project.Project(args.android_project)
android_build(args.gradle_commands, p=p, gui=False, launch=args.launch, destination=args.destination)
android_build(p=p, gui=False, bundle=args.bundle, install=args.install, launch=args.launch, destination=args.destination)
return False
renpy.arguments.register_command("android_build", android_build_command)
+20 -20
View File
@@ -1,4 +1,4 @@
# This file contains strings used by RAPT, so the Ren'Py translation framework
# can find them. It's automatically generated by rapt/update_translations.py, and
# hence should not be changed by hand.
@@ -6,19 +6,18 @@
init python hide:
__("{} is not a directory.")
__("{} does not contain a Ren'Py game.")
__("{} does not contain a Ren'Py game.")
__("Run configure before attempting to build the app.")
__("Google Play support is enabled, but build.google_play_key is not defined.")
__("Updating project.")
__("Creating assets directory.")
__("Creating expansion file.")
__("Packaging internal data.")
__("I'm using Gradle to build the package.")
__("Uploading expansion file.")
__("The build seems to have failed.")
__("I'm installing the bundle.")
__("Installing the bundle appears to have failed.")
__("Launching app.")
__("Launching the app appears to have failed.")
__("The build seems to have succeeded.")
__("The arm64-v8a version works on newer Android devices, the armeabi-v7a version works on older devices, and the x86_64 version works on the simulator and chromebooks.")
__("The universal version works everywhere but is larger.")
__("What is the full name of your application? This name will appear in the list of installed applications.")
__("What is the short name of your application? This name will be used in the launcher, and for application shortcuts.")
__("What is the name of the package?\n\nThis is usually of the form com.domain.program or com.domain.email.program. It may only contain ASCII letters and dots. It must contain at least one dot.")
@@ -30,8 +29,8 @@ init python hide:
__("{} is a Java keyword, and can't be used as part of a package name.")
__("What is the application's version?\n\nThis should be the human-readable version that you would present to a person. It must contain only numbers and dots.")
__("The version number must contain only numbers and dots.")
__("What is the version code?\n\nThis must be a positive integer number, and the value should increase between versions.")
__("The numeric version must contain only numbers.")
__("How much RAM (in GB) do you want to allocate to Gradle?\nThis must be a positive integer number.")
__("The RAM size must contain only numbers and be positive.")
__("How would you like your application to be displayed?")
__("In landscape orientation.")
__("In portrait orientation.")
@@ -41,18 +40,13 @@ init python hide:
__("Amazon App Store.")
__("Both, in one app.")
__("Neither.")
__("Would you like to create an expansion APK?")
__("Automatically installing expansion APKs {a=https://issuetracker.google.com/issues/160942333}may not work on Android 11{/a}.")
__("No. Size limit of 100 MB on Google Play, but can be distributed through other stores and sideloaded.")
__("Yes. 2 GB size limit, but won't work outside of Google Play. (Read the documentation to get this to work.)")
__("Do you want to allow the app to access the Internet?")
__("Do you want to automatically update the Java source code?")
__("Yes. This is the best choice for most projects.")
__("No. This may require manual updates when Ren'Py or the project configuration changes.")
__("Unknown configuration variable: {}")
__("I'm compiling a short test program, to see if you have a working JDK on your system.")
__("I was unable to use javac to compile a test file. If you haven't installed the Java Development Kit yet, please download it from:\n\nhttps://adoptopenjdk.net/?variant=openjdk8&jvmVariant=hotspot\n\nThe JDK is different from the JRE, so it's possible you have Java without having the JDK. Without a working JDK, I can't continue.")
__("The version of Java on your computer does not appear to be JDK 8, which is the only version supported by the Android SDK. If you need to install JDK 8, you can download it from:\n\nhttps://adoptopenjdk.net/?variant=openjdk8&jvmVariant=hotspot\n\nYou can also set the JAVA_HOME environment variable to use a different version of Java.")
__("I was unable to use javac to compile a test file. If you haven't installed the Java Development Kit yet, please download it from:\n\n{a=https://adoptium.net/?variant=openjdk8}https://adoptium.net/?variant=openjdk8{/a}\n\nThe JDK is different from the JRE, so it's possible you have Java without having the JDK. Please make sure you installed the 'JavaSoft (Oracle) registry keys'.\n\nWithout a working JDK, I can't continue.")
__("The version of Java on your computer does not appear to be JDK 8, which is the only version supported by the Android SDK. If you need to install JDK 8, you can download it from:\n\n{a=https://adoptium.net/?variant=openjdk8}https://adoptium.net/?variant=openjdk8{/a}\n\nYou can also set the JAVA_HOME environment variable to use a different version of Java.")
__("The JDK is present and working. Good!")
__("The Android SDK has already been unpacked.")
__("Do you accept the Android SDK Terms and Conditions?")
@@ -64,11 +58,17 @@ init python hide:
__("I was unable to accept the Android licenses.")
__("I was unable to install the required Android packages.")
__("I've finished installing the required Android packages.")
__("You set the keystore yourself, so I'll assume it's how you want it.")
__("You've already created an Android keystore, so I won't create a new one for you.")
__("I can create an application signing key for you. Signing an application with this key allows it to be placed in the Android Market and other app stores.\n\nDo you want to create a key?")
__("I will create the key in the android.keystore file.\n\nYou need to back this file up. If you lose it, you will not be able to upgrade your application.\n\nYou also need to keep the key safe. If evil people get this file, they could make fake versions of your application, and potentially steal your users' data.\n\nWill you make a backup of android.keystore, and keep it in a safe place?")
__("It looks like you're ready to start packaging games.")
__("Please enter your name or the name of your organization.")
__("I found an android.keystore file in the rapt directory. Do you want to use this file?")
__("I can create an application signing key for you. This key is required to create Universal APK for sideloading and stores other than Google Play.\n\nDo you want to create a key?")
__("I will create the key in the android.keystore file.\n\nYou need to back this file up. If you lose it, you will not be able to upgrade your application.\n\nYou also need to keep the key safe. If evil people get this file, they could make fake versions of your application, and potentially steal your users' data.\n\nWill you make a backup of android.keystore, and keep it in a safe place?")
__("\n\nSaying 'No' will prevent key creation.")
__("Could not create android.keystore. Is keytool in your path?")
__("I've finished creating android.keystore. Please back it up, and keep it in a safe place.")
__("It looks like you're ready to start packaging games.")
__("I found a bundle.keystore file in the rapt directory. Do you want to use this file?")
__("I can create a bundle signing key for you. This key is required to build an Android App Bundle (AAB) for upload to Google Play.\n\nDo you want to create a key?")
__("I will create the key in the bundle.keystore file.\n\nYou need to back this file up. If you lose it, you will not be able to upgrade your application.\n\nYou also need to keep the key safe. If evil people get this file, they could make fake versions of your application, and potentially steal your users' data.\n\nWill you make a backup of bundle.keystore, and keep it in a safe place?")
__("\n\nSaying 'No' will prevent key creation.")
__("Could not create bundle.keystore. Is keytool in your path?")
__("I've opened the directory containing android.keystore and bundle.keystore. Please back them up, and keep them in a safe place.")
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 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
+30 -20
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 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
@@ -23,16 +23,17 @@
# Contains a reasonable description of the format.
from __future__ import print_function
from renpy.compat import bchr, chr, str, PY2
import struct
import sys
import array
import pefile # @UnresolvedImport
import pefile
# This class performs various operations on memory-loaded binary files,
# including modifications.
class BinFile(object):
def set_u32(self, addr, value):
@@ -67,7 +68,7 @@ class BinFile(object):
rv = u""
for _i in range(c):
rv += unichr(self.u16())
rv += chr(self.u16())
return rv
@@ -75,14 +76,24 @@ class BinFile(object):
self.addr = addr
def tostring(self):
return self.a.tostring()
if PY2:
return self.a.tostring() # type: ignore
else:
return self.a.tobytes()
def substring(self, start, len): # @ReservedAssignment
return self.a[start:start + len].tostring()
if PY2:
return self.a[start:start + len].tostring() # type: ignore
else:
return self.a[start:start + len].tobytes()
def __init__(self, data):
self.a = array.array(b'B')
self.a.fromstring(data)
self.a = array.array('B')
if PY2:
self.a.fromstring(data) # type: ignore
else:
self.a.frombytes(data)
##############################################################################
# These functions parse data out of the file. In these functions, offset is
@@ -106,7 +117,7 @@ def parse_data(bf, offset):
bf.seek(data_offset - resource_virtual)
for _i in range(data_len):
l.append(chr(bf.u8()))
l.append(bchr(bf.u8()))
return (code_page, b"".join(l))
@@ -210,8 +221,8 @@ class Packer(object):
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))
name_entries = sorted((a, b) for a, b in d.items() if isinstance(a, str))
id_entries = sorted((a, b) for a, b in d.items() if isinstance(a, int))
rv = struct.pack("<IIHHHH", 0, 0, 4, 0, len(name_entries), len(id_entries))
@@ -220,7 +231,7 @@ class Packer(object):
rest = b""
for (name, value) in name_entries + id_entries:
if isinstance(name, unicode):
if isinstance(name, str):
name = 0x80000000 | self.pack_name(name)
if isinstance(value, dict):
@@ -318,8 +329,8 @@ def change_icons(oldexe, icofn):
# As a related note, apparently this flag has been deprecated, but appears to be set (I think ..) in the renpy.exe that is used to build from..
# no idea of a consequence, just an observation
# https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#characteristics , see "IMAGE_FILE_LINE_NUMS_STRIPPED" :
# COFF line numbers have been removed. This flag is deprecated and should be zero.
# In renpy.exe, this 2-byte flag is @ 0x096 and 0x097 in little-endian
# COFF line numbers have been removed. This flag is deprecated and should be zero.
# In renpy.exe, this 2-byte flag is @ 0x096 and 0x097 in little-endian
######
f.close()
@@ -338,10 +349,10 @@ def change_icons(oldexe, icofn):
#From note about flags above regarding image flags. These two should be 0
pe.FILE_HEADER.Characteristics = pe.FILE_HEADER.Characteristics & (~pefile.IMAGE_CHARACTERISTICS["IMAGE_FILE_LINE_NUMS_STRIPPED"])
pe.FILE_HEADER.Characteristics = pe.FILE_HEADER.Characteristics & (~pefile.IMAGE_CHARACTERISTICS["IMAGE_FILE_LOCAL_SYMS_STRIPPED"])
#Per docs, symbol table can just be removed
#https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#coff-file-header-object-and-image see "PointerToSymbolTable" and "NumberOfSymbols "
pe.FILE_HEADER.PointerToSymbolTable = 0
pe.FILE_HEADER.NumberOfSymbols = 0
@@ -361,7 +372,7 @@ def change_icons(oldexe, icofn):
#
#####
# SizeOfImage must be aligned to SectionAlignment (memory alignment)
# There is NO padding needed, the image size number simply needs to be aligned to >= the
# There is NO padding needed, the image size number simply needs to be aligned to >= the
memoryalignment = pe.OPTIONAL_HEADER.SectionAlignment
filealignment = pe.OPTIONAL_HEADER.FileAlignment
@@ -404,11 +415,10 @@ def change_icons(oldexe, icofn):
#The symbol table is simply left off. Its size DOES factor into ImageSize, but we didn't calculate it above, so fine
#Correctly checksum the file. The entire file is involved in the calculation, so a new PE object must be generated for the calculation to work against
newFile = pe.write()[:base] + rsrc
newpe = pefile.PE(data=newFile)
newpe = pefile.PE(data=bytes(newFile))
newpe.OPTIONAL_HEADER.CheckSum = newpe.generate_checksum()
return newpe.write()
return bytes(newpe.write())
if __name__ == "__main__":
+26 -107
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 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
@@ -19,24 +19,12 @@
# 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 renpy.windows:
import EasyDialogsWin as EasyDialogs
else:
EasyDialogs = None
pyobjus = None
if renpy.macintosh:
try:
import pyobjus
except:
pass
try:
import _renpytfd
except Exception:
_renpytfd = None
def directory_is_writable(path):
test = os.path.join(path, "renpy test do not use")
@@ -50,10 +38,10 @@ init python:
return True
except:
except Exception:
return False
def choose_directory(path):
def choose_directory(default_path):
"""
Pops up a directory chooser.
@@ -66,100 +54,31 @@ init python:
rather than user choice.
"""
if path:
default_path = path
if _renpytfd:
path = _renpytfd.selectFolderDialog(__("Select Projects Directory"), default_path)
else:
path = None
else:
try:
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
else:
path = None
elif pyobjus:
from pyobjus import autoclass
from pyobjus.dylib_manager import load_framework, INCLUDE
load_framework(INCLUDE.AppKit)
NSURL = autoclass('NSURL')
NSOpenPanel = autoclass('NSOpenPanel')
panel = NSOpenPanel.openPanel()
panel.setCanChooseDirectories_(True)
panel.setCanChooseFiles_(False)
panel.setCanCreateDirectories_(True)
if default_path:
url = NSURL.fileURLWithPath_(default_path)
panel.setDirectoryURL_(url)
if panel.runModal():
path = panel.filename().UTF8String().decode("utf-8")
else:
path = None
else:
try:
if renpy.macintosh:
# tkinter is broken on Python 3, so use it as a last resort - maybe apple fixed it?
system_pythons = [ "/usr/bin/python2", "/usr/bin/python", "/usr/bin/python3" ]
else:
system_pythons = [ "/usr/bin/python3", "/usr/bin/python2", "/usr/bin/python" ]
for system_python in system_pythons:
if os.path.exists(system_python):
break
else:
system_python = system_pythons[0]
cmd = [ system_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 directory. Please install the python3-tk or tkinter package."), label=None)
if code:
interface.error(_("Ren'Py was unable to run python with tkinter to choose the directory. Please install the python3-tk or tkinter package."), label=None)
elif choice:
path = choice.decode("utf-8")
is_default = False
if default_path is None:
try:
default_path = os.path.dirname(os.path.abspath(config.renpy_base))
except Exception:
default_path = os.path.abspath(config.renpy_base)
# Path being None or "" means nothing was selected.
if not path:
path = default_path
is_default = True
if default_path is None or not os.path.isdir(default_path) or not directory_is_writable(default_path):
interface.error(_("No directory was selected, but one is required."))
return default_path, True
# Apply more thorough checks to an explicit path.
path = renpy.fsdecode(path)
if (not os.path.isdir(path)) or (not directory_is_writable(path)):
interface.error(_("The selected projects directory is not writable."))
path = default_path
is_default = True
if not os.path.isdir(path):
interface.error(_("The selected directory does not exist."))
elif not directory_is_writable(path):
interface.error(_("The selected directory is not writable."))
if is_default and (not directory_is_writable(path)):
path = os.path.expanduser("~")
return path, is_default
return path, False
+4 -4
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 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
@@ -294,7 +294,7 @@ init python:
if changed:
try:
os.unlink(filename + ".bak")
except:
except Exception:
pass
os.rename(filename, filename + ".bak")
@@ -323,7 +323,7 @@ init python:
if changed:
try:
os.unlink(filename + ".bak")
except:
except Exception:
pass
os.rename(filename, filename + ".bak")
@@ -333,7 +333,7 @@ init python:
try:
# just in case
os.unlink(filename + ".new")
except:
except Exception:
pass
pass
+23 -18
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
@@ -33,15 +33,15 @@ init python:
if renpy.macintosh:
fn = "console.command"
nl = "\n"
prefix = "#!/bin/bash"
nl = b"\n"
prefix = "#!/bin/sh"
elif renpy.windows:
fn = "console.bat"
nl = "\r\n"
nl = b"\r\n"
prefix = "@echo off"
else:
fn = "console.sh"
nl = "\n"
nl = b"\n"
prefix = "#!/bin/bash"
@@ -49,16 +49,23 @@ init python:
self.f = open(self.fn, "wb")
self.nl = nl
self.f.write(renpy.fsencode(prefix) + nl)
self.f.write(renpy.fsencode(prefix, force=True) + nl)
def add(self, *args):
"""
Adds a command to be run.
"""
args = [ '"{}"'.format(renpy.fsencode(i)) for i in args]
self.f.write(" ".join(args) + self.nl)
args = [ b'"' + renpy.fsencode(i, force=True) + b'"' for i in args]
self.f.write(b" ".join(args) + self.nl)
def write(self, *args):
"""
Adds a command to be run.
"""
args = [ renpy.fsencode(i, force=True) for i in args]
self.f.write(b" ".join(args) + self.nl)
def run(self):
"""
@@ -66,21 +73,19 @@ init python:
"""
if renpy.windows:
self.add("pause")
self.write("pause")
elif renpy.linux:
self.add("echo", "Press enter to close this window...")
self.add("read")
self.write("read")
self.f.close()
os.chmod(self.fn, 0o755)
command = renpy.fsencode('"{}"'.format(self.fn.replace("\"", "\\\"")))
if renpy.windows:
subprocess.Popen([ command ], shell=True)
elif renpy.macintosh:
subprocess.Popen([ "open", "-a", "Terminal", command ])
else:
if renpy.linux:
command = renpy.fsencode('"{}"'.format(self.fn.replace("\"", "\\\"")))
subprocess.Popen([ "x-terminal-emulator", "-e", command ])
else:
command = renpy.fsencode(self.fn)
os.startfile(command)
interface.interaction(_("INFORMATION"), _("The command is being run in a new operating system console window."), pause=2.5)
+397 -92
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 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
@@ -26,7 +26,6 @@
# might include windows path separators (\), but archive paths and names we
# deal with/match against use the unix separator (/).
init python in distribute:
from store import config, persistent
@@ -52,6 +51,27 @@ init python in distribute:
import time
import shutil
def py(s):
"""
Formats a string with information about the python version.
"""
return s.format(
major=sys.version_info.major,
minor=sys.version_info.minor,
)
# Going from 7.4 to 7.5 or 8.0, the library directory changed.
RENPY_PATCH = py("""\
def change_renpy_executable():
import sys, os, renpy, site
if hasattr(site, "RENPY_PLATFORM") and hasattr(sys, "renpy_executable") and (renpy.linux or renpy.windows):
sys.renpy_executable = os.path.join(renpy.config.renpy_base, "lib", "py{major}-" + site.RENPY_PLATFORM, os.path.basename(sys.renpy_executable))
change_renpy_executable()
""")
match_cache = { }
def compile_match(pattern):
@@ -176,7 +196,7 @@ init python in distribute:
key = (self.name, self.directory, self.executable)
hash.update(repr(key))
hash.update(repr(key).encode("utf-8"))
if self.path is None:
return
@@ -191,9 +211,16 @@ init python in distribute:
digest = distributor.hash_cache[self.path]
else:
digest = hash_file(self.path)
distributor.hash_cache[self.path] = digest
hash.update(digest)
hash.update(digest.encode("utf-8"))
def reprefix(self, old, new):
rv = self.copy()
if self.name.startswith(old):
rv.name = new + self.name[len(old):]
return rv
class FileList(list):
"""
@@ -235,6 +262,34 @@ init python in distribute:
return rv
def add_missing_directories(self):
"""
Adds to this file list all directories that are needed by other
entries in this file list.
"""
rv = self.copy()
seen = set()
required = set()
for i in self:
seen.add(i.name)
name = i.name
while "/" in name:
name = name.rpartition("/")[0]
required.add(name)
for name in required - seen:
rv.append(File(name, None, True, False))
rv.sort()
return rv
@staticmethod
def merge(l):
"""
@@ -313,13 +368,15 @@ init python in distribute:
duplicate is set.
"""
prefix = py("lib/py{major}-mac-universal")
for f in list(self):
if f.name.startswith("lib/python2.7") and (not duplicate):
name = app + "/Contents/MacOS/" + f.name
if f.name.startswith("lib/python") and (not duplicate):
name = app + "/Contents/Resources/" + f.name
elif f.name.startswith("lib/mac-x86_64"):
name = app + "/Contents/MacOS/" + f.name[15:]
elif f.name.startswith(prefix):
name = app + "/Contents/MacOS/" + f.name[len(prefix)+1:]
else:
continue
@@ -344,7 +401,10 @@ init python in distribute:
for f in sorted(self, key=lambda a : a.name):
f.hash(sha, distributor)
return sha.hexdigest()
if PY2:
return sha.hexdigest().decode("utf-8")
else:
return sha.hexdigest()
def split_by_prefix(self, prefix):
"""
@@ -363,13 +423,25 @@ init python in distribute:
return yes, no
def reprefix(self, old, new):
"""
Returns a new file list with all the paths reprefixed.
"""
rv = FileList()
for f in self:
rv.append(f.reprefix(old, new))
return rv
class Distributor(object):
"""
This manages the process of building distributions.
"""
def __init__(self, project, destination=None, reporter=None, packages=None, build_update=True, open_directory=False, noarchive=False, packagedest=None, report_success=True, scan=True, macapp=None):
def __init__(self, project, destination=None, reporter=None, packages=None, build_update=True, open_directory=False, noarchive=False, packagedest=None, report_success=True, scan=True, macapp=None, force_format=None, files_filter=None):
"""
Distributes `project`.
@@ -403,7 +475,15 @@ init python in distribute:
`macapp`
If given, the path to a macapp that's used instead of
the macapp
the macapp that's included with Ren'Py.
`force_format`
If given, forces the format of the distribution to be this.
`files_filter`
If given, use this object to decide which files must be included.
The object must contains the `filter(file, variant, format)`
method which must return True is the file must be included.
"""
# A map from a package to a unique update version hash.
@@ -448,6 +528,21 @@ init python in distribute:
self.reporter.info(_("Scanning project files..."))
project.update_dump(force=True, gui=False, compile=project.data['force_recompile'])
if project.data['tutorial']:
self.reporter.info(_("Building distributions failed:\n\nThe project is the Ren'Py Tutorial, which can't be distributed outside of Ren'Py. Consider using The Question as a test project."), pause=True)
self.log.close()
return
if project.data['force_recompile']:
import compileall
compileall.compile_dir(
os.path.join(config.renpy_base, "renpy"),
ddir="renpy/",
force=True,
quiet=True,
)
if project.dump.get("error", False):
raise Exception("Could not get build data from the project. Please ensure the project runs.")
@@ -461,7 +556,10 @@ init python in distribute:
self.pretty_version = build['version']
if (" " in self.base_name) or (":" in self.base_name) or (";" in self.base_name):
reporter.info(_("Building distributions failed:\n\nThe build.directory_name variable may not include the space, colon, or semicolon characters."), pause=True)
reporter.info(
_("Building distributions failed:\n\nThe build.directory_name variable may not include the space, colon, or semicolon characters."),
submessage=_("This may be derived from build.name and config.version or build.version."),
pause=True)
self.log.close()
return
@@ -476,7 +574,7 @@ init python in distribute:
if not packagedest:
try:
os.makedirs(self.destination)
except:
except Exception:
pass
self.load_build_cache()
@@ -486,6 +584,9 @@ init python in distribute:
self.include_update = build['include_update']
self.build_update = self.include_update and build_update
if self.include_update:
self.make_key_pem()
# The various executables, which change names based on self.executable_name.
self.app = self.executable_name + ".app"
self.exe = self.executable_name + ".exe"
@@ -522,6 +623,10 @@ init python in distribute:
self.reporter.info(_("Scanning Ren'Py files..."))
self.scan_and_classify(config.renpy_base, build["renpy_patterns"])
if build["_sdk_fonts"]:
for k in list(self.file_lists.keys()):
self.file_lists[k] = self.file_lists[k].reprefix("sdk-fonts", "game")
# Add Python (with the same name as our executables)
self.add_python()
@@ -546,15 +651,31 @@ init python in distribute:
self.merge_file_lists()
# Rename the executable-like files.
if not build['renpy']:
self.rename()
self.rename()
# Sign the mac app once on Ren'Py.
if self.build["renpy"]:
fl = self.file_lists['binary']
app, rest = fl.split_by_prefix(self.app)
if app:
app = self.sign_app(app, macapp)
fl = FileList.merge([ app, rest ])
self.file_lists['binary'] = fl
else:
raise Exception("No mac app found.")
# The time of the update version.
self.update_version = int(time.time())
self.files_filter = files_filter
for p in build_packages:
for f in p["formats"]:
formats = p["formats"]
if force_format is not None:
formats = [ force_format ]
for f in formats:
self.make_package(
p["name"],
@@ -563,11 +684,12 @@ init python in distribute:
dlc=p["dlc"])
if self.build_update and p["update"]:
self.make_package(
p["name"],
"update",
p["file_lists"],
dlc=p["dlc"])
for update_format in self.list_update_formats():
self.make_package(
p["name"],
update_format,
p["file_lists"],
dlc=p["dlc"])
wait_parallel_threads()
@@ -584,7 +706,24 @@ init python in distribute:
self.reporter.info(_("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."))
if open_directory:
store.OpenDirectory(self.destination)()
renpy.run(store.OpenDirectory(self.destination, absolute=True))
def list_update_formats(self):
"""
Returns a list of update formats to build.
"""
rv = [ ]
for update_format in self.build["update_formats"]:
if update_format == "rpu":
rv.append("rpu")
elif update_format == "zsync":
rv.append("update")
else:
raise Exception("Unknown update format: " + update_format)
return rv
def scan_and_classify(self, directory, patterns):
"""
@@ -610,20 +749,37 @@ init python in distribute:
is_dir = os.path.isdir(path)
if is_dir:
match_name = name + "/"
match_names = [ name + "/", name ]
else:
match_name = name
match_names = [ name ]
for pattern, file_list in patterns:
if match(match_name, pattern):
matched = False
for match_name in match_names:
if match(match_name, pattern):
# When we have ('test/**', None), avoid excluding test.
if (not file_list) and is_dir:
new_pattern = pattern.rstrip("*")
if (pattern != new_pattern) and match(match_name, new_pattern):
continue
matched = True
break
if matched:
break
else:
print(str(match_name), "doesn't match anything.", file=self.log)
print(str(match_names[0]), "doesn't match anything.", file=self.log)
pattern = None
file_list = None
print(str(match_name), "matches", str(pattern), "(" + str(file_list) + ").", file=self.log)
print(str(match_names[0]), "matches", str(pattern), "(" + str(file_list) + ").", file=self.log)
if file_list is None:
return
@@ -815,7 +971,7 @@ init python in distribute:
tfn = self.temp_filename(list_name + "_hash.txt")
with open(tfn, "wb") as tf:
with open(tfn, "w") as tf:
tf.write(self.file_lists[list_name].hash(self))
self.add_file("binary", "launcher/game/" + list_name + "_hash.txt", tfn)
@@ -836,7 +992,7 @@ init python in distribute:
data = f.read()
with open(tmp_fn, "wb") as f:
f.write(b"#!/usr/bin/env python2\n")
f.write(b"#!/usr/bin/env python3\n")
f.write(data)
self.add_file("source_only", "renpy.py", tmp_fn, True)
@@ -853,6 +1009,7 @@ init python in distribute:
CFBundleDisplayName=display_name,
CFBundleExecutable=executable_name,
CFBundleIconFile="icon",
CFBundleIdentifier="com.domain.game",
CFBundleInfoDictionaryVersion="6.0",
CFBundleName=display_name,
CFBundlePackageType="APPL",
@@ -882,7 +1039,13 @@ init python in distribute:
plist.update(self.build.get("mac_info_plist", { }))
rv = self.temp_filename("Info.plist")
plistlib.writePlist(plist, rv)
if PY2:
plistlib.writePlist(plist, rv)
else:
with open(rv, "wb") as f:
plistlib.dump(plist, f)
return rv
def add_python(self):
@@ -892,44 +1055,56 @@ init python in distribute:
linux = 'binary'
linux_i686 = 'binary'
mac = 'binary'
raspi = 'raspi'
raspi = 'linux_arm'
else:
windows = 'windows'
linux = 'linux'
linux_i686 = 'linux_i686'
mac = 'mac'
raspi = 'linux'
raspi = 'linux_arm'
self.add_file(
linux_i686,
"lib/linux-i686/" + self.executable_name,
os.path.join(config.renpy_base, "lib/linux-i686/renpy"),
True)
prefix = py("lib/py{major}-")
if os.path.exists(linux_i686):
self.add_file(
linux_i686,
prefix + "linux-i686/" + self.executable_name,
os.path.join(config.renpy_base, prefix + "linux-i686/renpy"),
True)
self.add_file(
linux,
"lib/linux-x86_64/" + self.executable_name,
os.path.join(config.renpy_base, "lib/linux-x86_64/renpy"),
prefix + "linux-x86_64/" + self.executable_name,
os.path.join(config.renpy_base, prefix + "linux-x86_64/renpy"),
True)
armfn = os.path.join(config.renpy_base, "lib/linux-armv7l/renpy")
armfn = os.path.join(config.renpy_base, prefix + "linux-armv7l/renpy")
if os.path.exists(armfn):
self.add_file(
raspi,
"lib/linux-armv7l/" + self.executable_name,
prefix + "linux-armv7l/" + self.executable_name,
armfn,
True)
aarch64fn = os.path.join(config.renpy_base, prefix + "linux-aarch64/renpy")
if os.path.exists(aarch64fn):
self.add_file(
raspi,
prefix + "linux-aarch64/" + self.executable_name,
aarch64fn,
True)
self.add_file(
mac,
"lib/mac-x86_64/" + self.executable_name,
os.path.join(config.renpy_base, "lib/mac-x86_64/renpy"),
prefix + "mac-universal/" + self.executable_name,
os.path.join(config.renpy_base, prefix + "mac-universal/renpy"),
True)
def add_mac_files(self):
"""
Add mac-specific files to the distro.
@@ -948,9 +1123,11 @@ init python in distribute:
plist_fn = self.write_plist()
self.add_file(filelist, contents + "/Info.plist", plist_fn)
self.add_file(filelist,
contents + "/MacOS/" + self.executable_name,
os.path.join(config.renpy_base, "lib/mac-x86_64/renpy"))
os.path.join(config.renpy_base, py("lib/py{major}-mac-universal/renpy")))
custom_fn = os.path.join(self.project.path, "icon.icns")
default_fn = os.path.join(config.renpy_base, "launcher/icon.icns")
@@ -967,8 +1144,8 @@ init python in distribute:
if not self.build['renpy']:
self.add_directory(filelist, contents + "/MacOS/lib")
self.add_directory(filelist, contents + "/MacOS/lib/mac-x86_64")
self.add_directory(filelist, contents + "/MacOS/lib/python2.7")
self.add_directory(filelist, contents + py("/MacOS/lib/py{major}-mac-universal"))
self.add_directory(filelist, contents + py("/Resources/lib/python{major}.{minor}"))
self.file_lists[filelist].mac_lib_transform(self.app, self.build['renpy'])
@@ -1014,12 +1191,20 @@ init python in distribute:
if os.path.exists(tmp):
self.add_file(fl, dst, tmp)
if self.build["include_i686"]:
write_exe("lib/windows-i686/renpy.exe", self.exe32, self.exe32, windows_i686)
write_exe("lib/windows-i686/pythonw.exe", "lib/windows-i686/pythonw.exe", "pythonw-32.exe", windows_i686)
if PY2:
if self.build["include_i686"]:
write_exe("lib/py2-windows-i686/renpy.exe", self.exe32, self.exe32, windows_i686)
write_exe("lib/py2-windows-i686/pythonw.exe", "lib/py2-windows-i686/pythonw.exe", "pythonw-32.exe", windows_i686)
write_exe("lib/py2-windows-x86_64/renpy.exe", self.exe, self.exe, windows)
write_exe("lib/py2-windows-x86_64/pythonw.exe", "lib/py2-windows-x86_64/pythonw.exe", "pythonw-64.exe", windows)
else:
write_exe("lib/py3-windows-x86_64/renpy.exe", self.exe, self.exe, windows)
write_exe("lib/py3-windows-x86_64/pythonw.exe", "lib/py3-windows-x86_64/pythonw.exe", "pythonw-64.exe", windows)
write_exe("lib/windows-x86_64/renpy.exe", self.exe, self.exe, windows)
write_exe("lib/windows-x86_64/pythonw.exe", "lib/windows-x86_64/pythonw.exe", "pythonw-64.exe", windows)
def add_main_py(self):
if self.build['renpy']:
@@ -1046,11 +1231,15 @@ init python in distribute:
Rename files in all lists to match the executable names.
"""
major_sh = py("renpy{major}.sh")
def rename_one(fn):
parts = fn.split('/')
p = parts[0]
if p == "renpy.sh":
if p == major_sh:
p = self.sh
elif p == "renpy.sh":
p = self.sh
elif p == "renpy.py":
p = self.py
@@ -1076,7 +1265,7 @@ init python in distribute:
try:
import sys, os
isatty = os.isatty(sys.stdin.fileno())
except:
except Exception:
isatty = False
if isatty:
@@ -1169,13 +1358,13 @@ init python in distribute:
def workaround_mac_notarization(self, fl):
"""
This works around mac notarization by compressing the unsigned,
un-notarized, binaries in lib/mac-x86_64.
un-notarized, binaries in lib/py3-mac-universal.
"""
fl = fl.copy()
for f in fl:
if "/lib/mac-x86_64/" in f.name:
if py("/lib/py{major}-mac-universal/") in f.name:
with open(f.path, "rb") as inf:
data = inf.read()
@@ -1209,15 +1398,19 @@ init python in distribute:
if self.build.get("exclude_empty_directories", True):
fl = fl.filter_empty()
fl = fl.add_missing_directories()
if macapp:
fl = fl.mac_transform(self.app, self.documentation_patterns)
app, rest = fl.split_by_prefix(self.app)
if not self.build["renpy"]:
if app:
app = self.sign_app(app, macapp)
app, rest = fl.split_by_prefix(self.app)
fl = FileList.merge([ app, rest ])
if app:
app = self.sign_app(app, macapp)
fl = FileList.merge([ app, rest ])
self.file_list_cache[key] = fl
return fl.copy()
@@ -1253,6 +1446,7 @@ init python in distribute:
FORMATS = {
"update" : (".update", False, False, False),
"rpu" : ("", False, False, False),
"tar.bz2" : (".tar.bz2", False, False, True),
"zip" : (".zip", False, False, True),
@@ -1262,6 +1456,9 @@ init python in distribute:
"app-zip" : (".zip", False, False, False),
"app-directory" : ("-app", True, False, False),
"app-dmg" : ("-app-dmg", True, True, False),
"bare-tar.bz2" : (".tar.bz2", False, False, False),
"bare-zip" : (".zip", False, False, False),
}
if format not in FORMATS:
@@ -1299,15 +1496,18 @@ init python in distribute:
update_fn = os.path.join(self.destination, filename + ".update.json")
if self.include_update and (variant not in [ 'ios', 'android', 'source']) and (not format.startswith("app-")):
if self.include_update and not format.startswith("app-"):
with open(update_fn, "wb") as f:
with open(update_fn, "wb" if PY2 else "w") as f:
json.dump(update, f, indent=2)
if (not dlc) or (format == "update"):
fl.append(File("update", None, True, False))
fl.append(File("update/current.json", update_fn, False, False))
if not dlc:
fl.append(File("update/key.pem", self.temp_filename("key.pem"), False, False))
# If we're not an update file, prepend the directory.
if (not dlc) and prepend:
fl.prepend_directory(filename)
@@ -1318,6 +1518,10 @@ init python in distribute:
full_filename = filename + ext
path += ext
if format == "rpu":
full_filename = "rpu/" + variant + ".files.rpu"
path = self.destination + "/" + full_filename
if self.build['renpy']:
fl_hash = fl.hash(self)
else:
@@ -1350,11 +1554,13 @@ init python in distribute:
if file_hash:
self.build_cache[full_filename] = (file_hash, fl_hash)
if format == "tar.bz2":
if format == "tar.bz2" or format == "bare-tar.bz2":
pkg = TarPackage(path, "w:bz2")
elif format == "update":
pkg = UpdatePackage(path, filename, self.destination)
elif format == "zip" or format == "app-zip":
elif format == "rpu":
pkg = RPUPackage(self.destination, variant)
elif format == "zip" or format == "app-zip" or format == "bare-zip":
if self.build['renpy']:
pkg = ExternalZipPackage(path)
else:
@@ -1383,17 +1589,20 @@ init python in distribute:
if f.directory:
pkg.add_directory(f.name, f.path)
else:
if self.files_filter is not None and not self.files_filter.filter(f, variant, format):
# Ignore file
continue
pkg.add_file(f.name, f.path, f.executable)
self.reporter.progress_done()
if format == "update":
# Build the zsync file.
self.reporter.info(_("Making the [variant] update zsync file."), variant=variant)
pkg.close()
def close_progress(done, total):
self.reporter.progress(_("Finishing the [variant] [format] package."), done, total, variant=variant, format=format)
pkg.close(close_progress)
if done is not None:
done()
@@ -1409,40 +1618,83 @@ init python in distribute:
index = { }
# Ren'Py 7.4.1 forgot to include mac zsync, so it needs to be downloaded before the update
# can occur.
if self.build['renpy']:
index["monkeypatch"] = "def mac_fix():\n import renpy\n if not renpy.macintosh:\n return\n\n import os\n mac = os.path.join(renpy.config.renpy_base, \"lib\", \"mac-x86_64\")\n zsync = os.path.join(mac, \"zsync\")\n\n if not os.path.isdir(mac):\n return\n\n if os.path.isdir(zsync):\n return\n\n import requests\n\n response = requests.get(\"https://www.renpy.org/dl/mac-fix/zsync\")\n\n with open(zsync + \".new\", \"w\") as f:\n f.write(response.content)\n \n os.chmod(zsync + \".new\", 0o755)\n os.rename(zsync + \".new\", zsync)\n\nmac_fix()\n"
index["monkeypatch"] = RENPY_PATCH
def add_variant(variant):
digest = self.build_cache[self.base_name + "-" + variant + ".update"][0]
sums_size = os.path.getsize(self.destination + "/" + self.base_name + "-" + variant + ".sums")
index[variant] = {
"version" : self.update_versions[variant],
"pretty_version" : self.pretty_version,
"digest" : digest,
"zsync_url" : self.base_name + "-" + variant + ".zsync",
"sums_url" : self.base_name + "-" + variant + ".sums",
"sums_size" : sums_size,
"json_url" : self.base_name + "-" + variant + ".update.json",
}
"renpy_version" : renpy.version_only,
}
fn = renpy.fsencode(os.path.join(self.destination, self.base_name + "-" + variant + ".update"))
if "update" in self.build["update_formats"]:
if os.path.exists(fn):
os.unlink(fn)
digest = self.build_cache[self.base_name + "-" + variant + ".update"][0]
sums_size = os.path.getsize(self.destination + "/" + self.base_name + "-" + variant + ".sums")
index[variant].update({
"digest" : digest,
"zsync_url" : self.base_name + "-" + variant + ".zsync",
"sums_url" : self.base_name + "-" + variant + ".sums",
"sums_size" : sums_size,
"json_url" : self.base_name + "-" + variant + ".update.json",
})
fn = renpy.fsencode(os.path.join(self.destination, self.base_name + "-" + variant + ".update"))
if os.path.exists(fn):
os.unlink(fn)
if "rpu" in self.build["update_formats"]:
rpu_size = 0
rpu_dir = os.path.join(self.destination, "rpu")
for i in os.listdir(rpu_dir):
rpu_size += os.path.getsize(os.path.join(rpu_dir, i))
index[variant]["rpu_url"] = "rpu/" + variant + ".files.rpu"
index[variant]["rpu_digest"] = self.build_cache["rpu/" + variant + ".files.rpu"][0]
index[variant]["rpu_size"] = rpu_size
for p in packages:
if p["update"]:
add_variant(p["name"])
fn = renpy.fsencode(os.path.join(self.destination, "updates.json"))
with open(fn, "wb") as f:
json.dump(index, f, indent=2)
update_data = json.dumps(index, indent=2)
fn = renpy.fsencode(os.path.join(self.destination, "updates.json"))
with open(fn, "wb" if PY2 else "w") as f:
f.write(update_data)
# Write the signed file.
import ecdsa
with open(self.find_update_pem(), "rb") as f:
signing_key = ecdsa.SigningKey.from_pem(f.read())
fn = renpy.fsencode(os.path.join(self.destination, "updates.ecdsa"))
with open(fn, "wb") as f:
f.write(signing_key.sign(update_data.encode("utf-8")))
def find_update_pem(self):
if self.build['renpy']:
return os.path.join(config.renpy_base, "update.pem")
else:
return os.path.join(self.project.path, "update.pem")
def make_key_pem(self):
import ecdsa
with open(self.find_update_pem(), "rb") as f:
signing_key = ecdsa.SigningKey.from_pem(f.read())
key_pem = self.temp_filename("key.pem")
with open(key_pem, "wb") as f:
f.write(signing_key.verifying_key.to_pem())
def save_build_cache(self):
if not self.build['renpy']:
@@ -1450,10 +1702,10 @@ init python in distribute:
fn = renpy.fsencode(os.path.join(self.destination, ".build_cache"))
with open(fn, "wb") as f:
with open(fn, "w", encoding="utf-8") as f:
for k, v in self.build_cache.items():
l = "\t".join([k, v[0], v[1]]) + "\n"
f.write(l.encode("utf-8"))
f.write(l)
def load_build_cache(self):
if not self.build['renpy']:
@@ -1545,6 +1797,8 @@ init python in distribute:
ap.add_argument("--package", action="append", help="If given, a package to build. Defaults to building all packages.")
ap.add_argument("--no-archive", action="store_true", help="If given, files will not be added to archives.")
ap.add_argument("--macapp", default=None, action="store", help="If given, the path to a signed and notarized mac app.")
ap.add_argument("--format", default=None, action="store", help="The format of package to build.")
ap.add_argument("project", help="The path to the project directory.")
args = ap.parse_args()
@@ -1556,12 +1810,58 @@ init python in distribute:
else:
packages = None
Distributor(p, destination=args.destination, reporter=TextReporter(), packages=packages, build_update=args.build_update, noarchive=args.no_archive, packagedest=args.packagedest, macapp=args.macapp)
Distributor(p, destination=args.destination, reporter=TextReporter(), packages=packages, build_update=args.build_update, noarchive=args.no_archive, packagedest=args.packagedest, macapp=args.macapp, force_format=args.format)
return False
renpy.arguments.register_command("distribute", distribute_command)
def update_old_game(project, reporter, compile):
if compile:
reporter.info(_("Recompiling all rpy files into rpyc files..."))
project.launch([ "compile", "--keep-orphan-rpyc" ], wait=True)
files = [fn + "c" for fn in project.script_files()
if fn.startswith("game/") and project.exists(fn + "c")]
len_files = len(files)
if not files:
return
TEMP_OLD_GAME_DIR = project.temp_filename("old-game")
if os.path.isdir(TEMP_OLD_GAME_DIR):
shutil.rmtree(TEMP_OLD_GAME_DIR)
for i, src in enumerate(files):
reporter.progress(_("Copying files..."), i, len_files)
dst = project.temp_filename("old-" + src)
try:
os.makedirs(os.path.dirname(dst))
except Exception:
pass
shutil.copyfile(os.path.join(project.path, src), dst)
reporter.progress_done()
OLD_GAME_DIR = os.path.join(project.path, "old-game")
if os.path.isdir(OLD_GAME_DIR):
shutil.rmtree(OLD_GAME_DIR)
shutil.copytree(TEMP_OLD_GAME_DIR, OLD_GAME_DIR)
def update_old_game_command():
ap = renpy.arguments.ArgumentParser("Back-ups all rpyc files into old-game directory.")
ap.add_argument("project", help="The path to the project directory.")
args = ap.parse_args()
update_old_game(project.Project(args.project), TextReporter(), True)
return False
renpy.arguments.register_command("update_old_game", update_old_game_command)
label distribute:
python hide:
@@ -1575,4 +1875,9 @@ label distribute:
)
jump front_page
jump post_build
label update_old_game:
python hide:
distribute.update_old_game(project.current, distribute.GuiReporter(), False)
return
+30 -2
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 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
@@ -192,6 +192,7 @@ screen build_distributions:
textbutton _("Edit options.rpy") action editor.Edit("game/options.rpy", check=True)
textbutton _("Add from clauses to calls, once") action Jump("add_from")
textbutton _("Update old-game") action Jump("start_update_old_game")
textbutton _("Refresh") action Jump("build_distributions")
add HALF_SPACER
@@ -221,7 +222,13 @@ screen build_distributions:
for pkg in packages:
if not pkg["hidden"]:
$ description = pkg["description"]
textbutton "[description!q]" action PackageToggle(pkg["name"]) style "l_checkbox"
button:
action PackageToggle(pkg["name"]) style "l_checkbox"
hbox:
spacing 3
text "[description!q]"
if pkg["dlc"]:
text _("(DLC)")
add SPACER
add HALF_SPACER
@@ -256,8 +263,27 @@ label add_from:
call add_from_common
jump build_distributions
label start_update_old_game:
call update_old_game
jump build_distributions
label add_update_pem:
python hide:
interface.info("You're trying to build an update, but an update.pem file doesn't exist.\n\nThis file is used to sign updates, and will be automatically created in your projects's base directory.\n\nYou'll need to back up update.pem and keep it safe.", cancel=Jump("build_distributions"))
import ecdsa
key = ecdsa.SigningKey.generate(curve=ecdsa.NIST256p).to_pem()
with open(os.path.join(project.current.path, "update.pem"), "wb") as f:
f.write(key)
return
label start_distribute:
if project.current.dump["build"]["include_update"] and not os.path.exists(os.path.join(project.current.path, "update.pem")):
call add_update_pem
if project.current.data["add_from"]:
call add_from_common
@@ -276,6 +302,8 @@ label build_distributions:
call build_update_dump
label post_build:
if not project.current.dump["build"]["directory_name"]:
jump build_missing
+3 -3
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
@@ -36,13 +36,13 @@ init python:
if os.path.exists(fn):
os.unlink(fn)
with open(fn, "wb") as f:
with open(fn, "w") as f:
f.write("Testing to see if we're in a DMG.\r\n")
os.unlink(fn)
return
except:
except Exception:
# If we're here, we didn't make it through the checks safely. So
# put up a warning message.
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 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
+83 -28
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 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
@@ -67,8 +67,8 @@ init 1 python in editor:
ei = EditorInfo(filename)
if ei.name in editors:
if editors[ei.name].mtime >= ei.mtime:
return
if editors[ei.name].mtime >= ei.mtime:
return
editors[ei.name] = ei
@@ -148,39 +148,79 @@ init 1 python in editor:
fei = fancy_editors = [ ]
# Atom.
AD = _("(Recommended) A modern and approachable text editor.")
# Visual Studio Code
AD1 = _("A modern editor with many extensions including advanced Ren'Py integration.")
AD2 = _("A modern editor with many extensions including advanced Ren'Py integration.\n{a=jump:reinstall_vscode}Upgrade Visual Studio Code to the latest version.{/a}")
if renpy.windows:
dlc = "atom-windows"
installed = os.path.exists(os.path.join(config.basedir, "atom/atom-windows"))
installed = os.path.exists(os.path.join(config.renpy_base, "vscode/VSCode-win32-x64"))
elif renpy.macintosh:
dlc = "atom-mac"
installed = os.path.exists(os.path.join(config.basedir, "atom/Atom.app"))
installed = os.path.exists(os.path.join(config.renpy_base, "vscode/Visual Studio Code.app"))
else:
dlc = "atom-linux"
installed = os.path.exists(os.path.join(config.basedir, "atom/atom-linux-" + platform.machine()))
if renpy.arch == "aarch64":
arch = "arm64"
elif renpy.arch == "armv7l":
arch = "arm"
else:
arch = "x64"
installed = os.path.exists(os.path.join(config.renpy_base, "vscode/VSCode-linux-" + arch))
e = FancyEditorInfo(
0,
"Atom",
AD,
dlc,
_("Up to 150 MB download required."),
_("Visual Studio Code"),
AD2 if installed else AD2,
"extension:vscode",
_("Up to 110 MB download required."),
None)
e.installed = e.installed and installed
fei.append(e)
# jEdit
# Atom.
AD = _("A modern and approachable text editor.")
if renpy.windows:
dlc = "atom-windows"
installed = os.path.exists(os.path.join(config.renpy_base, "atom/atom-windows"))
elif renpy.macintosh:
dlc = "atom-mac"
installed = os.path.exists(os.path.join(config.renpy_base, "atom/Atom.app"))
else:
dlc = "atom-linux"
installed = os.path.exists(os.path.join(config.renpy_base, "atom/atom-linux-" + platform.machine()))
if not (renpy.arch in [ "aarch64", "armv7l" ]):
e = FancyEditorInfo(
1,
_("Atom"),
AD,
"extension:atom",
_("Up to 150 MB download required."),
None)
e.installed = e.installed and (installed or 'RENPY_ATOM' in os.environ)
fei.append(e)
# jEdit - Only present if it exists on system.
if os.path.exists(os.path.join(config.renpy_base, "jedit")):
fei.append(FancyEditorInfo(
2,
_("jEdit"),
_("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(
2,
"jEdit",
_("A mature editor that requires Java."),
"jedit",
_("1.8 MB download required."),
_("This may have occured because Java is not installed on this system."),
3,
_("Visual Studio Code (System)"),
_("Uses a copy of Visual Studio Code that you have installed outside of Ren'Py. It's recommended you install the language-renpy extension to add support for Ren'Py files."),
))
fei.append(FancyEditorInfo(
@@ -189,8 +229,11 @@ init 1 python in editor:
_("Invokes the editor your operating system has associated with .rpy files."),
None))
for k in editors:
if k in [ "Atom", "jEdit", "System Editor", "None" ]:
if k in [ "Visual Studio Code", "Visual Studio Code (System)", "Atom", "jEdit", "System Editor", "None" ]:
continue
fei.append(FancyEditorInfo(
@@ -210,7 +253,8 @@ init 1 python in editor:
# If we're in a linux distro or something, assume all editors work.
if not updater.can_update():
for i in fei:
i.installed = True
if i.dlc and not i.dlc.startswith("extension:"):
i.installed = True
def fancy_activate_editor(default=False):
"""
@@ -257,9 +301,12 @@ init 1 python in editor:
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)
if fe.dlc.startswith("extension:"):
import installer
manifest = fe.dlc.partition(":")[2]
renpy.invoke_in_new_context(installer.manifest, "https://www.renpy.org/extensions/{}/{}.py".format(manifest, manifest), renpy=True)
else:
store.add_dlc(fe.dlc)
persistent.editor = fe.name
fancy_activate_editor()
@@ -469,7 +516,7 @@ init 1 python in editor:
try:
e = renpy.editor.editor
return e.has_projects
except:
except Exception:
return False
@@ -522,6 +569,14 @@ screen editor:
textbutton _("Cancel") action Return(False) style "l_left_button"
label reinstall_vscode:
python hide:
manifest = "vscode"
renpy.invoke_in_new_context(installer.manifest, "https://www.renpy.org/extensions/{}/{}.py".format(manifest, manifest), renpy=True)
jump editor_preference
label editor_preference:
call screen editor
jump preferences
+29 -41
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 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
@@ -23,40 +23,7 @@ define PROJECT_ADJUSTMENT = ui.adjustment()
init python:
import os
import subprocess
class OpenDirectory(Action):
"""
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):
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
import datetime
# Used for testing.
def Relaunch():
@@ -192,11 +159,11 @@ screen front_page_project:
frame style "l_indent":
has vbox
textbutton _("game") action OpenDirectory("game")
textbutton _("base") action OpenDirectory(".")
textbutton _("images") action OpenDirectory("game/images")
textbutton _("audio") action OpenDirectory("game/audio")
textbutton _("gui") action OpenDirectory("game/gui")
textbutton "game" action OpenDirectory(os.path.join(p.path, "game"), absolute=True)
textbutton "base" action OpenDirectory(os.path.join(p.path, "."), absolute=True)
textbutton "images" action OpenDirectory(os.path.join(p.path, "game/images"), absolute=True)
textbutton "audio" action OpenDirectory(os.path.join(p.path, "game/audio"), absolute=True)
textbutton "gui" action OpenDirectory(os.path.join(p.path, "game/gui"), absolute=True)
vbox:
if persistent.show_edit_funcs:
@@ -260,7 +227,28 @@ label start:
show screen bottom_info
$ dmgcheck()
jump expression renpy.session.pop("launcher_start_label", "front_page")
default persistent.has_chosen_language = False
default persistent.has_update = False
label front_page:
if (not persistent.has_chosen_language) or ("RENPY_CHOOSE_LANGUAGE" in os.environ):
if (_preferences.language is None) or ("RENPY_CHOOSE_LANGUAGE" in os.environ):
hide screen bottom_info
call choose_language
show screen bottom_info
$ persistent.has_chosen_language = True
if persistent.daily_update_check and ((not persistent.last_update_check) or (datetime.date.today() > persistent.last_update_check)):
python hide:
persistent.last_update_check = datetime.date.today()
renpy.invoke_in_thread(fetch_update_channels)
call screen front_page
jump front_page
@@ -271,7 +259,7 @@ label lint:
interface.processing(_("Checking script for potential problems..."))
lint_fn = project.current.temp_filename("lint.txt")
project.current.launch([ 'lint', lint_fn ], wait=True)
project.current.launch([ 'lint', lint_fn, ] + list(persistent.lint_options), wait=True)
e = renpy.editor.editor
e.begin(True)
+18 -23
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 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
@@ -31,7 +31,7 @@ init -1 python:
from store import config
def translate_font(language, font, path=None):
def translate_font(language, font):
"""
Selects the font file that is used when translating `language`.
@@ -39,26 +39,17 @@ init -1 python:
Is the name of the font file used for both the launcher and
the new GUI template. This should be a string giving the name
of the font file.
`path`
The path to the font file, relative to the launcher's game
directory. If not given, defaults to fonts.
"""
if path is None:
path = "fonts"
fullfont = path + "/" + font
def callback():
gui.REGULAR_FONT = fullfont
gui.LIGHT_FONT = fullfont
gui.REGULAR_FONT = font
gui.LIGHT_FONT = font
gui.REGULAR_BOLD = True
style._default.font = fullfont
style.default.font = fullfont
style._default.font = font
style.default.font = font
gui.system_font = fullfont
gui.system_font = font
gui.project_system_font = font
config.language_callbacks[language].append(callback)
@@ -66,7 +57,7 @@ init -1 python:
def s(s):
return '"' + s + '"'
gui7.translate_copy(language, fullfont, font)
gui7.translate_copy(language, "sdk-fonts/" + font, font)
gui7.translate_define(language, "gui.text_font", s(font))
gui7.translate_define(language, "gui.name_text_font", s(font))
gui7.translate_define(language, "gui.interface_text_font", s(font))
@@ -309,7 +300,8 @@ label change_gui:
project_name = project.current.name
mode = interface.choice(
_("{b}Warning{/b}\nContinuing will overwrite customized bar, button, save slot, scrollbar, and slider images.\n\nWhat would you like to do?"),
__("{b}Warning{/b}\nContinuing will overwrite customized bar, button, save slot, scrollbar, and slider images.\n\nWhat would you like to do?") +
__("{size=-4}\n\nThis will not overwrite gui/main_menu.png, gui/game_menu.png, and gui/window_icon.png, but will create files that do not exist.{/size}"),
[
("change", _("Choose new colors, then regenerate image files.")),
("regenerate", _("Regenerate the image files using the colors in gui.rpy.")),
@@ -336,15 +328,18 @@ label gui_project_size:
python:
default_size = (1920, 1080)
gui_size = interface.choice(
_("What resolution should the project use? Although Ren'Py can scale the window up and down, this is the initial size of the window, the size at which assets should be drawn, and the size at which the assets will be at their sharpest.\n\nThe default of 1280x720 is a reasonable compromise."),
_("What resolution should the project use? Although Ren'Py can scale the window up and down, this is the initial size of the window, the size at which assets should be drawn, and the size at which the assets will be at their sharpest.\n\nThe default of [default_size[0]]x[default_size[1]] is a reasonable compromise."),
[
((1066, 600), "1066x600"),
((1280, 720), "1280x720"),
((1920, 1080), "1920x1080"),
((2560, 1440), "2560x1440"),
((3840, 2160), "3840x2160"),
("custom", _("Custom. The GUI is optimized for a 16:9 aspect ratio.")),
],
(1280, 720),
default_size,
cancel=Jump("front_page"),
)
@@ -361,7 +356,7 @@ label gui_project_size:
try:
gui_width = int(gui_width)
except:
except Exception:
interface.error(_("The width must be a number."), label=None)
continue
break
@@ -377,7 +372,7 @@ label gui_project_size:
try:
gui_height = int(gui_height)
except:
except Exception:
interface.error(_("The height must be a number."), label=None)
continue
break
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 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
+7 -3
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 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
@@ -214,7 +214,8 @@ class CodeGenerator(object):
'gui.insensitive_color' : repr(self.p.insensitive_color.hexcode),
'gui.text_color' : repr(self.p.text_color.hexcode),
'gui.interface_text_color' : repr(self.p.text_color.hexcode),
'gui.choice_text_color' : repr(self.p.choice_color.hexcode),
'gui.choice_button_text_idle_color' : repr(self.p.idle_color.hexcode),
'gui.choice_button_text_insensitive_color' : repr(self.p.insensitive_color.hexcode),
}
self.update_defines(replacements, language_defines[self.p.language])
@@ -323,6 +324,9 @@ class CodeGenerator(object):
m = re.match(r'## ?([ *]*)(.*)', s)
if m is None:
raise Exception("Comment translation doesn't start with '## ': {}".format(s))
prefix = m.group(1)
empty = ' ' * len(prefix)
rest = m.group(2)
@@ -353,7 +357,7 @@ class CodeGenerator(object):
def copy_files(self):
for src, dst in language_copies[self.p.language]:
src = os.path.join(renpy.config.gamedir, src)
src = os.path.join(renpy.config.renpy_base, src)
dst = os.path.join(self.p.prefix, dst)
if os.path.exists(dst):
+20 -9
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 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
@@ -52,7 +52,7 @@ class ImageGenerator(object):
try:
os.mkdir(self.prefix, 0o777)
except:
except Exception:
pass
self.full_width = self.width / self.scale
@@ -121,7 +121,7 @@ class ImageGenerator(object):
try:
os.makedirs(dn, 0o777)
except:
except Exception:
pass
if os.path.exists(fn):
@@ -145,12 +145,7 @@ class ImageGenerator(object):
if not self.p.skip_backup:
os.rename(fn, bfn)
import cStringIO
sio = cStringIO.StringIO()
renpy.display.module.save_png(s, sio, 3)
with open(fn, "wb") as f:
f.write(sio.getvalue())
pygame_sdl2.image.save(s, fn, 3)
def make_surface(self, width, height):
return pygame_sdl2.Surface((width, height), pygame_sdl2.SRCALPHA)
@@ -409,6 +404,21 @@ class ImageGenerator(object):
self.save(s, "main_menu", overwrite=False)
self.save(s, "game_menu", overwrite=False)
def generate_bubble(self):
import shutil
for fn in [ "bubble.png", "thoughtbubble.png" ]:
source = os.path.join(config.renpy_base, "gui", "game", "gui", fn)
dest = os.path.join(self.prefix, fn)
if source == dest:
return
shutil.copyfile(source, dest)
def generate_all(self):
self.generate_textbox()
self.generate_choice_button()
@@ -420,6 +430,7 @@ class ImageGenerator(object):
self.generate_notify()
self.generate_menus()
self.generate_icon()
self.generate_bubble()
if __name__ == "__main__":
+4 -4
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 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
@@ -67,8 +67,8 @@ class GuiParameters(object):
if light:
self.selected_color = Color("#555555")
self.idle_color = Color("#aaaaaa")
self.idle_small_color = Color("#888888")
self.idle_color = Color("#707070")
self.idle_small_color = Color("#606060")
self.text_color = Color("#404040")
self.choice_color = Color("#cccccc")
@@ -99,7 +99,7 @@ class GuiParameters(object):
GOOD_CHARACTERS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_"
simple_name = "".join(i for i in name if i in GOOD_CHARACTERS).encode("ascii")
simple_name = "".join(i for i in name if i in GOOD_CHARACTERS)
if not simple_name:
simple_name = "game"
Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 B

+64 -45
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 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
@@ -60,7 +60,10 @@ init python:
dstfn = os.path.join(config.renpy_base, dstfn)
if not os.path.exists(os.path.dirname(dstfn)):
continue
try:
os.makedirs(os.path.dirname(dstfn))
except Exception:
pass
renpy.write_log(fn + " -> " + dstfn)
@@ -70,7 +73,7 @@ init python:
try:
os.chmod(dstfn, 0o755)
except:
except Exception:
pass
interface.info(_("Successfully installed [name!t]."), name=name)
@@ -78,26 +81,73 @@ init python:
label install_live2d:
python hide:
if PY2:
_prefix = r"lib/py2-"
else:
_prefix = r"lib/py3-"
patterns = [
(r".*/Core/dll/linux/x86_64/(libLive2DCubismCore.so)", r"lib/linux-x86_64/\1"),
(r".*/Core/dll/windows/x86_64/(Live2DCubismCore.dll)", r"lib/windows-x86_64/\1"),
(r".*/Core/dll/windows/x86/(Live2DCubismCore.dll)", r"lib/windows-i686/\1"),
(r".*/Core/dll/macos/(libLive2DCubismCore.dylib)", r"lib/mac-x86_64/\1"),
(r".*/Core/dll/experimental/rpi/(libLive2DCubismCore.so)", r"lib/linux-armv7l/\1"),
(r".*/Core/dll/linux/x86_64/(libLive2DCubismCore.so)", _prefix + r"linux-x86_64/\1"),
(r".*/Core/dll/windows/x86_64/(Live2DCubismCore.dll)", _prefix + r"windows-x86_64/\1"),
(r".*/Core/dll/macos/(libLive2DCubismCore.dylib)", _prefix + r"mac-universal/\1"),
(r".*/Core/dll/experimental/rpi/(libLive2DCubismCore.so)", _prefix + r"linux-armv7l/\1"),
(r".*/Core/dll/android/(armeabi-v7a/libLive2DCubismCore.so)", r"rapt/prototype/renpyandroid/src/main/jniLibs/\1"),
(r".*/Core/dll/android/(arm64-v8a/libLive2DCubismCore.so)", r"rapt/prototype/renpyandroid/src/main/jniLibs/\1"),
# This doesn't exist yet.
# (r".*/Core/dll/android/(x86_64/libLive2DCubismCore.so)", r"rapt/prototype/renpyandroid/src/main/jniLibs/\1"),
(r".*/Core/dll/android/(x86_64/libLive2DCubismCore.so)", r"rapt/prototype/renpyandroid/src/main/jniLibs/\1"),
]
if PY2:
patterns.extend([
(r".*/Core/dll/windows/x86/(Live2DCubismCore.dll)", _prefix + r"windows-i686/\1"),
])
install_from_zip("Live2D Cubism SDK for Native", "CubismSdkForNative-4-*.zip", patterns)
jump front_page
screen install():
screen install_preferences():
frame:
style "l_indent"
has vbox
text _("This screen allows you to install libraries that can't be distributed with Ren'Py. Some of these libraries may require you to agree to a third-party license before being used or distributed.")
add SPACER
if not achievement.has_steam:
textbutton _("Install Steam Support"):
action Jump("install_steam")
add HALF_SPACER
frame:
style "l_indent"
has vbox
text _("Before installing Steam support, please make sure you are a {a=https://partner.steamgames.com/}Steam partner{/a}.")
else:
textbutton _("Install Steam Support")
add HALF_SPACER
frame:
style "l_indent"
has vbox
text _("Steam support has already been installed.")
add SPACER
textbutton _("Install Live2D Cubism SDK for Native"):
action Jump("prompt_live2d")
screen install_live2d():
frame:
style_group "l"
@@ -122,10 +172,6 @@ screen install():
has vbox
text _("This screen allows you to install libraries that can't be distributed with Ren'Py. Some of these libraries may require you to agree to a third-party license before being used or distributed.")
add HALF_SPACER
add SPACER
textbutton _("Install Live2D Cubism SDK for Native"):
@@ -143,33 +189,6 @@ screen install():
text _("Live2D in Ren'Py doesn't support the Web, Android x86_64 (including emulators and Chrome OS), and must be added to iOS projects manually. Live2D must be reinstalled after upgrading Ren'Py or installing Android support.")
add SPACER
if not achievement.has_steam:
textbutton _("Install Steam Support"):
action Jump("install_steam")
add HALF_SPACER
frame:
style "l_indent"
has vbox
text _("Before installing Steam support, please make sure you are a {a=https://partner.steamgames.com/}Steam partner{/a}.")
else:
textbutton _("Install Steam Support")
add HALF_SPACER
frame:
style "l_indent"
has vbox
text _("Steam support has already been installed.")
textbutton _("Cancel") action Return(False) style "l_left_button"
@@ -177,8 +196,8 @@ screen install():
timer 2.0 action renpy.restart_interaction repeat True
label install:
call screen install
label prompt_live2d:
call screen install_live2d
jump preferences
label install_steam:
+499
View File
@@ -0,0 +1,499 @@
# Copyright 2004-2023 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
# (the "Software"), to deal in the Software without restriction,
# including without limitation the rights to use, copy, modify, merge,
# publish, distribute, sublicense, and/or sell copies of the Software,
# and to permit persons to whom the Software is furnished to do so,
# subject to the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
import hashlib
import os
import time
import requests
import zipfile
import tarfile
import shutil
import subprocess
import renpy
import stat
VERSION = 1
# True if the installer should run in quiet mode.
quiet = False
from store import _, config, interface, project, Jump # type: ignore
temp_exists = False
def _ensure_temp():
"""
Ensures that the directories needed by the extension API are present.
"""
global temp_exists
if temp_exists:
return
backups = os.path.join(config.renpy_base, "tmp", "installer", "backups")
try:
if not os.path.exists(backups):
os.makedirs(os.path.dirname(backups))
except Exception:
pass
temp_exists = True
# The target directory that the extensions API operates on.
target = None
def set_target(directory):
"""
This sets the directory that the extension API targets. This is where
packages are unpacked to and the default working directory where the
programs are run.
"""
global target
target = directory
_clean("temp:", 3)
def _path(filename):
"""
Returns the full path to `filename`. If `filename` starts with the
prefix temp:, it's placed in the temp directory. If the filename
starts with backup, a backup filename is returned. Otherwise,
the path is interpreted relative to the target directory.
"""
_ensure_temp()
tempdir = os.path.join(config.renpy_base, "tmp", "installer")
backups = os.path.join(config.renpy_base, "tmp", "installer", "backups")
prefix, _, rest = filename.partition(":")
if prefix == "temp":
return os.path.join(tempdir, rest)
if prefix == "backup":
base = os.path.basename(rest.rpartition(":")[2])
return os.path.join(backups, base + "." + str(time.time()))
if prefix == "renpy":
return os.path.join(config.renpy_base, rest)
if target is None:
raise Exception("The target directory has not been set.")
return os.path.join(target, filename)
def _clean(directory, age=3):
"""
Removes files from `directory` that are older than `age` days.
"""
directory = _path(directory)
for root, dirs, files in os.walk(directory, topdown=False):
for f in files:
filename = os.path.join(root, f)
mtime = os.stat(filename).st_mtime
if time.time() - mtime > age * 86400:
try:
os.unlink(filename)
except Exception:
pass
if root != directory:
try:
os.rmdir(root)
except Exception:
pass
def _friendly(filename):
"""
Returns a version of the filename without any leading prefix.
"""
return filename.rpartition(":")[2]
def _check_hash(filename, hashj):
"""
Returns a cryptographic hash of `filename`. `filename` should
be a full path, one returned by temp or path.
"""
try:
sha = hashlib.sha256()
with open(filename, "rb") as f:
while True:
data = f.read(1024 * 1024)
if not data:
break
sha.update(data)
return sha.hexdigest() == hash
except Exception:
return False
# The name and url of the file that is currently being downloaded. This is meant to
# to be used by the interface screens to show the user what files are being
# downloaded.
download_file = ""
download_url = ""
def download(url, filename, hash=None):
"""
Downloads `url` to `filename`, a tempfile.
"""
global download_url
global download_file
download_url = url
download_file = _friendly(filename)
filename = _path(filename)
if hash is not None:
if _check_hash(filename, hash):
return
progress_time = time.time()
try:
response = requests.get(url, stream=True)
response.raise_for_status()
total_size = int(response.headers.get('content-length', 1))
downloaded = 0
with open(filename, "wb") as f:
for i in response.iter_content(65536):
f.write(i)
downloaded += len(i)
if time.time() - progress_time > 0.1:
progress_time = time.time()
if not quiet:
interface.processing(
_("Downloading [installer.download_file]..."),
complete=downloaded, total=total_size)
except requests.HTTPError as e:
if not quiet:
raise
interface.error(_("Could not download [installer.download_file] from [installer.download_url]:\n{b}[installer.download_error]"))
if hash is not None:
if not quiet:
raise Exception("Hash check failed.")
if not _check_hash(filename, hash):
interface.error(_("The downloaded file [installer.download_file] from [installer.download_url] is not correct."))
class _FixedZipFile(zipfile.ZipFile):
"""
A patched version of zipfile.ZipFile that adds support for:
* Unix permissions bits.
* Unix symbolic links.
"""
def _extract_member(self, member, targetpath, pwd):
if not isinstance(member, zipfile.ZipInfo):
member = self.getinfo(member)
# build the destination pathname, replacing
# forward slashes to platform specific separators.
arcname = member.filename.replace('/', os.path.sep)
if os.path.altsep:
arcname = arcname.replace(os.path.altsep, os.path.sep)
# interpret absolute pathname as relative, remove drive letter or
# UNC path, redundant separators, "." and ".." components.
arcname = os.path.splitdrive(arcname)[1]
invalid_path_parts = ('', os.path.curdir, os.path.pardir)
arcname = os.path.sep.join(x for x in arcname.split(os.path.sep) if x not in invalid_path_parts)
targetpath = os.path.join(targetpath, arcname)
targetpath = os.path.normpath(targetpath)
# Create all upper directories if necessary.
upperdirs = os.path.dirname(targetpath)
if upperdirs and not os.path.exists(upperdirs):
os.makedirs(upperdirs)
if member.filename.endswith("/"):
if not os.path.isdir(targetpath):
os.mkdir(targetpath)
return targetpath
attr = member.external_attr >> 16
if stat.S_ISLNK(attr):
with self.open(member, pwd=pwd) as source:
linkto = source.read()
os.symlink(linkto, targetpath)
else:
with self.open(member, pwd=pwd) as source, open(targetpath, "wb") as target:
shutil.copyfileobj(source, target)
if attr:
os.chmod(targetpath, attr)
return targetpath
# The name of the archive being unpacked.
unpack_archive = ""
def unpack(archive, destination):
"""
Unpacks `archive` to `destination`. `archive` should be the name of
a zip or (perhaps compressed) tar file. `destination` should be a
directory that the contents are unpacked into.
"""
global unpack_archive
unpack_archive = _friendly(archive)
if not quiet:
interface.processing(_("Unpacking [installer.unpack_archive]..."))
archive = _path(archive)
destination = _path(destination)
if not os.path.exists(destination):
os.makedirs(destination)
old_cwd = os.getcwd()
try:
os.chdir(destination)
if tarfile.is_tarfile(archive):
tar = tarfile.open(archive)
tar.extractall(".")
tar.close()
elif zipfile.is_zipfile(archive):
zip = _FixedZipFile(archive)
zip.extractall(".")
zip.close()
else:
raise Exception("Unknown file type.")
finally:
os.chdir(old_cwd)
def exists(filename):
"""
Returns true if `filename` exists.
"""
return os.path.exists(_path(filename))
def remove(filename):
"""
Removes a file or directory from the target directory, backing it up
the temporary directory.
"""
if not exists(filename):
return
backup = _path("backup:" + filename)
shutil.move(_path(filename), backup)
# Now, touch everything so _cleanup doesn't get it too quickly.
if os.path.isdir(backup):
for root, dirs, files in os.walk(backup):
for f in files:
try:
os.utime(os.path.join(root, f), None)
except Exception:
pass
else:
try:
os.utime(backup, None)
except Exception:
pass
def move(old_filename, new_filename):
"""
Moves a filename from `old_filename` to `new_filename`.
"""
remove(new_filename)
shutil.move(_path(old_filename), _path(new_filename))
def mkdir(dirname):
"""
Makes the named directory.
"""
if not os.path.exists(_path(dirname)):
os.makedirs(_path(dirname))
def info(message, **kwargs):
"""
Displays `message` to the user, asking them to click through or
cancel.
"""
interface.info(message, cancel=Jump("front_page"), **kwargs)
def processing(message, **kwargs):
"""
Displays `message` to the user, without waiting.
"""
interface.processing(message, **kwargs)
def error(message, **kwargs):
"""
Displays `message` to the user, as an error.
"""
interface.error(message)
install_args = [ ]
install_error = ""
def run(*args, **kwargs):
"""
Runs a program with the given arguments, in the target directory.
"""
environ = { renpy.exports.fsencode(k) : renpy.exports.fsencode(v) for k, v in os.environ.items() }
for k, v in kwargs.pop("environ", {}).items():
environ[renpy.exports.fsencode(k)] = renpy.exports.fsencode(v)
global install_args
global install_error
args = [ renpy.exports.fsencode(i) for i in args ]
try:
subprocess.check_call(args, cwd=target, env=environ) # type: ignore
except Exception as e:
install_args = args
install_error = str(e)
interface.error(_("Could not run [installer.install_args!r]:\n[installer.install_error]"))
_renpy = renpy
def manifest(url, renpy=False, insecure=False):
"""
Executes the manifest at `url`.
`renpy`
If true, the manifest applies to Ren'Py. If False, the manifest applies
to the current project.
`insecure`
If true, verificaiton is disabled.
"""
import ecdsa
download(url, "temp:manifest.py")
with open(_path("temp:manifest.py"), "rb") as f:
manifest = f.read()
if not insecure:
download(url + ".sig", "temp:manifest.py.sig")
with open(_path("temp:manifest.py.sig"), "rb") as f:
sig = f.read()
key = ecdsa.VerifyingKey.from_pem(_renpy.exports.file("renpy_ecdsa_public.pem").read())
if not key.verify(sig, manifest):
error(_("The manifest signature is not valid."))
return
if renpy:
set_target(config.renpy_base)
else:
if project.current is None:
error(_("No project has been selected."))
return
set_target(project.current.path)
exec(manifest.decode("utf-8"), {}, {})
def local_manifest(filename, renpy=False):
"""
Executes the manifest in `filename`.
`renpy`
If true, the manifest applies to Ren'Py. If False, the manifest applies
to the current project.
"""
if renpy:
set_target(config.renpy_base)
else:
if project.current is None:
error(_("No project has been selected."))
return
set_target(project.current.path)
with open(filename, "r") as f:
exec(f.read(), {}, {})
+12
View File
@@ -0,0 +1,12 @@
# This file imports the extensions API into the default store, and makes it
# also contains the strings used by the extensions API, so the Ren'Py translation
# framework can find them.
init python:
import installer
init python hide:
_("Downloading [extension.download_file].")
_("Could not download [extension.download_file] from [extension.download_url]:\n{b}[extension.download_error]")
_("The downloaded file [extension.download_file] from [extension.download_url] is not correct.")
+24 -11
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 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
@@ -29,7 +29,6 @@ init python in interface:
import contextlib
RENPY_URL = "http://www.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/"
@@ -89,6 +88,10 @@ init python in interface:
finally:
links = True
# Version.
import re
version = re.sub(r'\.\d+(\w*)$', r'\1', renpy.version())
# 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
# preferences and update screen), or is just blank.
@@ -118,15 +121,17 @@ screen bottom_info:
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")
textbutton _("[interface.version]") 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 _("update") action Jump("update") style "l_link":
if persistent.has_update:
text_color "#F96854"
text_hover_color Color("#F96854").tint(.8)
textbutton _("preferences") style "l_link" action Jump("preferences")
textbutton _("quit") style "l_link" action Quit(confirm=False)
@@ -165,7 +170,7 @@ screen common:
has vbox
text message:
text_align 0.5
textalign 0.5
xalign 0.5
layout "subtitle"
@@ -195,7 +200,15 @@ screen common:
add SPACER
for v, l in choices:
textbutton l action SetScreenVariable("selected", v)
textbutton l:
action SetScreenVariable("selected", v)
selected_background REVERSE_IDLE
selected_hover_background REVERSE_HOVER
xpadding 20
size_group "choice"
text_selected_idle_color REVERSE_TEXT
text_selected_hover_color REVERSE_TEXT
text_xalign 0.5
if selected is not None:
$ continue_ = Return(selected)
@@ -206,7 +219,7 @@ screen common:
add SPACER
text submessage:
text_align 0.5
textalign 0.5
xalign 0.5
layout "subtitle"
@@ -245,7 +258,7 @@ screen launcher_input:
has vbox
text message:
text_align 0.5
textalign 0.5
xalign 0.5
layout "subtitle"
@@ -434,7 +447,7 @@ init python in interface:
try:
rv.encode("ascii")
except:
except Exception:
error(_("File and directory names must consist of ASCII characters."), label=None)
continue
@@ -479,7 +492,7 @@ init python in interface:
The amount of time to pause for after showing the message.
"""
common(title, store.INTERACTION_COLOR, message, submessage=None, pause=pause, show_screen=True, **kwargs)
common(title, store.INTERACTION_COLOR, message, submessage=submessage, pause=pause, show_screen=True, **kwargs)
renpy.pause(pause)
def processing(message, submessage=None, complete=None, total=None, **kwargs):
+47 -20
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 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
@@ -152,6 +152,33 @@ init python:
ios_populate(p, gui=gui, target=target)
def eliminate_pycache(directory):
"""
Eliminates the __pycache__ directory, and moves the files in it up a level,
renaming them to remove the cache tag.
"""
print("Eliminating __pycache__...")
if PY2:
return
import pathlib
import sys
paths = list(pathlib.Path(directory).glob("**/__pycache__/*.pyc"))
for p in paths:
name = p.stem.partition(".")[0]
p.rename(p.parent.parent / (name + ".pyc"))
paths = list(pathlib.Path(directory).glob("**/__pycache__"))
for p in paths:
p.rmdir()
def ios_populate(p=None, gui=True, target=None):
"""
This actually builds the package.
@@ -181,6 +208,8 @@ init python:
report_success=False,
)
eliminate_pycache(dist)
main_fn = os.path.join(dist, "main.py")
for fn in os.listdir(dist):
@@ -212,10 +241,17 @@ init python:
def launch_xcode():
dist = xcode_project(None)
base = os.path.basename(dist)
xcodeproj = "{}/{}.xcodeproj".format(dist, base)
subprocess.call([ 'open', renpy.fsencode(xcodeproj) ])
if not os.path.exists(dist):
return
for fn in os.listdir(dist):
if fn.endswith(".xcodeproj"):
xcodeproj = os.path.join(dist, fn)
subprocess.call([ 'open', renpy.fsencode(xcodeproj) ])
break
screen ios:
@@ -300,21 +336,9 @@ screen ios:
action IOSIfState(state, IOS_OK, launch_xcode)
hovered tt.Action(IOS_XCODE_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)
#
# textbutton _("Build, Install & Launch"):
# action AndroidIfState(state, ANDROID_OK, AndroidBuild("android_build_install_and_launch"))
# hovered tt.Action(BUILD_INSTALL_AND_LAUNCH_TEXT)
add SPACER
textbutton _("Force Recompile") action DataToggle("force_recompile") style "l_checkbox"
add SPACER
add SEPARATOR2
@@ -352,6 +376,10 @@ screen ios:
add SPACER
text _("There are known issues with the iOS simulator on Apple Silicon. Please test on x86_64 or iOS devices.")
add SPACER
if tt.value:
text tt.value
else:
@@ -427,4 +455,3 @@ init python:
return False
renpy.arguments.register_command("ios_populate", ios_populate_command)
+12 -35
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 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
@@ -23,6 +23,8 @@ init python:
def find_itch_butler():
import requests
if renpy.windows:
platform = "windows-amd64"
exe = "butler.exe"
@@ -44,23 +46,16 @@ init python:
try:
os.makedirs(dn)
except:
except Exception:
pass
import urllib2
with interface.error_handling(_("Downloading the itch.io butler.")):
url = "https://broth.itch.ovh/butler/{}/LATEST/archive/default".format(platform)
req = urllib2.Request(url, headers={'User-Agent' : "Renpy"})
response = urllib2.urlopen(req, context=ssl_context())
response = requests.get(url, headers={'User-Agent' : "Renpy"})
with open(zip, "wb") as f:
while True:
data = response.read(1024 * 1024)
if not data:
break
f.write(data)
f.write(response.content)
import zipfile
@@ -69,7 +64,7 @@ init python:
try:
os.chmod(exe, 0o755)
except:
except Exception:
pass
return exe
@@ -102,32 +97,14 @@ label itch:
files = [ ]
for fn in os.listdir(destination):
fn = os.path.join(destination, fn)
if fn.endswith("-all.zip"):
channel = "win-osx-linux"
elif fn.endswith("-market.zip"):
channel = "win-osx-linux"
elif fn.endswith("-pc.zip"):
channel = "win-linux"
elif fn.endswith("-win.zip"):
channel = "win"
elif fn.endswith("-mac.zip"):
channel = "osx"
elif fn.endswith("-linux.tar.bz2"):
channel = "linux"
elif fn.endswith("-release.apk"):
channel = "android"
for pattern, channel in reversed(build['itch_channels'].items()):
if fnmatch.fnmatch(fn, pattern):
break
else:
continue
fn = os.path.join(destination, fn)
files.append((fn, channel))
if not os.path.exists(destination):
+3 -3
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 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
@@ -23,7 +23,7 @@ init python hide:
import os
macapp = os.path.join(config.renpy_base, "renpy.app/Contents/MacOS")
maclib = os.path.join(config.renpy_base, "lib/mac-x86_64")
maclib = os.path.join(config.renpy_base, distribute.py("lib/py{major}-mac-universal"))
if os.path.exists(maclib):
@@ -45,7 +45,7 @@ init python hide:
os.chmod(nfn, 0o755)
os.unlink(fn)
except:
except Exception:
pass
+16 -10
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 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
@@ -32,7 +32,7 @@ init -1 python:
if not renpy.loadable(fn1):
return True
hash1 = renpy.file(fn1).read()
hash1 = renpy.file(fn1).read().decode("utf-8")
if not os.path.exists(fn2):
return False
@@ -99,6 +99,10 @@ init -1 python:
interface.processing(prompt, pause=False)
self.log(prompt)
def open_directory(self, directory, prompt):
renpy.run(store.OpenDirectory(directory, absolute=True))
interface.info(prompt)
def yesno(self, prompt, submessage=None):
return interface.yesno(prompt, submessage=submessage)
@@ -155,12 +159,11 @@ init -1 python:
try:
while self.run_yes:
self.process.stdin.write('y\n')
self.process.stdin.write(b'y\n')
self.process.stdin.flush()
time.sleep(.2)
except:
import traceback
traceback.print_exc()
except Exception:
pass
def call(self, cmd, cancel=False, use_path=False, yes=False):
@@ -170,7 +173,7 @@ init -1 python:
self.cmd = cmd
f = open(self.filename, "ab")
f = open(self.filename, "a")
f.write("\n\n\n")
@@ -196,7 +199,7 @@ init -1 python:
# avoid SIGTTIN caused by e.g. gradle doing empty read on terminal stdin
if not yes:
self.process.stdin.close()
except:
except Exception:
import traceback
traceback.print_exc(file=f)
raise
@@ -216,7 +219,11 @@ init -1 python:
if yes and self.yes_thread:
self.run_yes = False
self.yes_thread.join()
self.process.stdin.close()
try:
self.process.stdin.close()
except Exception:
pass
self.process = None
self.yes_thread = None
@@ -262,4 +269,3 @@ init -1 python:
self.process.terminate()
renpy.jump(self.platform)
+2 -3
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 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
@@ -249,7 +249,7 @@ screen navigation:
if persistent.navigation == "todo":
text _("No TODO comments found.\n\nTo create one, include \"# TODO\" in your script."):
text_align 0.5
textalign 0.5
xalign 0.5
yalign 0.5
@@ -279,4 +279,3 @@ label navigation_loop:
label navigation_refresh:
$ project.current.update_dump(True)
jump navigation_loop
+7 -4
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 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
@@ -41,7 +41,7 @@ init python:
try:
if (language is None) or os.path.exists(os.path.join(config.renpy_base, "templates", language)):
legacy = True
except:
except Exception:
pass
if new and legacy:
@@ -62,6 +62,9 @@ label new_project:
if persistent.projects_directory is None:
$ interface.error(_("The projects directory could not be set. Giving up."))
if PY2:
$ interface.info(_("Warning : you are using Ren'Py 7. It is recommended to start new projects using Ren'Py 8 instead."))
python:
if persistent.legacy:
@@ -74,11 +77,11 @@ label new_project:
cancel=Jump("front_page"),
)
else:
new_project_language = (_preferences.language or "english").title()
new_project_language = __("{#language name and font}")
gui_kind = "new_gui_project"
# When translating this, feel free to replace [new_project_language] with the translation of your language.
interface.info(_("You will be creating an [new_project_language]{#this substitution may be localized} language project. Change the launcher language in preferences to create a project in another language."))
interface.info(_("You will be creating an [new_project_language]{#this substitution may be localized} language project. Change the launcher language in preferences to create a project in another language."), cancel=Jump("front_page"))
python:
project_name = ""
+84 -42
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 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
@@ -30,6 +30,9 @@
init -1 python hide:
# Update the searchpath to find additional fonts.
config.searchpath.append(config.renpy_base + "/sdk-fonts")
# Should we enable the use of developer tools? This should be
# set to False before the game is released, so the user can't
# cheat using developer tools.
@@ -239,10 +242,12 @@ init python:
# allows the updater to run.
build.include_update = True
# Build both kinds of updates.
build.update_formats = [ "zsync", "rpu" ]
# Allow empty directories, so we can distribute the images directory.
build.exclude_empty_directories = False
# Mac signing options.
import os
build.mac_identity = os.environ.get("RENPY_MAC_IDENTITY", None)
@@ -267,23 +272,8 @@ init python:
build.classify_renpy("**/thumbs.db", None)
build.classify_renpy("**/.*", None)
# Atom rules. These have to be very early, since Atom uses names like
# tmp for packages.
build.classify_renpy("atom/", "atom-all source_only")
build.classify_renpy("atom/Atom.edit.py", "atom-all source_only")
build.classify_renpy("atom/default-dot-atom/**", "atom-all")
build.classify_renpy("atom/atom-windows/**", "atom-windows")
build.classify_renpy("atom/Atom.app/**", "atom-mac")
build.classify_renpy("atom/atom-linux**", "atom-linux")
try:
with open(os.path.join(config.renpy_base, "atom", "executable.txt")) as f:
for l in f:
build.executable(l.strip())
except:
pass
build.classify_renpy("rapt/**/libLive2DCubismCore.so", None)
build.classify_renpy("rapt/symbols/", None)
build.classify_renpy("rapt/**", "rapt")
build.executable("rapt/prototype/gradlew")
@@ -302,7 +292,6 @@ init python:
build.classify_renpy("**.old", None)
build.classify_renpy("**.new", None)
build.classify_renpy("**.bak", None)
build.classify_renpy("**.pyc", None)
build.classify_renpy("**/log.txt", None)
build.classify_renpy("**/traceback.txt", None)
@@ -315,33 +304,70 @@ init python:
# main source.
def source_and_binary(pattern, source="source", binary="binary"):
def source_and_binary(pattern, source="source", binary="binary", py=True):
"""
Classifies source and binary files beginning with `pattern`.
.pyo, .rpyc, .rpycm, and .rpyb go into binary, everything
else goes into source.
else but .pyi files go into source.
"""
build.classify_renpy(pattern + "/**.pyo", binary)
if py is True:
py = 'pyo' if PY2 else 'pycache'
if py == 'pycache':
build.classify_renpy(pattern + "/**__pycache__/", binary)
build.classify_renpy(pattern + "/**__pycache__/*.{}.pyc".format(sys.implementation.cache_tag), binary)
build.classify_renpy(pattern + "/**.pyc", None)
build.classify_renpy(pattern + "/**.pyo", None)
elif py == 'pyc':
build.classify_renpy(pattern + "/**__pycache__/", None)
build.classify_renpy(pattern + "/**.pyc", binary)
build.classify_renpy(pattern + "/**.pyo", None)
elif py == 'pyo':
build.classify_renpy(pattern + "/**__pycache__/", None)
build.classify_renpy(pattern + "/**.pyc", None)
build.classify_renpy(pattern + "/**.pyo", binary)
else:
build.classify_renpy(pattern + "/**__pycache__/", None)
build.classify_renpy(pattern + "/**.pyc", None)
build.classify_renpy(pattern + "/**.pyo", None)
build.classify_renpy(pattern + "/**.pyi", None)
build.classify_renpy(pattern + "/**.rpyc", binary)
build.classify_renpy(pattern + "/**.rpymc", binary)
build.classify_renpy(pattern + "/**/" + renpy.script.BYTECODE_FILE, binary)
build.classify_renpy(pattern + "/**/cache/bytecode-*.rpyb", None)
build.classify_renpy(pattern + "/**/cache/*", binary)
build.classify_renpy(pattern + "/**", source)
build.classify_renpy("renpy.py", "binary")
source_and_binary("renpy")
# games.
build.classify_renpy("launcher/game/theme/", None)
build.classify_renpy("gui/game/gui/", None)
source_and_binary("launcher")
source_and_binary("gui", binary=None)
build.classify_renpy("gui/game/gui/", "source")
build.classify_renpy("gui/game/gui/bubble.png", "source")
build.classify_renpy("gui/game/gui/thoughtbubble.png", "source")
build.classify_renpy("gui/game/gui/*", None)
source_and_binary("launcher", py=False)
source_and_binary("gui", binary=None, py=False)
source_and_binary("the_question")
source_and_binary("tutorial")
# extra fonts.
build.classify_renpy("sdk-fonts/**", "source")
# docs.
build.classify_renpy("doc/", "source")
build.classify_renpy("doc/.doctrees/", None)
@@ -360,8 +386,7 @@ init python:
# module.
build.classify_renpy("module/", "source")
build.classify_renpy("module/*.c", "source")
build.classify_renpy("module/gen/", "source")
build.classify_renpy("module/gen/*.c", "source")
build.classify_renpy("module/gen/", None)
build.classify_renpy("module/*.h", "source")
build.classify_renpy("module/*.py*", "source")
build.classify_renpy("module/include/", "source")
@@ -371,45 +396,62 @@ init python:
build.classify_renpy("module/pysdlsound/*.py", "source")
build.classify_renpy("module/pysdlsound/*.pyx", "source")
build.classify_renpy("module/fribidi-src/**", "source")
build.classify_renpy("module/tinyfiledialogs/**", "source")
build.classify_renpy("module/libhydrogen/**", "source")
# all-platforms binary.
build.classify_renpy("lib/**/_renpysteam*", "steam")
build.classify_renpy("lib/**/*steam_api*", "steam")
build.classify_renpy("lib/**/*Live2D*", None)
build.classify_renpy("lib/linux-armv7l/", "raspi")
build.classify_renpy("lib/linux-armv7l/**", "raspi")
build.classify_renpy("lib/**", "binary")
build.classify_renpy("renpy.sh", "binary")
# renpy.app is now built from scratch from distribute.rpy.
# jedit rules.
build.classify_renpy("jedit/**", "jedit")
if PY2:
build.classify_renpy("lib/py2-linux-armv7l/**", "linux_arm")
build.classify_renpy("lib/py2-linux-aarch64/**", "linux_arm")
source_and_binary("lib/py2-**", "binary", "binary")
source_and_binary("lib/python2**", "binary", "binary")
build.classify_renpy("renpy2.sh", "binary")
else:
build.classify_renpy("lib/py3-linux-armv7l/**", "linux_arm")
build.classify_renpy("lib/py3-linux-aarch64/**", "linux_arm")
source_and_binary("lib/py3-**", "binary", "binary")
source_and_binary("lib/python3**", "binary", "binary", py='pyc')
build.classify_renpy("renpy3.sh", "binary")
build.classify_renpy("lib/", "binary")
# Packages.
build.packages = [ ]
build.package("sdk", "zip tar.bz2 dmg", "source binary")
build.package("sdkarm", "tar.bz2", "source binary linux_arm")
build.package("source", "tar.bz2", "source source_only", update=False)
build.package("raspi", "tar.bz2", "raspi", dlc=True, update=False)
build.package("steam", "zip", "steam", dlc=True)
build.package("jedit", "zip", "jedit", dlc=True)
build.package("atom-linux", "tar.bz2", "atom-all atom-linux", dlc=True)
build.package("atom-mac", "zip", "atom-all atom-mac", dlc=True)
build.package("atom-windows", "zip", "atom-all atom-windows", dlc=True)
build.package("rapt", "zip", "rapt", dlc=True)
build.package("renios", "zip", "renios", dlc=True)
build.package("web", "zip", "web", dlc=True)
# The identifier for the SDK.
define build.mac_info_plist["CFBundleIdentifier"] = "org.renpy.sdk"
# Enable the special launcher translation mode.
define config.translate_launcher = True
# Allow clicks that focus the window to be processed.
define config.mouse_focus_clickthrough = True
# Reduce the rate of screen updates.
default preferences.gl_powersave = True
# Enable rtl.
define config.rtl = True
# Disable steam.
python early:
config.enable_steam = False
# Since the launcher can be run directly or can be run from the SDK directory,
# uneliding files needs to be handled slightly differently.
define config.alternate_unelide_path = os.path.join(config.basedir, "launcher")
# Disable skipping.
define config.allow_skipping = False
+120 -83
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 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
@@ -31,96 +31,109 @@ init python in distribute:
import sys
import threading
from renpy import six
from zipfile import crc32
# Since the long type doesn't exist on py3, define it here
if six.PY3:
if not PY2:
long = int
zlib.Z_DEFAULT_COMPRESSION = 5
class ZipFile(zipfile.ZipFile):
if PY2:
class ZipFile(zipfile.ZipFile):
def write_with_info(self, zinfo, filename):
"""Put the bytes from filename into the archive under the name
arcname."""
if not self.fp:
raise RuntimeError(
"Attempt to write to ZIP archive that was already closed")
def write_with_info(self, zinfo, filename):
"""Put the bytes from filename into the archive under the name
arcname."""
if not self.fp:
raise RuntimeError(
"Attempt to write to ZIP archive that was already closed")
st = os.stat(filename)
isdir = stat.S_ISDIR(st.st_mode)
st = os.stat(filename)
isdir = stat.S_ISDIR(st.st_mode)
zinfo.file_size = st.st_size
zinfo.flag_bits = 0x00
zinfo.header_offset = self.fp.tell() # Start of header bytes
zinfo.file_size = st.st_size
zinfo.flag_bits = 0x00
zinfo.header_offset = self.fp.tell() # Start of header bytes
self._writecheck(zinfo)
self._didModify = True
self._writecheck(zinfo)
self._didModify = True
if isdir:
zinfo.file_size = 0
zinfo.compress_size = 0
zinfo.CRC = 0
self.filelist.append(zinfo)
self.NameToInfo[zinfo.filename] = zinfo
self.fp.write(zinfo.FileHeader())
return
if isdir:
zinfo.file_size = 0
zinfo.compress_size = 0
zinfo.CRC = 0
self.filelist.append(zinfo)
self.NameToInfo[zinfo.filename] = zinfo
self.fp.write(zinfo.FileHeader())
return
with open(filename, "rb") as fp:
# Must overwrite CRC and sizes with correct data later
zinfo.CRC = CRC = 0
zinfo.compress_size = compress_size = 0
file_size = 0
with open(filename, "rb") as fp:
# Must overwrite CRC and sizes with correct data later
zinfo.CRC = CRC = 0
zinfo.compress_size = compress_size = 0
file_size = 0
zip64 = self._allowZip64 and \
zinfo.file_size * 1.05 > zipfile.ZIP64_LIMIT
zip64 = self._allowZip64 and \
zinfo.file_size * 1.05 > zipfile.ZIP64_LIMIT
self.fp.write(zinfo.FileHeader(zip64))
if zinfo.compress_type == zipfile.ZIP_DEFLATED:
cmpr = zlib.compressobj(zlib.Z_DEFAULT_COMPRESSION,
zlib.DEFLATED, -15)
else:
cmpr = None
while 1:
buf = fp.read(1024 * 1024)
if not buf:
break
file_size = file_size + len(buf)
CRC = crc32(buf, CRC) & 0xffffffff
if cmpr:
buf = cmpr.compress(buf)
compress_size = compress_size + len(buf)
self.fp.write(buf)
if cmpr:
buf = cmpr.flush()
compress_size = compress_size + len(buf)
self.fp.write(buf)
zinfo.compress_size = compress_size
else:
zinfo.compress_size = file_size
zinfo.CRC = CRC
zinfo.file_size = file_size
if not zip64 and self._allowZip64:
if file_size > zipfile.ZIP64_LIMIT:
raise RuntimeError('File size has increased during compressing')
if compress_size > zipfile.ZIP64_LIMIT:
raise RuntimeError('Compressed size larger than uncompressed size')
# Seek backwards and write CRC and file sizes
position = self.fp.tell() # Preserve current position in file
self.fp.seek(zinfo.header_offset, 0)
self.fp.write(zinfo.FileHeader(zip64))
if zinfo.compress_type == zipfile.ZIP_DEFLATED:
cmpr = zlib.compressobj(zlib.Z_DEFAULT_COMPRESSION,
zlib.DEFLATED, -15)
self.fp.seek(position, 0)
self.filelist.append(zinfo)
self.NameToInfo[zinfo.filename] = zinfo
else:
class ZipFile(zipfile.ZipFile):
def write_with_info(self, zinfo, filename):
if zinfo.filename.endswith("/"):
data = b''
else:
cmpr = None
while 1:
buf = fp.read(1024 * 1024)
if not buf:
break
file_size = file_size + len(buf)
CRC = crc32(buf, CRC) & 0xffffffff
if cmpr:
buf = cmpr.compress(buf)
compress_size = compress_size + len(buf)
self.fp.write(buf)
if cmpr:
buf = cmpr.flush()
compress_size = compress_size + len(buf)
self.fp.write(buf)
zinfo.compress_size = compress_size
else:
zinfo.compress_size = file_size
zinfo.CRC = CRC
zinfo.file_size = file_size
with open(filename, "rb") as f:
data = f.read()
if not zip64 and self._allowZip64:
if file_size > zipfile.ZIP64_LIMIT:
raise RuntimeError('File size has increased during compressing')
if compress_size > zipfile.ZIP64_LIMIT:
raise RuntimeError('Compressed size larger than uncompressed size')
# Seek backwards and write CRC and file sizes
position = self.fp.tell() # Preserve current position in file
self.fp.seek(zinfo.header_offset, 0)
self.fp.write(zinfo.FileHeader(zip64))
self.fp.seek(position, 0)
self.filelist.append(zinfo)
self.NameToInfo[zinfo.filename] = zinfo
self.writestr(zinfo, data)
class ZipPackage(object):
@@ -144,7 +157,7 @@ init python in distribute:
# Check that the time is sensible.
if rv[0] < 2000:
rv = None
except:
except Exception:
rv = None
if rv is None:
@@ -181,7 +194,7 @@ init python in distribute:
self.zipfile.write_with_info(zi, path)
def close(self):
def close(self, progress=None):
self.zipfile.close()
@@ -193,7 +206,7 @@ init python in distribute:
If true, times will be forced to the epoch.
"""
self.tarfile = tarfile.open(filename, mode)
self.tarfile = tarfile.open(filename, mode, format=tarfile.PAX_FORMAT)
self.tarfile.dereference = True
self.notime = notime
@@ -229,9 +242,10 @@ init python in distribute:
def add_directory(self, name, path):
self.add_file(name, path, True)
def close(self):
def close(self, progress=None):
self.tarfile.close()
class UpdatePackage(TarPackage):
def __init__(self, filename, basename, destination):
@@ -241,7 +255,7 @@ init python in distribute:
TarPackage.__init__(self, filename, "w", notime=True)
def close(self):
def close(self, progress=None):
TarPackage.close(self)
cmd = [
@@ -269,7 +283,6 @@ init python in distribute:
sums.write(struct.pack("<I", zlib.adler32(data) & 0xffffffff))
class DirectoryPackage(object):
def mkdir(self, path):
@@ -290,7 +303,7 @@ init python in distribute:
# If this is not a directory, ensure all parent directories
# have been created
self.mkdir(os.path.dirname(fn))
shutil.copy2(path, fn)
shutil.copy(path, fn)
if xbit:
os.chmod(fn, 0o755)
@@ -301,9 +314,10 @@ init python in distribute:
fn = os.path.join(self.path, name)
self.mkdir(fn)
def close(self):
def close(self, progress=None):
return
class ExternalZipPackage(object):
def __init__(self, path):
@@ -317,7 +331,7 @@ init python in distribute:
def add_directory(self, name, path):
self.dp.add_directory(name, path)
def close(self):
def close(self, progress=None):
self.dp.close()
if os.path.exists(self.path):
@@ -336,17 +350,40 @@ init python in distribute:
shutil.rmtree(self.directory)
class DMGPackage(DirectoryPackage):
def __init__(self, path, make_dmg):
self.make_dmg = make_dmg
DirectoryPackage.__init__(self, path)
def close(self):
def close(self, progress=None):
DirectoryPackage.close(self)
self.make_dmg()
class RPUPackage(object):
def __init__(self, directory, variant):
import renpy.update.common
self.directory = directory + "/rpu"
self.variant = variant
self.file_list = renpy.update.common.FileList()
if not os.path.exists(self.directory):
os.mkdir(self.directory)
def add_file(self, name, path, xbit):
self.file_list.add_file(name, path, xbit)
def add_directory(self, name, _path):
self.file_list.add_directory(name)
def close(self, progress=None):
import renpy.update.generate
renpy.update.generate.BlockGenerator(self.variant, self.file_list, self.directory, progress)
parallel_threads = [ ]
class ParallelPackage(object):
@@ -364,7 +401,7 @@ init python in distribute:
def add_directory(self, name, path):
self.worklist.append((True, name, path, True))
def close(self):
def close(self, progress=None):
t = threading.Thread(target=self.run)
t.start()
File diff suppressed because it is too large Load Diff
+340 -142
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 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
@@ -19,47 +19,73 @@
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
default persistent.show_edit_funcs = True
default persistent.windows_console = False
default persistent.lint_options = { # the ones which should be enabled by default
"--orphan-tl",
}
init python:
if persistent.show_edit_funcs is None:
persistent.show_edit_funcs = True
from math import ceil
if persistent.windows_console is None:
persistent.windows_console = False
def scan_translations():
def scan_translations(piglatin=True):
languages = renpy.known_languages()
if not languages:
return None
rv = [ ( "English", None) ]
languages.remove("piglatin")
for i in languages:
rv.append((i.title(), i))
rv = [(i, renpy.translate_string("{#language name and font}", i)) for i in languages ]
rv.sort(key=lambda a : renpy.filter_text_tags(a[1], allow=[]).lower())
for i in (("Schinese", "schinese"), ("Tchinese", "tchinese")):
if i in rv:
rv.remove(i)
rv.append(({"schinese": "Simplified Chinese", "tchinese": "Traditional Chinese"}.get(i[1]), i[1]))
rv.insert(0, (None, "English"))
rv.sort()
if piglatin:
rv.append(("piglatin", "Igpay Atinlay"))
if ("Piglatin", "piglatin") in rv:
rv.remove(("Piglatin", "piglatin"))
rv.append(("Pig Latin", "piglatin"))
return rv
bound = ceil(len(rv)/3.)
return (rv[:bound], rv[bound:2*bound], rv[2*bound:])
show_legacy = os.path.exists(os.path.join(config.renpy_base, "templates", "english", "game", "script.rpy"))
class RestartAtPreferences(Action):
def __call__(self):
renpy.session["launcher_start_label"] = "preferences"
renpy.utter_restart()
default persistent.legacy = False
default persistent.force_new_tutorial = False
default persistent.sponsor_message = True
default persistent.daily_update_check = True
default persistent.daily_update_check_once = False
screen preferences:
# Keep the default update check from triggering until tomorrow.
default persistent.last_update_check = datetime.date.today()
$ translations = scan_translations()
# Should we try to skip the splashscreen?
default persistent.skip_splashscreen = False
init python:
if not persistent.daily_update_check_once:
persistent.daily_update_check_once = True
persistent.daily_update_check = True
default preference_tab = "general"
define preference_tabs = {
"general" : _("General"),
"options" : _("Options"),
"theme" : _("Theme"),
"install" : _("Install Libraries"),
"actions" : _("Actions"),
"lint" : _("Lint Options"),
}
screen preferences():
default translations = scan_translations()
frame:
style_group "l"
@@ -83,155 +109,256 @@ screen preferences:
has vbox
# Projects directory selection.
add SEPARATOR2
frame:
style "l_indent"
yminimum 75
has vbox
add HALF_SPACER
text _("Projects Directory:")
for i, l in preference_tabs.items():
textbutton l action SetVariable("preference_tab", i) style "l_list"
add HALF_SPACER
frame style "l_indent":
if persistent.projects_directory:
textbutton _("[persistent.projects_directory!q]"):
action Jump("projects_directory_preference")
alt _("Projects directory: [text]")
else:
textbutton _("Not Set"):
action Jump("projects_directory_preference")
alt _("Projects directory: [text]")
add SPACER
# Text editor selection.
add SEPARATOR2
if preference_tab == "general":
frame:
style "l_indent"
yminimum 75
has vbox
text _("Text Editor:")
add HALF_SPACER
frame style "l_indent":
if persistent.editor:
textbutton persistent.editor action Jump("editor_preference") alt _("Text editor: [text]")
else:
textbutton _("Not Set") action Jump("editor_preference") alt _("Text editor: [text]")
add SPACER
add SEPARATOR2
frame:
style "l_indent"
yminimum 75
has vbox
text _("Actions:")
add HALF_SPACER
textbutton _("Install libraries") style "l_nonbox" action Jump("install")
textbutton _("Open launcher project") style "l_nonbox" action [ project.Select("launcher"), Jump("front_page") ]
textbutton _("Reset window size") style "l_nonbox" action Preference("display", 1.0)
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 _("Show edit file section") style "l_checkbox" action ToggleField(persistent, "show_edit_funcs")
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")
if project.manager.get("oldtutorial"):
textbutton _("Force new tutorial") style "l_checkbox" action [ ToggleField(persistent, "force_new_tutorial"), project.SelectTutorial(True) ]
if show_legacy:
textbutton _("Legacy options") style "l_checkbox" action ToggleField(persistent, "legacy")
if persistent.legacy:
textbutton _("Show templates") style "l_checkbox" action ToggleField(persistent, "show_templates")
textbutton _("Sponsor message") style "l_checkbox" action ToggleField(persistent, "sponsor_message")
if translations:
frame:
style "l_indent"
xmaximum ONETHIRD
xmaximum TWOTHIRDS
xfill True
has vbox
add SEPARATOR2
frame:
style "l_indent"
has vbox
text _("Projects Directory:")
add HALF_SPACER
frame style "l_indent":
if persistent.projects_directory:
textbutton _("[persistent.projects_directory!q]"):
action Jump("projects_directory_preference")
alt _("Projects directory: [text]")
else:
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":
if persistent.editor:
textbutton persistent.editor action Jump("editor_preference") alt _("Text editor: [text]")
else:
textbutton _("Not Set") action Jump("editor_preference") alt _("Text editor: [text]")
add SPACER
add SEPARATOR2
frame:
style "l_indent"
has vbox
text _("Language:")
add HALF_SPACER
viewport:
scrollbars "vertical"
mousewheel True
hbox:
for tran in translations:
vbox:
for tlid, tlname in tran:
textbutton tlname:
xmaximum (TWOTHIRDS//3)
action [Language(tlid), project.SelectTutorial(True)]
style "l_list"
has vbox
elif preference_tab == "options":
# frame style "l_indent":
frame:
style "l_indent"
xmaximum TWOTHIRDS
xfill True
for tlname, tlvalue in translations:
textbutton tlname action [ Language(tlvalue), project.SelectTutorial(True) ] style "l_list"
has vbox
add SEPARATOR2
frame:
style "l_indent"
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"
has vbox
text _("Game Options:")
add HALF_SPACER
if renpy.windows:
textbutton _("Console output") style "l_checkbox" action ToggleField(persistent, "windows_console")
textbutton _("Skip splashscreen") style "l_checkbox" action ToggleField(persistent, "skip_splashscreen")
add SPACER
add SEPARATOR2
frame:
style "l_indent"
has vbox
text _("Launcher Options:")
add HALF_SPACER
textbutton _("Show edit file section") style "l_checkbox" action ToggleField(persistent, "show_edit_funcs")
textbutton _("Large fonts") style "l_checkbox" action [ ToggleField(persistent, "large_print"), renpy.utter_restart ]
textbutton _("Sponsor message") style "l_checkbox" action ToggleField(persistent, "sponsor_message")
if ability.can_update:
textbutton _("Daily check for update") style "l_checkbox" action [ToggleField(persistent, "daily_update_check"), SetField(persistent, "last_update_check", None)] selected persistent.daily_update_check
elif preference_tab == "theme":
frame:
style "l_indent"
xmaximum TWOTHIRDS
xfill True
has vbox
add SEPARATOR2
frame:
style "l_indent"
has vbox
text _("Launcher Theme:")
add HALF_SPACER
textbutton _("Default theme") style "l_checkbox" action [SetField(persistent, "theme", None), RestartAtPreferences() ]
textbutton _("Dark theme") style "l_checkbox" action [SetField(persistent, "theme", "dark"), RestartAtPreferences()]
textbutton _("Custom theme") style "l_checkbox" action [SetField(persistent, "theme", "custom"), RestartAtPreferences()]
add SPACER
text _("Information about creating a custom theme can be found {a=https://www.renpy.org/doc/html/skins.html}in the Ren'Py Documentation{/a}.")
elif preference_tab == "install":
frame:
style "l_indent"
xmaximum TWOTHIRDS
xfill True
has vbox
add SEPARATOR2
frame:
style "l_indent"
has vbox
text _("Install Libraries:")
add HALF_SPACER
use install_preferences
elif preference_tab == "actions":
frame:
style "l_indent"
xmaximum TWOTHIRDS
xfill True
has vbox
add SEPARATOR2
frame:
style "l_indent"
has vbox
text _("Actions:")
add HALF_SPACER
textbutton _("Open launcher project") style "l_nonbox" action [ project.Select("launcher"), Jump("front_page") ]
textbutton _("Reset window size") style "l_nonbox" action Preference("display", 1.0)
textbutton _("Clean temporary files") style "l_nonbox" action Jump("clean_tmp")
elif preference_tab == "lint":
frame:
style "l_indent"
xmaximum TWOTHIRDS
xfill True
has vbox
add SEPARATOR2
frame:
style "l_indent"
has vbox
text _("Lint toggles:")
add HALF_SPACER
textbutton _("Orphan translations"):
style "l_checkbox"
action ToggleSetMembership(persistent.lint_options, "--orphan-tl")
textbutton _("Parameters overriding builtin names"):
style "l_checkbox"
action ToggleSetMembership(persistent.lint_options, "--builtins-parameters")
textbutton _("Word count and character count for speaking characters"):
style "l_checkbox"
action ToggleSetMembership(persistent.lint_options, "--words-char-count")
add SPACER
textbutton _("Check Script (Lint)") action Jump("lint")
textbutton _("Return") action Jump("front_page") style "l_left_button"
label clean_tmp:
python hide:
installer.processing(_("Cleaning temporary files..."))
installer._clean("renpy:tmp", 0)
time.sleep(0.5)
jump preferences
label projects_directory_preference:
call choose_projects_directory
jump preferences
@@ -240,3 +367,74 @@ label projects_directory_preference:
label preferences:
call screen preferences
jump preferences
screen choose_language():
default local_lang = _preferences.language
default chosen_lang = _preferences.language
default translations = scan_translations(piglatin=False)
add BACKGROUND
vbox:
xalign .5
yalign .5
fixed:
ysize 0
text renpy.translate_string(_("{#in language font}Welcome! Please choose a language"), local_lang):
xalign .5
yanchor 1.0
ypos 1.0
style "l_label_text"
size 36
textalign .5
layout "subtitle"
add SPACER
add SPACER
hbox:
xalign .5
for tran in translations:
vbox:
for tlid, tlname in tran:
textbutton tlname:
xmaximum (TWOTHIRDS//3)
action [ SetScreenVariable("chosen_lang", tlid), Language(tlid), project.SelectTutorial(True), Return() ]
hovered SetScreenVariable("local_lang", tlid)
unhovered SetScreenVariable("local_lang", chosen_lang)
style "l_list"
text_xalign .5
add SPACER
add SPACER
$ lang_name = renpy.translate_string("{#language name and font}", local_lang)
fixed:
ysize 0
textbutton renpy.translate_string(_("{#in language font}Start using Ren'Py in [lang_name]"), local_lang):
xalign .5
action [Language(chosen_lang), project.SelectTutorial(True), Return()]
style "l_default"
text_style "l_default"
text_size 30
text_textalign .5
text_layout "subtitle"
label choose_language:
call screen choose_language
return
translate None strings:
# game/new_project.rpy:77
old "{#language name and font}"
new "English"
+105 -35
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 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
@@ -48,18 +48,19 @@ init python in project:
_("Press shift+O (the letter) to access the console."),
_("Press shift+D to access the developer menu."),
_("Have you backed up your projects recently?"),
_("Lint checks your game for potential mistakes, and gives you statistics."),
]
class Project(object):
def __init__(self, path, name=None):
if name is None:
name = os.path.basename(path)
while path.endswith("/"):
path = path[:-1]
if name is None:
name = os.path.basename(path)
if not os.path.exists(path):
raise Exception("{} does not exist.".format(path))
@@ -101,9 +102,9 @@ init python in project:
def load_data(self):
try:
with open(os.path.join(self.path, "project.json"), "rb") as f:
with open(os.path.join(self.path, "project.json"), "r") as f:
self.data = json.load(f)
except:
except Exception:
self.data = { }
self.update_data()
@@ -114,9 +115,9 @@ init python in project:
"""
try:
with open(os.path.join(self.path, "project.json"), "wb") as f:
with open(os.path.join(self.path, "project.json"), "w") as f:
json.dump(self.data, f)
except:
except Exception:
self.load_data()
def update_data(self):
@@ -127,6 +128,7 @@ init python in project:
data.setdefault("add_from", True)
data.setdefault("force_recompile", True)
data.setdefault("android_build", "Release")
data.setdefault("tutorial", False)
if "renamed_all" not in data:
dp = data["packages"]
@@ -167,7 +169,7 @@ init python in project:
try:
os.makedirs(tmp)
except:
except Exception:
pass
if os.path.isdir(tmp):
@@ -186,7 +188,7 @@ init python in project:
self.tmp = tmp
return
except:
except Exception:
pass
self.tmp = tempfile.mkdtemp()
@@ -239,7 +241,7 @@ init python in project:
raise Exception("Python interpreter not found: %r", executables)
# Put together the basic command line.
cmd = [ executable, "-EO", sys.argv[0] ]
cmd = [ executable, sys.argv[0] ]
cmd.append(self.path)
cmd.extend(args)
@@ -254,10 +256,20 @@ init python in project:
if persistent.navigate_library:
cmd.append("--json-dump-common")
cmd.append("--errors-in-editor")
environ = dict(os.environ)
environ["RENPY_LAUNCHER_LANGUAGE"] = _preferences.language or "english"
if persistent.skip_splashscreen:
environ["RENPY_SKIP_SPLASHSCREEN"] = "1"
environ.update(env)
# Filter out system PYTHON* environment variables.
if hasattr(sys, "renpy_executable"):
environ = { k : v for k, v in environ.items() if not k.startswith("PYTHON") }
encoded_environ = { }
for k, v in environ.items():
@@ -273,7 +285,13 @@ init python in project:
if wait:
if p.wait():
interface.error(_("Launching the project failed."), _("Please ensure that your project launches normally before running this command."))
print("Launch failed. command={!r}, returncode={!r}".format(cmd, p.returncode))
if args and not self.is_writeable():
interface.error(_("Launching the project failed."), _("This may be because the project is not writeable."))
else:
interface.error(_("Launching the project failed."), _("Please ensure that your project launches normally before running this command."))
renpy.not_infinite_loop(30)
@@ -312,7 +330,7 @@ init python in project:
# add todo list to dump data
self.update_todos()
except:
except Exception:
self.dump["error"] = True
def update_todos(self):
@@ -327,17 +345,18 @@ init python in project:
for f in files:
data = file(self.unelide_filename(f))
data = open(self.unelide_filename(f), encoding="utf-8")
for l, line in enumerate(data):
l += 1
line = line[:1024]
try:
line = line.decode("utf-8")
except:
continue
if PY2:
try:
line = line.decode("utf-8")
except Exception:
continue
m = re.search(r"#\s*TODO(\s*:\s*|\s+)(.*)", line, re.I)
@@ -380,9 +399,18 @@ init python in project:
can be included in the project.
"""
def is_script(fn):
fn = fn.lower()
for i in [ ".rpy", ".rpym", "_ren.py" ]:
if fn.endswith(i):
return True
return False
rv = [ ]
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/")) )
if (not isdir) and is_script(i) and (not i.startswith("tmp/")) )
return rv
@@ -393,6 +421,14 @@ init python in project:
return os.path.exists(os.path.join(self.path, fn))
def is_writeable(self):
"""
Returns true if it's possible to write a file in the projects
directory.
"""
return os.access(self.path, os.W_OK)
class ProjectManager(object):
"""
@@ -402,26 +438,26 @@ init python in project:
def __init__(self):
# The projects directory.
self.projects_directory = ""
# The projects directory.
self.projects_directory = ""
# Normal projects, in alphabetical order by lowercase name.
self.projects = [ ]
# Normal projects, in alphabetical order by lowercase name.
self.projects = [ ]
# Template projects.
self.templates = [ ]
# Template projects.
self.templates = [ ]
# All projects - normal, template, and hidden.
self.all_projects = [ ]
# All projects - normal, template, and hidden.
self.all_projects = [ ]
# Directories that have been scanned.
self.scanned = set()
# Directories that have been scanned.
self.scanned = set()
# The tutorial game, and the language it's for.
self.tutoral = None
self.tutorial_language = "the meowing of a cat"
# The tutorial game, and the language it's for.
self.tutoral = None
self.tutorial_language = "the meowing of a cat"
self.scan()
self.scan()
def scan(self):
"""
@@ -539,7 +575,7 @@ init python in project:
try:
ppath = self.find_basedir(ppath)
except:
except Exception:
return
if ppath is None:
@@ -734,7 +770,12 @@ init python in project:
blurb = LAUNCH_BLURBS[persistent.blurb % len(LAUNCH_BLURBS)]
persistent.blurb += 1
interface.interaction(_("Launching"), blurb, pause=2.5)
if persistent.skip_splashscreen:
submessage = _("Splashscreen skipped in launcher preferences.")
else:
submessage = None
interface.interaction(_("Launching"), blurb, submessage=submessage, pause=2.5)
def __call__(self):
@@ -761,6 +802,14 @@ init 10 python:
if not directory_is_writable(persistent.projects_directory):
persistent.projects_directory = None
label after_load:
python:
if project.current is not None:
project.current.update_dump()
return
###############################################################################
# Code to choose the projects directory.
@@ -810,3 +859,24 @@ init python:
return False
renpy.arguments.register_command("get_projects_directory", get_projects_directory_command)
def set_project_command():
ap = renpy.arguments.ArgumentParser()
ap.add_argument("project", help="The full path to the project to select.")
args = ap.parse_args()
projects = os.path.dirname(os.path.abspath(args.project))
name = os.path.basename(args.project)
persistent.projects_directory = renpy.fsdecode(projects)
project.multipersistent.projects_directory = persistent.projects_directory
persistent.active_project = name
project.multipersistent.save()
renpy.save_persistent()
return False
renpy.arguments.register_command("set_project", set_project_command)
+4
View File
@@ -0,0 +1,4 @@
-----BEGIN PUBLIC KEY-----
MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEmkuXOrZ2viRe4fRCrlqUFGdgRqy9IcWt
5lJvsUqRN619pWZIefz/bau9Sd8vcJt6VKwexOeBmMhzXwZ/1Lm3OQ==
-----END PUBLIC KEY-----
+196 -13
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 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
@@ -19,6 +19,50 @@
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
# Defaults for custom theme properties.
init -99 python:
# The color of non-interactive text.
custom_text = "#545454"
# Colors for buttons in various states.
custom_idle = "#42637b"
custom_hover = "#d86b45"
custom_disable = "#808080"
# Colors for reversed text buttons (selected list entries).
custom_reverse_idle = "#78a5c5"
reverse_hover = "#d86b45"
custom_reverse_text = "#ffffff"
# Colors for the scrollbar thumb.
custom_scrollbar_idle = "#dfdfdf"
custom_scrollbar_hover = "#d86b45"
# An image used as a separator pattern.
custom_pattern = "images/pattern.png"
# A displayable used for the background of everything.
custom_background = "images/background.png"
# A displayable used for the background of the projects list.
custom_projects_window = Null()
# A displayable used the background of information boxes.
custom_info_window = "#f9f9f9c0"
# Colors for the titles of information boxes.
custom_error_color = "#d15353"
custom_info_color = "#545454"
custom_interaction_color = "#d19753"
custom_question_color = "#d19753"
# The color of input text.
custom_input_color = "#d86b45"
# A displayable used for the background of windows
# containing commands, preferences, and navigation info.
custom_window = Frame(Fixed(Solid(custom_reverse_idle, xsize=4, xalign=0), Solid(custom_info_window, xsize=794, xalign=1.0), xsize=800, ysize=600), 0, 0, tile=True)
init -1:
# Fonts.
@@ -56,11 +100,11 @@ init -1 python:
PATTERN = "images/pattern.png"
# A displayable used for the background of everything.
BACKGROUND = "images/background.png"
BACKGROUND = "background"
# A displayable used for the background of windows
# containing commands, preferences, and navigation info.
WINDOW = Frame("images/window.png", 0, 0, tile=True)
WINDOW = Frame("window", 0, 0, tile=True)
# A displayable used for the background of the projects list.
PROJECTS_WINDOW = Null()
@@ -77,9 +121,146 @@ init -1 python:
# The color of input text.
INPUT_COLOR = "#d86b45"
if persistent.theme == 'dark':
# The color of non-interactive text.
TEXT = "#ababab"
# Colors for buttons in various states.
IDLE = "#709cbe"
HOVER = "#d86b45"
DISABLED = "#7f7f7f"
# Colors for reversed text buttons (selected list entries).
REVERSE_IDLE = "#78a5c5"
REVERSE_HOVER = "#d86b45"
REVERSE_TEXT = "#0a0a0a"
# Colors for the scrollbar thumb.
SCROLLBAR_IDLE = "#282828"
SCROLLBAR_HOVER = "#d86b45"
# An image used as a separator pattern.
PATTERN = "images/pattern.png"
# A displayable used for the background of everything.
BACKGROUND = Fixed(Solid(REVERSE_TEXT), xsize=800, ysize=600)
# A displayable used for the background of the projects list.
PROJECTS_WINDOW = Null()
# A displayable used the background of information boxes.
INFO_WINDOW = "#101010"
# Colors for the titles of information boxes.
ERROR_COLOR = "#d15353"
INFO_COLOR = "#ababab"
INTERACTION_COLOR = "#d19753"
QUESTION_COLOR = "#d19753"
# The color of input text.
INPUT_COLOR = "#d86b45"
# A displayable used for the background of windows
# containing commands, preferences, and navigation info.
WINDOW = Frame(Fixed(Solid(REVERSE_IDLE, xsize=4, xalign=0), Solid(INFO_WINDOW, xsize=794, xalign=1.0), xsize=800, ysize=600), 0, 0, tile=True)
elif persistent.theme == 'clear':
# The color of non-interactive text.
TEXT = "#545454"
# Colors for buttons in various states.
IDLE = "#42637b"
HOVER = "#d86b45"
DISABLED = "#808080"
# Colors for reversed text buttons (selected list entries).
REVERSE_IDLE = "#78a5c5"
REVERSE_HOVER = "#d86b45"
REVERSE_TEXT = "#ffffff"
# Colors for the scrollbar thumb.
SCROLLBAR_IDLE = "#dfdfdf"
SCROLLBAR_HOVER = "#d86b45"
# An image used as a separator pattern.
PATTERN = "images/pattern.png"
# A displayable used for the background of everything.
BACKGROUND = Fixed(Solid(REVERSE_TEXT), xsize=800, ysize=600)
# 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"
INTERACTION_COLOR = "#d19753"
QUESTION_COLOR = "#d19753"
# The color of input text.
INPUT_COLOR = "#d86b45"
# A displayable used for the background of windows
# containing commands, preferences, and navigation info.
WINDOW = Frame(Fixed(Solid(REVERSE_IDLE, xsize=4, xalign=0), Solid(INFO_WINDOW, xsize=794, xalign=1.0), xsize=800, ysize=600), 0, 0, tile=True)
elif persistent.theme == 'custom':
# The color of non-interactive text.
TEXT = custom_text
# Colors for buttons in various states.
IDLE = custom_idle
HOVER = custom_hover
DISABLED = custom_disable
# Colors for reversed text buttons (selected list entries).
REVERSE_IDLE = custom_reverse_idle
REVERSE_HOVER = reverse_hover
REVERSE_TEXT = custom_reverse_text
# Colors for the scrollbar thumb.
SCROLLBAR_IDLE = custom_scrollbar_idle
SCROLLBAR_HOVER = custom_scrollbar_hover
# An image used as a separator pattern.
PATTERN = custom_pattern
# A displayable used for the background of everything.
BACKGROUND = custom_background
# A displayable used for the background of the projects list.
PROJECTS_WINDOW = custom_projects_window
# A displayable used the background of information boxes.
INFO_WINDOW = custom_info_window
# Colors for the titles of information boxes.
ERROR_COLOR = custom_error_color
INFO_COLOR = custom_info_color
INTERACTION_COLOR = custom_interaction_color
QUESTION_COLOR = custom_question_color
# The color of input text.
INPUT_COLOR = custom_input_color
# A displayable used for the background of windows
# containing commands, preferences, and navigation info.
WINDOW = custom_window
init 1 python:
if not renpy.has_image('scrollbar_center'):
renpy.image('scrollbar_center', Fixed(Solid(REVERSE_TEXT, area=(2, 2, 2, 4)), Solid(REVERSE_TEXT, area=(8, 2, 2, 4)), Solid(REVERSE_TEXT, area=(14, 2, 2, 4)), xysize=(18, 8)))
if not renpy.has_image('vscrollbar_center'):
renpy.image('vscrollbar_center', Fixed(Solid(REVERSE_TEXT, area=(2, 2, 4, 2)), Solid(REVERSE_TEXT, area=(2, 8, 4, 2)), Solid(REVERSE_TEXT, area=(2, 14, 4, 2)), xysize=(8, 18)))
def size(n):
"""
Adjusts the font size if we're in large-print mode.
@@ -121,10 +302,13 @@ init 1 python:
ONEHALF = 377
def checkbox(full, color):
if full:
return im.Twocolor("images/checkbox_full.png", color, color, style="l_checkbox_box")
if renpy.has_image('checkbox_full'):
check = im.Twocolor(''.join(["images/checkbox_", "full" if full else "empty", ".png"]), color, color)
else:
return im.Twocolor("images/checkbox_empty.png", color, color, style="l_checkbox_box")
check = Fixed(Solid(color, xsize=1, xalign=.0), Solid(color, xsize=1, xalign=1.0), Solid(color, ysize=1, yalign=.0), Solid(color, ysize=1, yalign=1.0), xsize=10, ysize=10)
if full:
check = Fixed(check, Solid(color, xsize=6, ysize=6, align=(.5, .5)), xsize=10, ysize=10)
return At(check, l_checkbox_box)
@@ -218,7 +402,7 @@ style l_alternate is l_default:
style l_alternate_text is l_default:
size size(14)
font light_font()
text_align 1.0
textalign 1.0
style l_small_button is l_button
@@ -259,11 +443,11 @@ style l_list2_text is l_list_text
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),
Transform('vscrollbar_center', 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),
Transform('vscrollbar_center', xalign=0.5, yalign=0.5),
xmaximum = SCROLLBAR_SIZE)
xmaximum SCROLLBAR_SIZE
bar_vertical True
@@ -304,7 +488,7 @@ style l_info_button is l_button:
xmargin 50
style l_info_button_text is l_button_text:
text_align 0.5
textalign 0.5
layout "subtitle"
# Progress bar.
@@ -341,9 +525,8 @@ style l_checkbox is l_button:
selected_hover_background checkbox(True, HOVER)
insensitive_background checkbox(False, DISABLED)
style l_checkbox_box:
yanchor 0.5
ypos 11
transform l_checkbox_box:
ycenter 11
style l_checkbox_text is l_button_text:
selected_font light_font()
+12 -6
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 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
@@ -22,6 +22,7 @@
init python:
class FileTail(object):
def __init__(self, filename, lines=8):
@@ -31,13 +32,18 @@ init python:
def update(self):
def filter_text(s):
if "Unknown chunk type '200'" in s:
return False
return True
try:
with open(self.filename) as f:
text = f.read()
try:
text = renpy.fsdecode(text)
except:
except Exception:
text = text.decode("latin-1")
text = text.strip()
@@ -49,6 +55,9 @@ init python:
if "\r" in l:
_head, _sep, l = l.rpartition("\r")
if not filter_text(l):
continue
while l:
newtext.append(l[:100])
l = l[100:]
@@ -61,8 +70,5 @@ init python:
self.text = text
renpy.restart_interaction()
except:
except Exception:
pass
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2023 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
-73
View File
@@ -1,73 +0,0 @@
#!/usr/bin/env python
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
# (the "Software"), to deal in the Software without restriction,
# including without limitation the rights to use, copy, modify, merge,
# publish, distribute, sublicense, and/or sell copies of the Software,
# and to permit persons to whom the Software is furnished to do so,
# subject to the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
# This is used on Linux and Mac to prompt the user for the projects
# directory.
import sys
# Gtk generally has better support than TKinter on various Linux distributions
def gtk_select_directory(title):
dialog = Gtk.FileChooserNative(title=title,
action=Gtk.FileChooserAction.SELECT_FOLDER)
dialog.run()
return dialog.get_filename()
# Fall back to TKinter if Gtk isn't available
def tk_select_directory(initialdir, title):
root = Tk()
root.withdraw()
return askdirectory(initialdir=initialdir, parent=root, title=title)
try:
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
def select_directory(title):
result = gtk_select_directory(title)
return result if result else ''
except:
# Python3 and Python2-style imports.
try:
from tkinter import Tk
from tkinter.filedialog import askdirectory
except ImportError:
from Tkinter import Tk
from tkFileDialog import askdirectory
def select_directory(title):
return tk_select_directory(title, sys.argv[1])
if __name__ == '__main__':
directory = select_directory('Select Ren\'Py Projects Directory')
sys.stdout.write(directory)
+5 -4
View File
@@ -1,5 +1,7 @@
translate arabic strings:
translate arabic strings:
# game/new_project.rpy:77
old "{#language name and font}"
new "{font=DejaVuSans.ttf}العربية{/font}"
# about.rpy:39
old "[version!q]"
@@ -562,7 +564,7 @@ translate arabic strings:
new "[project_dir!q] يوجد مسبقاً, الرجاء اختيار اسم مختلف."
# gui7.rpy:341
old "What resolution should the project use? Although Ren'Py can scale the window up and down, this is the initial size of the window, the size at which assets should be drawn, and the size at which the assets will be at their sharpest.\n\nThe default of 1280x720 is a reasonable compromise."
old "What resolution should the project use? Although Ren'Py can scale the window up and down, this is the initial size of the window, the size at which assets should be drawn, and the size at which the assets will be at their sharpest.\n\nThe default of [default_size[0]]x[default_size[1]] is a reasonable compromise."
new "ما هو الحجم المطلوب للمشروع؟ رينباي يستطيع تكبير و تصغير حجم النافذة لتناسب الشاشة, لكن الحجم الذي ستختاره هنا هو الحجم القياسي, و الذي ستظهر فيه الصور و الشخصيات في أوضح شكل لها. \n\n الحجم الذي يناسب اغلب الشاشات هو 1280×730 بكسل."
# gui7.rpy:389
@@ -1184,4 +1186,3 @@ translate arabic strings:
# updater.rpy:195
old "Proceed"
new "استمرار"
+2 -3
View File
@@ -174,8 +174,8 @@ translate arabic strings:
new "## This lays out the basic common structure of a game menu screen. It's called with the screen title, and displays the background, title, and navigation."
# screens.rpy:418
old "## The scroll parameter can be None, or one of \"viewport\" or \"vpgrid\". When this screen is intended to be used with one or more children, which are transcluded (placed) inside it."
new "## The scroll parameter can be None, or one of \"viewport\" or \"vpgrid\". When this screen is intended to be used with one or more children, which are transcluded (placed) inside it."
old "## The scroll parameter can be None, or one of \"viewport\" or \"vpgrid\". This screen is intended to be used with one or more children, which are transcluded (placed) inside it."
new "## The scroll parameter can be None, or one of \"viewport\" or \"vpgrid\". This screen is intended to be used with one or more children, which are transcluded (placed) inside it."
# screens.rpy:476
old "Return"
@@ -640,4 +640,3 @@ translate arabic strings:
# screens.rpy:1429
old "Menu"
new "Menu"
+1 -1
View File
@@ -20,7 +20,7 @@ label start:
define config.rtl = True
define gui.text_align = 1.0
define gui.textalign = 1.0
define gui.button_text_xalign = 1.0
define gui.prompt_text_xalign = 1.0
define gui.navigation_xpos = 240
+613 -5
View File
@@ -3,7 +3,7 @@ translate finnish strings:
# 00action_file.rpy:26
old "{#weekday}Monday"
new "{#weekday}Maanatai"
new "{#weekday}Maanantai"
# 00action_file.rpy:26
old "{#weekday}Tuesday"
@@ -199,7 +199,8 @@ translate finnish strings:
# 00gui.rpy:236
old "Are you sure you want to skip unseen dialogue to the next choice?"
new "Are you sure you want to skip unseen dialogue to the next choice?"
# Automatic translation.
new "Oletko varma, että haluat ohittaa näkymättömän dialogin seuraavaan vaihtoehtoon?"
# 00keymap.rpy:250
old "Saved screenshot as %s."
@@ -223,7 +224,8 @@ translate finnish strings:
# 00library.rpy:262
old "This program contains free software under a number of licenses, including the MIT License and GNU Lesser General Public License. A complete list of software, including links to full source code, can be found {a=https://www.renpy.org/l/license}here{/a}."
new "This program contains free software under a number of licenses, including the MIT License and GNU Lesser General Public License. A complete list of software, including links to full source code, can be found {a=https://www.renpy.org/l/license}here{/a}."
# Automatic translation.
new "Tämä ohjelma sisältää vapaita ohjelmistoja useiden lisenssien alla, mukaan lukien MIT-lisenssi ja GNU Lesser General Public License. Täydellinen luettelo ohjelmistoista, mukaan lukien linkit täydelliseen lähdekoodiin, löytyy {a=https://www.renpy.org/l/license}täältä{/a}."
# 00preferences.rpy:422
old "Clipboard voicing enabled. Press 'shift+C' to disable."
@@ -239,7 +241,8 @@ translate finnish strings:
# 00iap.rpy:217
old "Contacting App Store\nPlease Wait..."
new "Contacting App Store\nPlease Wait..."
# Automatic translation.
new "Yhteydenotto App Storeen\nOdottakaa..."
# 00updater.rpy:367
old "The Ren'Py Updater is not supported on mobile devices."
@@ -315,7 +318,7 @@ translate finnish strings:
# 00gallery.rpy:563
old "Image [index] of [count] locked."
new "[index]. kuva [count]:stä on lukittu"
new "Kuva [index]/[count] on lukittu."
# 00gallery.rpy:583
old "prev"
@@ -333,3 +336,608 @@ translate finnish strings:
old "return"
new "palaa"
translate finnish strings:
# renpy/common/00accessibility.rpy:32
old "bar"
new "palkki"
# renpy/common/00accessibility.rpy:33
old "selected"
# Automatic translation.
new "valittu"
# renpy/common/00accessibility.rpy:34
old "viewport"
new "viewport"
# renpy/common/00accessibility.rpy:35
old "horizontal scroll"
# Automatic translation.
new "vaakasuora vieritys"
# renpy/common/00accessibility.rpy:36
old "vertical scroll"
# Automatic translation.
new "pystysuora vieritys"
# renpy/common/00accessibility.rpy:37
old "activate"
# Automatic translation.
new "aktivoi"
# renpy/common/00accessibility.rpy:38
old "deactivate"
# Automatic translation.
new "deaktivoi"
# renpy/common/00accessibility.rpy:39
old "increase"
new "lisää"
# renpy/common/00accessibility.rpy:40
old "decrease"
new "vähennä"
# renpy/common/00accessibility.rpy:138
old "Font Override"
# Automatic translation.
new "Fontin ohitus"
# renpy/common/00accessibility.rpy:142
old "Default"
# Automatic translation.
new "Oletus"
# renpy/common/00accessibility.rpy:146
old "DejaVu Sans"
new "DejaVu Sans"
# renpy/common/00accessibility.rpy:150
old "Opendyslexic"
new "Opendyslexic"
# renpy/common/00accessibility.rpy:156
old "Text Size Scaling"
# Automatic translation.
new "Tekstin koon skaalaus"
# renpy/common/00accessibility.rpy:162
old "Reset"
# Automatic translation.
new "Nollaa"
# renpy/common/00accessibility.rpy:168
old "Line Spacing Scaling"
new "Rivivälin skaalaus"
# renpy/common/00accessibility.rpy:180
old "High Contrast Text"
# Automatic translation.
new "Korkean kontrastin teksti"
# renpy/common/00accessibility.rpy:193
old "Self-Voicing"
new "Tietokoneen ääninäyttely"
# renpy/common/00accessibility.rpy:197
old "Off"
new "Pois päältä"
# renpy/common/00accessibility.rpy:201
old "Text-to-speech"
# Automatic translation.
new "Tekstistä puheeksi"
# renpy/common/00accessibility.rpy:205
old "Clipboard"
# Automatic translation.
new "Leikepöytä"
# renpy/common/00accessibility.rpy:209
old "Debug"
# Automatic translation.
new "Vianmääritys"
# renpy/common/00accessibility.rpy:223
old "Self-Voicing Volume Drop"
new "Tietokoneen ääninäyttelyn äänenvoimakkuuden pudotus"
# renpy/common/00accessibility.rpy:234
old "The options on this menu are intended to improve accessibility. They may not work with all games, and some combinations of options may render the game unplayable. This is not an issue with the game or engine. For the best results when changing fonts, try to keep the text size the same as it originally was."
new "Tämän valikon vaihtoehtojen tarkoituksena on parantaa saavutettavuutta. Ne eivät välttämättä toimi kaikissa peleissä, ja joidenkin vaihtoehtojen yhdistelmät saattavat tehdä pelistä pelikelvottoman. Tämä ei johdu pelistä tai moottorista. Saat fontteja vaihtaessa parhaat tulokset kun yrität pitää tekstin koon samana kuin se oli alun perin."
# renpy/common/00action_file.rpy:378
old "Save slot %s: [text]"
new "Tallennuspaikka %s: [text]"
# renpy/common/00action_file.rpy:461
old "Load slot %s: [text]"
new "Lataa tallennus %s: [text]"
# renpy/common/00action_file.rpy:514
old "Delete slot [text]"
new "Poista tallennus [text]"
# renpy/common/00action_file.rpy:593
old "File page auto"
new "Tiedoston sivu: auto"
# renpy/common/00action_file.rpy:595
old "File page quick"
new "Tiedoston sivu: pika"
# renpy/common/00action_file.rpy:597
old "File page [text]"
new "Tiedoston sivu: [text]"
# renpy/common/00action_file.rpy:796
old "Next file page."
new "Seuraava tiedoston sivu."
# renpy/common/00action_file.rpy:868
old "Previous file page."
new "Edellinen tiedoston sivu."
# renpy/common/00action_file.rpy:944
old "Quick save."
new "Pikatallennus."
# renpy/common/00action_file.rpy:963
old "Quick load."
# Automatic translation.
new "Pikalataus."
# renpy/common/00action_other.rpy:381
old "Language [text]"
# Automatic translation.
new "Kieli [text]"
# renpy/common/00director.rpy:705
old "The interactive director is not enabled here."
# Automatic translation.
new "Vuorovaikutteinen ohjaaja ei ole käytössä täällä."
# renpy/common/00director.rpy:1504
old "⬆"
new "⬆"
# renpy/common/00director.rpy:1510
old "⬇"
new "⬇"
# renpy/common/00director.rpy:1574
old "Done"
# Automatic translation.
new "Valmis"
# renpy/common/00director.rpy:1584
old "(statement)"
# Automatic translation.
new "(lausunto)"
# renpy/common/00director.rpy:1585
old "(tag)"
new "(tag)"
# renpy/common/00director.rpy:1586
old "(attributes)"
# Automatic translation.
new "(attribuutit)"
# renpy/common/00director.rpy:1587
old "(transform)"
new "(transform)"
# renpy/common/00director.rpy:1612
old "(transition)"
new "(transition)"
# renpy/common/00director.rpy:1624
old "(channel)"
# Automatic translation.
new "(kanava)"
# renpy/common/00director.rpy:1625
old "(filename)"
# Automatic translation.
new "(tiedostonimi)"
# renpy/common/00director.rpy:1654
old "Change"
# Automatic translation.
new "Muuta"
# renpy/common/00director.rpy:1656
old "Add"
# Automatic translation.
new "Lisää"
# renpy/common/00director.rpy:1662
old "Remove"
# Automatic translation.
new "Poista"
# renpy/common/00director.rpy:1697
old "Statement:"
# Automatic translation.
new "Lausunto:"
# renpy/common/00director.rpy:1718
old "Tag:"
new "Tag:"
# renpy/common/00director.rpy:1734
old "Attributes:"
# Automatic translation.
new "Ominaisuudet:"
# renpy/common/00director.rpy:1745
old "Click to toggle attribute, right click to toggle negative attribute."
# Automatic translation.
new "Napsauttamalla voit vaihtaa attribuuttia, oikealla napsauttamalla voit vaihtaa negatiivista attribuuttia."
# renpy/common/00director.rpy:1757
old "Transforms:"
# Automatic translation.
new "Muuntuu:"
# renpy/common/00director.rpy:1768
old "Click to set transform, right click to add to transform list."
# Automatic translation.
new "Napsauta aseta muunnos, lisää muunnosluetteloon napsauttamalla hiiren kakkospainiketta."
# renpy/common/00director.rpy:1780
old "Behind:"
# Automatic translation.
new "Takana:"
# renpy/common/00director.rpy:1789
old "Click to set, right click to add to behind list."
# Automatic translation.
new "Aseta napsauttamalla, lisää takaluetteloon napsauttamalla hiiren kakkospainiketta."
# renpy/common/00director.rpy:1801
old "Transition:"
# Automatic translation.
new "Siirtyminen:"
# renpy/common/00director.rpy:1819
old "Channel:"
# Automatic translation.
new "Kanava:"
# renpy/common/00director.rpy:1837
old "Audio Filename:"
# Automatic translation.
new "Äänitiedoston nimi:"
# renpy/common/00gui.rpy:456
old "This save was created on a different device. Maliciously constructed save files can harm your computer. Do you trust this save's creator and everyone who could have changed the file?"
# Automatic translation.
new "Tämä tallennus on luotu eri laitteella. Pahantahtoisesti tehdyt tallennustiedostot voivat vahingoittaa tietokonettasi. Luotatko tämän tallennuksen tekijään ja kaikkiin, jotka ovat voineet muuttaa tiedostoa?"
# renpy/common/00gui.rpy:457
old "Do you trust the device the save was created on? You should only choose yes if you are the device's sole user."
# Automatic translation.
new "Luotatko laitteeseen, jolla tallennus luotiin? Valitse kyllä vain, jos olet laitteen ainoa käyttäjä."
# renpy/common/00keymap.rpy:322
old "Failed to save screenshot as %s."
# Automatic translation.
new "Kuvakaappauksen tallentaminen nimellä %s epäonnistui."
# renpy/common/00preferences.rpy:271
old "display"
# Automatic translation.
new "näyttö"
# renpy/common/00preferences.rpy:283
old "transitions"
# Automatic translation.
new "siirtymät"
# renpy/common/00preferences.rpy:292
old "skip transitions"
new "ohita siirtymät"
# renpy/common/00preferences.rpy:294
old "video sprites"
new "video sprites"
# renpy/common/00preferences.rpy:303
old "show empty window"
# Automatic translation.
new "näytä tyhjä ikkuna"
# renpy/common/00preferences.rpy:312
old "text speed"
# Automatic translation.
new "tekstin nopeus"
# renpy/common/00preferences.rpy:320
old "joystick"
# Automatic translation.
new "Joystick"
# renpy/common/00preferences.rpy:320
old "joystick..."
new "joystick..."
# renpy/common/00preferences.rpy:327
old "skip"
# Automatic translation.
new "ohita"
# renpy/common/00preferences.rpy:330
old "skip unseen [text]"
new "ohita näkemätön [text]"
# renpy/common/00preferences.rpy:335
old "skip unseen text"
new "ohita näkemätön teksti"
# renpy/common/00preferences.rpy:337
old "begin skipping"
new "aloita ohittaminen"
# renpy/common/00preferences.rpy:341
old "after choices"
# Automatic translation.
new "valintojen jälkeen"
# renpy/common/00preferences.rpy:348
old "skip after choices"
new "ohita valintojen jälkeen"
# renpy/common/00preferences.rpy:350
old "auto-forward time"
new "automaattisen eteenpäinsiirtymisen aika"
# renpy/common/00preferences.rpy:364
old "auto-forward"
new "automaattinen eteenpäinsiirtyminen"
# renpy/common/00preferences.rpy:371
old "Auto forward"
new "Automaattinen eteenpäinsiirtyminen"
# renpy/common/00preferences.rpy:374
old "auto-forward after click"
new "automaattinen eteenpäinsiirtyminen napsautuksen jälkeen"
# renpy/common/00preferences.rpy:383
old "automatic move"
# Automatic translation.
new "automaattinen siirto"
# renpy/common/00preferences.rpy:392
old "wait for voice"
# Automatic translation.
new "odota ääntä"
# renpy/common/00preferences.rpy:401
old "voice sustain"
# Automatic translation.
new "äänen ylläpitäminen"
# renpy/common/00preferences.rpy:410
old "self voicing"
new "tietokoneen ääninäyttely"
# renpy/common/00preferences.rpy:419
old "self voicing volume drop"
new "tietokoneen ääninäyttelyn äänenvoimakkuuden pudotus"
# renpy/common/00preferences.rpy:427
old "clipboard voicing"
new "leikepöydän ääni"
# renpy/common/00preferences.rpy:436
old "debug voicing"
new "virheenkorjausääni"
# renpy/common/00preferences.rpy:445
old "emphasize audio"
new "korosta ääntä"
# renpy/common/00preferences.rpy:454
old "rollback side"
# Automatic translation.
new "Rollback-puoli"
# renpy/common/00preferences.rpy:464
old "gl powersave"
new "gl powersave"
# renpy/common/00preferences.rpy:470
old "gl framerate"
new "gl framerate"
# renpy/common/00preferences.rpy:473
old "gl tearing"
new "gl tearing"
# renpy/common/00preferences.rpy:476
old "font transform"
# Automatic translation.
new "fontin muunnos"
# renpy/common/00preferences.rpy:479
old "font size"
# Automatic translation.
new "fonttikoko"
# renpy/common/00preferences.rpy:487
old "font line spacing"
# Automatic translation.
new "fontin riviväli"
# renpy/common/00preferences.rpy:495
old "system cursor"
# Automatic translation.
new "järjestelmän kursori"
# renpy/common/00preferences.rpy:504
old "renderer menu"
# Automatic translation.
new "renderöintivalikko"
# renpy/common/00preferences.rpy:507
old "accessibility menu"
# Automatic translation.
new "saavutettavuusvalikko"
# renpy/common/00preferences.rpy:510
old "high contrast text"
# Automatic translation.
new "korkean kontrastin teksti"
# renpy/common/00preferences.rpy:519
old "audio when minimized"
# Automatic translation.
new "ääni kun se on minimoitu"
# renpy/common/00preferences.rpy:528
old "audio when unfocused"
# Automatic translation.
new "ääni kun se ei ole keskittynyt"
# renpy/common/00preferences.rpy:537
old "web cache preload"
# Automatic translation.
new "verkkovälimuistin esilataus"
# renpy/common/00preferences.rpy:552
old "voice after game menu"
# Automatic translation.
new "ääni pelivalikon jälkeen"
# renpy/common/00preferences.rpy:571
old "main volume"
new "pää-äänenvoimakkuus"
# renpy/common/00preferences.rpy:572
old "music volume"
new "musiikin äänenvoimakkuus"
# renpy/common/00preferences.rpy:573
old "sound volume"
new "tehosteiden äänenvoimakkuus"
# renpy/common/00preferences.rpy:574
old "voice volume"
new "ääninäyttelyn äänenvoimakkuus"
# renpy/common/00preferences.rpy:575
old "mute main"
new "mykistä pää-ääni"
# renpy/common/00preferences.rpy:576
old "mute music"
new "mykistä musiikki"
# renpy/common/00preferences.rpy:577
old "mute sound"
new "mykistä äänitehosteet"
# renpy/common/00preferences.rpy:578
old "mute voice"
new "mykistä ääninäyttely"
# renpy/common/00preferences.rpy:579
old "mute all"
new "mykistä kaikki"
# renpy/common/00speechbubble.rpy:344
old "Speech Bubble Editor"
# Automatic translation.
new "Puhekuplaeditori"
# renpy/common/00speechbubble.rpy:349
old "(hide)"
# Automatic translation.
new "(piilota)"
# renpy/common/00sync.rpy:70
old "Sync downloaded."
# Automatic translation.
new "Synkronointi ladattu."
# renpy/common/00sync.rpy:190
old "Could not connect to the Ren'Py Sync server."
# Automatic translation.
new "Yhteyttä Ren'Py Sync -palvelimeen ei saatu muodostettua."
# renpy/common/00sync.rpy:192
old "The Ren'Py Sync server timed out."
# Automatic translation.
new "Ren'Py Sync -palvelimen aikakatkaisu."
# renpy/common/00sync.rpy:194
old "An unknown error occurred while connecting to the Ren'Py Sync server."
# Automatic translation.
new "Ren'Py Sync -palvelimeen muodostettaessa yhteyttä tapahtui tuntematon virhe."
# renpy/common/00sync.rpy:267
old "The Ren'Py Sync server does not have a copy of this sync. The sync ID may be invalid, or it may have timed out."
# Automatic translation.
new "Ren'Py Sync -palvelimella ei ole kopiota tästä synkronoinnista. Synkronointitunnus voi olla virheellinen tai se voi olla vanhentunut."
# renpy/common/00sync.rpy:409
old "Please enter the sync ID you generated.\nNever enter a sync ID you didn't create yourself."
# Automatic translation.
new "Kirjoita luomasi synkronointitunnus.\nÄlä koskaan anna synkronointitunnusta, jota et ole luonut itse."
# renpy/common/00sync.rpy:428
old "The sync ID is not in the correct format."
# Automatic translation.
new "Synkronointitunnus ei ole oikeassa muodossa."
# renpy/common/00sync.rpy:448
old "The sync could not be decrypted."
# Automatic translation.
new "Synkronointia ei voitu purkaa."
# renpy/common/00sync.rpy:471
old "The sync belongs to a different game."
# Automatic translation.
new "Synkronointi kuuluu eri peliin."
# renpy/common/00sync.rpy:476
old "The sync contains a file with an invalid name."
# Automatic translation.
new "Synkronointi sisältää tiedoston, jonka nimi on virheellinen."
# renpy/common/00sync.rpy:529
old "This will upload your saves to the {a=https://sync.renpy.org}Ren'Py Sync Server{/a}.\nDo you want to continue?"
new "Tämä lataa tallennuksesi {a=https://sync.renpy.org}Ren'Py Sync Serveriin{/a}.\nHaluatko jatkaa?"
# renpy/common/00sync.rpy:558
old "Enter Sync ID"
# Automatic translation.
new "Syötä synkronointitunnus"
# renpy/common/00sync.rpy:569
old "This will contact the {a=https://sync.renpy.org}Ren'Py Sync Server{/a}."
new "Tämä ottaa yhteyttä {a=https://sync.renpy.org}Ren'Py Sync Serveriin{/a}."
# renpy/common/00sync.rpy:596
old "Sync Success"
new "Synkronointi onnistui"
# renpy/common/00sync.rpy:599
old "The Sync ID is:"
# Automatic translation.
new "Synkronointitunnus on:"
# renpy/common/00sync.rpy:605
old "You can use this ID to download your save on another device.\nThis sync will expire in an hour.\nRen'Py Sync is supported by {a=https://www.renpy.org/sponsors.html}Ren'Py's Sponsors{/a}."
new "Voit käyttää tätä tunnusta ladataksesi tallennuksesi toiseen laitteeseen.\nTämä synkronointi päättyy tunnin kuluttua.\nRen'Py Sync on {a=https://www.renpy.org/sponsors.html}Ren'Pyn sponsorien{/a} tukema."
# renpy/common/00sync.rpy:631
old "Sync Error"
# Automatic translation.
new "Synkronointivirhe"
+109 -1
View File
@@ -75,7 +75,8 @@ translate finnish strings:
# _developer/developer.rpym:532
old "\n{color=#cfc}✔ predicted image (good){/color}\n{color=#fcc}✘ unpredicted image (bad){/color}\n{color=#fff}Drag to move.{/color}"
new "\n{color=#cfc}✔ predicted image (good){/color}\n{color=#fcc}✘ unpredicted image (bad){/color}\n{color=#fff}Drag to move.{/color}"
# Automatic translation.
new "\n{color=#cfc}✔ ennustettu kuva (hyvä){/color}\n{color=#fcc}✘ ennakoimaton kuva (huono){/color}\n{color=#fff}Siirrä vetämällä.{/color}"
# _developer/inspector.rpym:38
old "Displayable Inspector"
@@ -177,3 +178,110 @@ translate finnish strings:
old "jump <label>: jumps to label"
new "jump <tunnus>: hyppää 'script.rpy'-tiedosto(i)ssa olevaan, tunnuksella merkittyyn kohtaan"
translate finnish strings:
# renpy/common/_developer/developer.rpym:43
old "Interactive Director (D)"
# Automatic translation.
new "Interaktiivinen johtaja (D)"
# renpy/common/_developer/developer.rpym:51
old "Persistent Viewer"
# Automatic translation.
new "Pysyvä katseluohjelma"
# renpy/common/_developer/developer.rpym:59
old "Show Image Load Log (F4)"
# Automatic translation.
new "Näytä kuvan latausloki (F4)"
# renpy/common/_developer/developer.rpym:62
old "Hide Image Load Log (F4)"
# Automatic translation.
new "Piilota kuvan latausloki (F4)"
# renpy/common/_developer/developer.rpym:65
old "Image Attributes"
# Automatic translation.
new "Kuva-attribuutit"
# renpy/common/_developer/developer.rpym:70
old "Speech Bubble Editor (Shift+B)"
# Automatic translation.
new "Puhekuplaeditori (Shift+B)"
# renpy/common/_developer/developer.rpym:97
old "[name] [attributes] (hidden)"
# Automatic translation.
new "[name] [attributes] (piilotettu)"
# renpy/common/_developer/developer.rpym:101
old "[name] [attributes]"
new "[name] [attributes]"
# renpy/common/_developer/developer.rpym:162
old "Hide deleted"
# Automatic translation.
new "Piilota poistettu"
# renpy/common/_developer/developer.rpym:162
old "Show deleted"
# Automatic translation.
new "Näytä poistettu"
# renpy/common/_developer/developer.rpym:389
old "Type to filter: "
# Automatic translation.
new "Suodatettava tyyppi: "
# renpy/common/_developer/developer.rpym:507
old "Textures: [tex_count] ([tex_size_mb:.1f] MB)"
# Automatic translation.
new "Tekstuurit: [tex_count] ([tex_size_mb:.1f] MB)"
# renpy/common/_developer/developer.rpym:511
old "Image cache: [cache_pct:.1f]% ([cache_size_mb:.1f] MB)"
# Automatic translation.
new "Kuvien välimuisti: [cache_pct:.1f]% ([cache_size_mb:.1f] MB)"
# renpy/common/00console.rpy:789
old "help: show this help\n help <expr>: show signature and documentation of <expr>"
# Automatic translation.
new "help: näytä tämä apu\n help <expr>: näytä <expr>:n allekirjoitus ja dokumentaatio"
# renpy/common/00console.rpy:813
old "Help may display undocumented functions. Please check that the function or\nclass you want to use is documented.\n\n"
# Automatic translation.
new "Ohje saattaa näyttää dokumentoimattomia toimintoja. Tarkista, että toiminto tai\nluokkaa, jota haluat käyttää, on dokumentoitu.\n\n"
# renpy/common/00console.rpy:854
old "stack: print the return stack"
# Automatic translation.
new "stack: tulostaa paluupinon"
# renpy/common/00console.rpy:908
old "watch <expression>: watch a python expression\n watch short: makes the representation of traced expressions short (default)\n watch long: makes the representation of traced expressions as is"
# Automatic translation.
new "watch <expression>: katsella python-lauseketta\n watch short: tekee jäljitettyjen lausekkeiden esityksestä lyhyen (oletusarvo)\n watch long: tekee jäljitettyjen ilmaisujen esittämisen sellaiseksi kuin se on."
# renpy/common/00console.rpy:1028
old "short: Shorten the representation of objects on the console (default)."
# Automatic translation.
new "short: Lyhentää objektien esitystä konsolissa (oletus)."
# renpy/common/00console.rpy:1032
old "long: Print the full representation of objects on the console."
# Automatic translation.
new "long: Tulostaa objektien täydellisen esityksen konsoliin."
# renpy/common/00console.rpy:1036
old "escape: Enables escaping of unicode symbols in unicode strings."
# Automatic translation.
new "escape: Mahdollistaa unicode-symbolien pakenemisen unicode-merkkijonoissa."
# renpy/common/00console.rpy:1040
old "unescape: Disables escaping of unicode symbols in unicode strings and print it as is (default)."
# Automatic translation.
new "unescape: Poistaa unicode-merkkijonojen unicode-symbolien eskandoimisen ja tulostaa ne sellaisenaan (oletus)."
+131 -1
View File
@@ -79,7 +79,7 @@ translate finnish strings:
# 00gltest.rpy:200
old "{b}Note:{/b} Microsoft's DirectX web setup program will, by default, install the Bing toolbar. If you do not want this toolbar, uncheck the appropriate box."
new "{b}Huomaa:{/b} Microsoftin DirectX verkkoasennusohjelma asentaa, oletusarvoisesti, Bing-työkalupalkin. Jos et halua tätä työkalupalkkia, poista valinta oikeasta laatikosta."
new "{b}Huomaa:{/b} Microsoftin DirectX-verkkoasennusohjelma asentaa, oletusarvoisesti, Bing-työkalupalkin. Jos et halua tätä työkalupalkkia, poista valinta oikeasta laatikosta."
# 00gltest.rpy:204
old "When setup finishes, please click below to restart this program."
@@ -177,3 +177,133 @@ translate finnish strings:
old "Copies the errors.txt file to the clipboard."
new "Kopioi errors.txt-tiedoston leikepöydälle."
translate finnish strings:
# renpy/common/00gltest.rpy:89
old "Renderer"
new "Renderer"
# renpy/common/00gltest.rpy:100
old "Force GL Renderer"
new "Force GL Renderer"
# renpy/common/00gltest.rpy:105
old "Force ANGLE Renderer"
new "Force ANGLE Renderer"
# renpy/common/00gltest.rpy:110
old "Force GLES Renderer"
# Automatic translation.
new "Pakota GLES Renderer"
# renpy/common/00gltest.rpy:116
old "Force GL2 Renderer"
# Automatic translation.
new "Pakota GL2 Renderer"
# renpy/common/00gltest.rpy:121
old "Force ANGLE2 Renderer"
# Automatic translation.
new "Voima ANGLE2 Renderer"
# renpy/common/00gltest.rpy:126
old "Force GLES2 Renderer"
# Automatic translation.
new "Pakota GLES2 Renderer"
# renpy/common/00gltest.rpy:136
old "Enable (No Blocklist)"
# Automatic translation.
new "Enable (Ei estolistaa)"
# renpy/common/00gltest.rpy:159
old "Powersave"
new "Powersave"
# renpy/common/00gltest.rpy:173
old "Framerate"
new "Framerate"
# renpy/common/00gltest.rpy:177
old "Screen"
# Automatic translation.
new "Näyttö"
# renpy/common/00gltest.rpy:181
old "60"
new "60"
# renpy/common/00gltest.rpy:185
old "30"
new "30"
# renpy/common/00gltest.rpy:191
old "Tearing"
new "Tearing"
# renpy/common/00gltest.rpy:249
old "This game requires use of GL2 that can't be initialised."
# Automatic translation.
new "Tämä peli vaatii GL2:n käyttöä, jota ei voida alustaa."
# renpy/common/00gltest.rpy:259
old "The {a=edit:1:log.txt}log.txt{/a} file may contain information to help you determine what is wrong with your computer."
# Automatic translation.
new "{a=edit:1:log.txt}log.txt{/a} tiedosto voi sisältää tietoja, joiden avulla voit selvittää, mikä tietokoneessa on vikana."
# renpy/common/00gltest.rpy:264
old "More details on how to fix this can be found in the {a=[url]}documentation{/a}."
# Automatic translation.
new "Lisätietoja tämän korjaamisesta löytyy {a=[url]}-dokumentaatiosta{/a}."
# renpy/common/00gltest.rpy:281
old "Change render options"
# Automatic translation.
new "Muuta renderöintivaihtoehtoja"
# renpy/common/00gamepad.rpy:58
old "Press or move the '[control!s]' [kind]."
# Automatic translation.
new "Paina tai siirrä '[control!s]' [kind]."
# renpy/common/_errorhandling.rpym:555
old "Open"
# Automatic translation.
new "Avaa"
# renpy/common/_errorhandling.rpym:559
old "Copy BBCode"
# Automatic translation.
new "Kopioi BBCode"
# renpy/common/_errorhandling.rpym:561
old "Copies the traceback.txt file to the clipboard as BBcode for forums like https://lemmasoft.renai.us/."
# Automatic translation.
new "Kopioi traceback.txt-tiedoston leikepöydälle BBkoodina foorumeille, kuten https://lemmasoft.renai.us/."
# renpy/common/_errorhandling.rpym:563
old "Copy Markdown"
# Automatic translation.
new "Kopioi Markdown"
# renpy/common/_errorhandling.rpym:565
old "Copies the traceback.txt file to the clipboard as Markdown for Discord."
# Automatic translation.
new "Kopioi traceback.txt-tiedoston leikepöydälle Markdown-muodossa Discordia varten."
# renpy/common/_errorhandling.rpym:626
old "Ignores the exception, allowing you to continue."
# Automatic translation.
new "Jättää poikkeuksen huomiotta, jolloin voit jatkaa."
# renpy/common/_errorhandling.rpym:637
old "Console"
# Automatic translation.
new "Konsoli"
# renpy/common/_errorhandling.rpym:639
old "Opens a console to allow debugging the problem."
# Automatic translation.
new "Avaa konsolin ongelman vianmääritystä varten."
+170 -102
View File
@@ -3,409 +3,477 @@ translate finnish strings:
# gui.rpy:2
old "## Initialization"
new "## Initialization"
new "## Alustus"
# gui.rpy:5
old "## The init offset statement causes the init code in this file to run before init code in any other file."
new "## The init offset statement causes the init code in this file to run before init code in any other file."
new "## init offset-lause käskee ajamaan tämän tiedoston init-koodin ennen muiden tiedostojen init-koodia."
# gui.rpy:9
old "## Calling gui.init resets the styles to sensible default values, and sets the width and height of the game."
new "## Calling gui.init resets the styles to sensible default values, and sets the width and height of the game."
new "## gui.init-metodin kutsuminen nollaa tyylit järkeviin vakioasetuksiin, sekä asettaa peli-ikkunan leveyden ja korkeuden."
# gui.rpy:21
old "## Colors"
new "## Colors"
new "## Värit"
# gui.rpy:23
old "## The colors of text in the interface."
new "## The colors of text in the interface."
new "## Ikkunan tekstien väritys."
# gui.rpy:25
old "## An accent color used throughout the interface to label and highlight text."
new "## An accent color used throughout the interface to label and highlight text."
new "## Korostusväri tekstin korostamista sekä merkkausta varten."
# gui.rpy:29
old "## The color used for a text button when it is neither selected nor hovered."
new "## The color used for a text button when it is neither selected nor hovered."
new "## Tekstipainikkeen käyttämä väri, kun se ei ole valittuna eikä kursori ole sen päällä."
# gui.rpy:32
old "## The small color is used for small text, which needs to be brighter/darker to achieve the same effect."
new "## The small color is used for small text, which needs to be brighter/darker to achieve the same effect."
new "## Pikkuväriä käytetään pienelle tekstille, jonka tulee olla kirkkaampi tai tummempi erottuakseen."
# gui.rpy:36
old "## The color that is used for buttons and bars that are hovered."
new "## The color that is used for buttons and bars that are hovered."
new "## Painikkeiden käyttämä väri, kun ne ovat valittuja tai kursori on niiden päällä."
# gui.rpy:39
old "## The color used for a text button when it is selected but not focused. A button is selected if it is the current screen or preference value."
new "## The color used for a text button when it is selected but not focused. A button is selected if it is the current screen or preference value."
new "## Tekstipainikkeen käyttämä väri, kun se on valittuna mutta ei aktiivisessa ikkunassa."
# gui.rpy:43
old "## The color used for a text button when it cannot be selected."
new "## The color used for a text button when it cannot be selected."
new "## Tekstipainikkeen käyttämä väri, kun se ei ole valittavissa."
# gui.rpy:46
old "## Colors used for the portions of bars that are not filled in. These are not used directly, but are used when re-generating bar image files."
new "## Colors used for the portions of bars that are not filled in. These are not used directly, but are used when re-generating bar image files."
new "## Värit, joita käytetään täyttämättömien palkkien osiin. Näitä ei käytetä suoraan, vaan ainoastaan palkkikuvatiedostojen generoinnissa."
# gui.rpy:51
old "## The colors used for dialogue and menu choice text."
new "## The colors used for dialogue and menu choice text."
new "## Värit, joita käytetään dialogin ja valikoiden tekstissä."
# gui.rpy:56
old "## Fonts and Font Sizes"
new "## Fonts and Font Sizes"
new "## Fontit sekä fonttikoot"
# gui.rpy:58
old "## The font used for in-game text."
new "## The font used for in-game text."
new "## Pelin sisäisen tekstin fontti."
# gui.rpy:61
old "## The font used for character names."
new "## The font used for character names."
new "## Hahmojen nimien fontti."
# gui.rpy:64
old "## The font used for out-of-game text."
new "## The font used for out-of-game text."
new "## Pelin ulkoisen tekstin fontti."
# gui.rpy:67
old "## The size of normal dialogue text."
new "## The size of normal dialogue text."
new "## Normaalin dialogitekstin fonttikoko."
# gui.rpy:70
old "## The size of character names."
new "## The size of character names."
new "## Hahmojen nimien fonttikoko."
# gui.rpy:73
old "## The size of text in the game's user interface."
new "## The size of text in the game's user interface."
new "## Pelin käyttöliittymän tekstin koko."
# gui.rpy:76
old "## The size of labels in the game's user interface."
new "## The size of labels in the game's user interface."
new "## Pelin käyttöliittymän otsikoiden koko."
# gui.rpy:79
old "## The size of text on the notify screen."
new "## The size of text on the notify screen."
new "## Tekstin koko ilmoitusikkunassa."
# gui.rpy:82
old "## The size of the game's title."
new "## The size of the game's title."
new "## Pelin nimen fonttikoko."
# gui.rpy:86
old "## Main and Game Menus"
new "## Main and Game Menus"
new "## Pää- ja pelivalikot"
# gui.rpy:88
old "## The images used for the main and game menus."
new "## The images used for the main and game menus."
new "## Pää- ja pelivalikoiden käyttämät kuvat."
# gui.rpy:92
old "## Should we show the name and version of the game?"
new "## Should we show the name and version of the game?"
new "## Tulisiko meidän näyttää pelin nimi ja versio?"
# gui.rpy:96
old "## Dialogue"
new "## Dialogue"
new "## Dialogi"
# gui.rpy:98
old "## These variables control how dialogue is displayed on the screen one line at a time."
new "## These variables control how dialogue is displayed on the screen one line at a time."
new "## Nämä muuttujat ohjaavat dialogin tulostusta näytölle rivi kerrallaan."
# gui.rpy:101
old "## The height of the textbox containing dialogue."
new "## The height of the textbox containing dialogue."
new "## Dialogi-ikkunan korkeus."
# gui.rpy:104
old "## The placement of the textbox vertically on the screen. 0.0 is the top, 0.5 is center, and 1.0 is the bottom."
new "## The placement of the textbox vertically on the screen. 0.0 is the top, 0.5 is center, and 1.0 is the bottom."
new "## Dialogi-ikkunan sijainti pystytasossa näytöllä. 0.0 on ikkunan yläreuna, 0.5 keskikohta, ja 1.0 alareuna."
# gui.rpy:109
old "## The placement of the speaking character's name, relative to the textbox. These can be a whole number of pixels from the left or top, or 0.5 to center."
new "## The placement of the speaking character's name, relative to the textbox. These can be a whole number of pixels from the left or top, or 0.5 to center."
new "## Puhuvan hahmon nimen sijainti suhteeessa dialogi-ikkunan sijaintiin. Arvot voivat olla pikseleiden määrä kokonaislukuina, tai 0.5 keskikohtana."
# gui.rpy:114
old "## The horizontal alignment of the character's name. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
new "## The horizontal alignment of the character's name. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
new "## Hahmon nimen sijainti vaakatasossa. Arvo voi olla 0.0 vasemmalle reunalle, 0.5 keskitetylle, tai 1.0 oikealle reunalle."
# gui.rpy:118
old "## The width, height, and borders of the box containing the character's name, or None to automatically size it."
new "## The width, height, and borders of the box containing the character's name, or None to automatically size it."
new "## Hahmon nimen sisältävän laatikon leveys, korkeus, ja reunan paksuus. Arvo None päättää koon automaattisesti."
# gui.rpy:123
old "## The borders of the box containing the character's name, in left, top, right, bottom order."
new "## The borders of the box containing the character's name, in left, top, right, bottom order."
new "## Hahmon nimilaatikon reunat, järjestyksessä vasen, ylä, oikea, ja alaosa."
# gui.rpy:127
old "## If True, the background of the namebox will be tiled, if False, the background of the namebox will be scaled."
new "## If True, the background of the namebox will be tiled, if False, the background of the namebox will be scaled."
new "## Arvon ollessa True, nimilaatikon tausta käyttää itseään toistavaa taustakuvaa. Arvon ollessa False, taustakuvan koko skaalautuu."
# gui.rpy:132
old "## The placement of dialogue relative to the textbox. These can be a whole number of pixels relative to the left or top side of the textbox, or 0.5 to center."
new "## The placement of dialogue relative to the textbox. These can be a whole number of pixels relative to the left or top side of the textbox, or 0.5 to center."
new "## Dialogin sijainti suhteessa dialogi-ikkunaan. Arvot voivat olla pikseleiden määrä kokonaislukuina, tai 0.5 keskikohtana."
# gui.rpy:138
old "## The maximum width of dialogue text, in pixels."
new "## The maximum width of dialogue text, in pixels."
new "## Dialogitekstin maksimileveys pikseleinä."
# gui.rpy:141
old "## The horizontal alignment of the dialogue text. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
new "## The horizontal alignment of the dialogue text. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
new "## Dialogin sijainti vaakatasossa. Arvo voi olla 0.0 vasemmalle reunalle, 0.5 keskitetylle, tai 1.0 oikealle reunalle."
# gui.rpy:146
old "## Buttons"
new "## Buttons"
new "## Painikkeet"
# gui.rpy:148
old "## These variables, along with the image files in gui/button, control aspects of how buttons are displayed."
new "## These variables, along with the image files in gui/button, control aspects of how buttons are displayed."
new "## Nämä muuttujat, gui/button-kansiossa olevien kuvatiedostojen ohella, ohjaavat painikkeiden ulkoasua."
# gui.rpy:151
old "## The width and height of a button, in pixels. If None, Ren'Py computes a size."
new "## The width and height of a button, in pixels. If None, Ren'Py computes a size."
new "## Painikkeen leveys ja korkeus, pikseleinä. Arvon ollessa None, Ren'Py laskee sopivan koon."
# gui.rpy:155
old "## The borders on each side of the button, in left, top, right, bottom order."
new "## The borders on each side of the button, in left, top, right, bottom order."
new "## Reunat painikkeen jokaisella sivulla, järjestyksessä vasen, ylä, oikea, ja alareuna."
# gui.rpy:158
old "## If True, the background image will be tiled. If False, the background image will be linearly scaled."
new "## If True, the background image will be tiled. If False, the background image will be linearly scaled."
new "## Arvon ollessa True, painikkeen tausta käyttää itseään toistavaa taustakuvaa. Arvon ollessa False, taustakuvan koko skaalautuu lineaarisesti."
# gui.rpy:162
old "## The font used by the button."
new "## The font used by the button."
new "## Painikkeen käyttämä fontti."
# gui.rpy:165
old "## The size of the text used by the button."
new "## The size of the text used by the button."
new "## Painikkeen käyttämä fonttikoko."
# gui.rpy:179
old "## These variables override settings for different kinds of buttons. Please see the gui documentation for the kinds of buttons available, and what each is used for."
new "## These variables override settings for different kinds of buttons. Please see the gui documentation for the kinds of buttons available, and what each is used for."
new "## Nämä muuttujat yliajavat erilaisten painikkeiden oletusasetuksia. Luethan lisätietoa erilaisista painikkeista sekä niiden käyttötarkoituksista GUI-dokumentaatiosta."
# gui.rpy:183
old "## These customizations are used by the default interface:"
new "## These customizations are used by the default interface:"
new "## Nämä muokkaukset ovat käytössä oletuskäyttöliittymässä:"
# gui.rpy:198
old "## You can also add your own customizations, by adding properly-named variables. For example, you can uncomment the following line to set the width of a navigation button."
new "## You can also add your own customizations, by adding properly-named variables. For example, you can uncomment the following line to set the width of a navigation button."
new "## Voit myös halutessasi lisätä omia muokkauksiasi lisäämällä oikein nimettyjä muuttujia. Voit esimerkiksi ottaa seuraavan rivin pois kommentista asettaaksesi valikkopainikkeen leveyden."
# gui.rpy:205
old "## Choice Buttons"
new "## Choice Buttons"
new "## Valikon Painikkeet"
# gui.rpy:207
old "## Choice buttons are used in the in-game menus."
new "## Choice buttons are used in the in-game menus."
new "## Nämä muuttujat määrittävät pelin sisäisten valikoiden painikkeiden ominaisuuksia."
# gui.rpy:220
old "## File Slot Buttons"
new "## File Slot Buttons"
new "## Tallennuspaikan Painikkeet"
# gui.rpy:222
old "## A file slot button is a special kind of button. It contains a thumbnail image, and text describing the contents of the save slot. A save slot uses image files in gui/button, like the other kinds of buttons."
new "## A file slot button is a special kind of button. It contains a thumbnail image, and text describing the contents of the save slot. A save slot uses image files in gui/button, like the other kinds of buttons."
new "## Tallennuspaikan painike on erityispainike, joka sisältää esikatselukuvan ja tekstiselitteen tallennuspaikan sisällöstä. Tallennuspaikka käyttää kuvatiedostoja gui/button-kansiosta, kuten muutkin painikkeet."
# gui.rpy:226
old "## The save slot button."
new "## The save slot button."
new "## Tallennuspaikan painike."
# gui.rpy:234
old "## The width and height of thumbnails used by the save slots."
new "## The width and height of thumbnails used by the save slots."
new "## Tallennuspaikan käyttämien esikatselukuvien leveys ja korkeus."
# gui.rpy:238
old "## The number of columns and rows in the grid of save slots."
new "## The number of columns and rows in the grid of save slots."
new "## Tallennuspaikkojen ruudukon rivien ja sarakkeiden lukumäärä."
# gui.rpy:243
old "## Positioning and Spacing"
new "## Positioning and Spacing"
new "## Sijainti ja Välit"
# gui.rpy:245
old "## These variables control the positioning and spacing of various user interface elements."
new "## These variables control the positioning and spacing of various user interface elements."
new "## Nämä muuttujat säätelevät erilaisten käyttöliittymän komponenttien sijaintia ja väljäyttä."
# gui.rpy:248
old "## The position of the left side of the navigation buttons, relative to the left side of the screen."
new "## The position of the left side of the navigation buttons, relative to the left side of the screen."
new "## Siirtymäpainikkeiden vasemman puolen sijainti suhteessa ikkunan vasempaan reunaan."
# gui.rpy:252
old "## The vertical position of the skip indicator."
new "## The vertical position of the skip indicator."
new "## Sivuutusilmaisimen sijainti pystyakselilla."
# gui.rpy:255
old "## The vertical position of the notify screen."
new "## The vertical position of the notify screen."
new "## Ilmoitusnäytön sijainti pystyakselilla."
# gui.rpy:258
old "## The spacing between menu choices."
new "## The spacing between menu choices."
new "## Valikon vaihtoehtojen välinen tila."
# gui.rpy:261
old "## Buttons in the navigation section of the main and game menus."
new "## Buttons in the navigation section of the main and game menus."
new "## Painikkeiden välinen tila pää- ja pelivalikoissa."
# gui.rpy:264
old "## Controls the amount of spacing between preferences."
new "## Controls the amount of spacing between preferences."
new "## Hallitsee asetusten välistä etäisyyttä."
# gui.rpy:267
old "## Controls the amount of spacing between preference buttons."
new "## Controls the amount of spacing between preference buttons."
new "## Hallitsee asetusten painikkeiden välisiä etäisyyksiä."
# gui.rpy:270
old "## The spacing between file page buttons."
new "## The spacing between file page buttons."
new "## Tyhjä tila tallennussivun painikkeiden välillä."
# gui.rpy:273
old "## The spacing between file slots."
new "## The spacing between file slots."
new "## Tyhjä tila tallennuspaikkojen välillä."
# gui.rpy:277
old "## Frames"
new "## Frames"
new "## Reunat"
# gui.rpy:279
old "## These variables control the look of frames that can contain user interface components when an overlay or window is not present."
new "## These variables control the look of frames that can contain user interface components when an overlay or window is not present."
new "## Nämä muuttujaat säätelevät käyttöliittymän komponentteja ympäröivien reunojen ominaisuuksia, kun varsinaista ikkunaa ei ole."
# gui.rpy:282
old "## Generic frames that are introduced by player code."
new "## Generic frames that are introduced by player code."
new "## Geneeriset reunat, joita koodi voi luoda."
# gui.rpy:285
old "## The frame that is used as part of the confirm screen."
new "## The frame that is used as part of the confirm screen."
new "## Varmistusikkunan käyttämä reuna."
# gui.rpy:288
old "## The frame that is used as part of the skip screen."
new "## The frame that is used as part of the skip screen."
new "## Sivuutusikkunan käyttämä reuna."
# gui.rpy:291
old "## The frame that is used as part of the notify screen."
new "## The frame that is used as part of the notify screen."
new "## Ilmoitusikkunan käyttämä reuna."
# gui.rpy:294
old "## Should frame backgrounds be tiled?"
new "## Should frame backgrounds be tiled?"
new "## Tulisiko kehyksen taustakuvan toistaa itseään?"
# gui.rpy:298
old "## Bars, Scrollbars, and Sliders"
new "## Bars, Scrollbars, and Sliders"
new "## Palkit, Vierityspalkit, ja Liukuvalinnat"
# gui.rpy:300
old "## These control the look and size of bars, scrollbars, and sliders."
new "## These control the look and size of bars, scrollbars, and sliders."
new "## Nämä muokkaavat palkkien, vierityspalkkien, ja liukuvalintojen ulkonäköä sekä kokoa."
# gui.rpy:302
old "## The default GUI only uses sliders and vertical scrollbars. All of the other bars are only used in creator-written code."
new "## The default GUI only uses sliders and vertical scrollbars. All of the other bars are only used in creator-written code."
new "## Oletusarvoinen graafinen käyttöliittymä käyttää vain liukuvalintoja sekä pystysuoria vierityspalkkeja. Kaikkia muita käytetään vain jos projektin koodi niitä erikseen käyttää."
# gui.rpy:305
old "## The height of horizontal bars, scrollbars, and sliders. The width of vertical bars, scrollbars, and sliders."
new "## The height of horizontal bars, scrollbars, and sliders. The width of vertical bars, scrollbars, and sliders."
new "## Palkkien, vierityspalkkien, ja liukuvalintojen korkeus ja leveys."
# gui.rpy:311
old "## True if bar images should be tiled. False if they should be linearly scaled."
new "## True if bar images should be tiled. False if they should be linearly scaled."
new "## Arvon ollessa True, palkit käyttävät itseään toistavia taustakuvia. Arvon ollessa False, taustakuvan koko skaalautuu lineaarisesti."
# gui.rpy:316
old "## Horizontal borders."
new "## Horizontal borders."
new "## Vaakatason reunat."
# gui.rpy:321
old "## Vertical borders."
new "## Vertical borders."
new "## Pystysuorat reunat."
# gui.rpy:326
old "## What to do with unscrollable scrollbars in the gui. \"hide\" hides them, while None shows them."
new "## What to do with unscrollable scrollbars in the gui. \"hide\" hides them, while None shows them."
new "## Päättää, näkyvätkö tyngät vierityspalkit. \"hide\" piilottaa ne, None pitää ne näkyvillä."
# gui.rpy:331
old "## History"
new "## History"
new "## Historia"
# gui.rpy:333
old "## The history screen displays dialogue that the player has already dismissed."
new "## The history screen displays dialogue that the player has already dismissed."
new "## Historia-ikkuna näyttää dialogin, jonka pelaaja on jo lukenut."
# gui.rpy:335
old "## The number of blocks of dialogue history Ren'Py will keep."
new "## The number of blocks of dialogue history Ren'Py will keep."
new "## Määrittää, montako dialogitekstiä Ren'Py pitää muistissaan."
# gui.rpy:338
old "## The height of a history screen entry, or None to make the height variable at the cost of performance."
new "## The height of a history screen entry, or None to make the height variable at the cost of performance."
new "## Historia-näytön yksittäisen dialogin korkeus, tai None jolloin korkeus vaihtelee, lisäten prosessorin rasitusta."
# gui.rpy:342
old "## The position, width, and alignment of the label giving the name of the speaking character."
new "## The position, width, and alignment of the label giving the name of the speaking character."
new "## Puhuvan hahmon nimen sijainti, leveys, ja ryhmäytys."
# gui.rpy:349
old "## The position, width, and alignment of the dialogue text."
new "## The position, width, and alignment of the dialogue text."
new "## Dialogitekstin sijainti, leveys, ja ryhmäytys."
# gui.rpy:356
old "## NVL-Mode"
new "## NVL-Mode"
new "## NVL-Tila"
# gui.rpy:358
old "## The NVL-mode screen displays the dialogue spoken by NVL-mode characters."
new "## The NVL-mode screen displays the dialogue spoken by NVL-mode characters."
new "## NVL-tilan näyttö näyttää NVL-tilan hahmojen dialogin."
# gui.rpy:360
old "## The borders of the background of the NVL-mode background window."
new "## The borders of the background of the NVL-mode background window."
new "## NVL-tilan ikkunan taustan reunat."
# gui.rpy:363
old "## The height of an NVL-mode entry. Set this to None to have the entries dynamically adjust height."
new "## The height of an NVL-mode entry. Set this to None to have the entries dynamically adjust height."
new "## NVL-tilan dialogin korkeus. Asetettaessa arvoon None, korkeus säätyy automaattisesti."
# gui.rpy:367
old "## The spacing between NVL-mode entries when gui.nvl_height is None, and between NVL-mode entries and an NVL-mode menu."
new "## The spacing between NVL-mode entries when gui.nvl_height is None, and between NVL-mode entries and an NVL-mode menu."
new "## Väli NVL-tilan dialogien sekä NVL-tilan valikon välillä, kun gui.nvl_height on None."
# gui.rpy:384
old "## The position, width, and alignment of nvl_thought text (the text said by the nvl_narrator character.)"
new "## The position, width, and alignment of nvl_thought text (the text said by the nvl_narrator character.)"
new "## nvl_thought-tekstin sijainti, leveys, ja ryhmäytys (nvl_narrator-hahmon puhuma teksti.)"
# gui.rpy:391
old "## The position of nvl menu_buttons."
new "## The position of nvl menu_buttons."
new "## NVL-valikon painikkeiden sijainti."
# gui.rpy:403
old "## This increases the size of the quick buttons to make them easier to touch on tablets and phones."
new "## This increases the size of the quick buttons to make them easier to touch on tablets and phones."
new "## Kasvattaa pikavalikon painikkeiden kokoa mobiililaitteilla, tehden niistä helpompia käyttää."
# gui.rpy:409
old "## This changes the size and spacing of various GUI elements to ensure they are easily visible on phones."
new "## This changes the size and spacing of various GUI elements to ensure they are easily visible on phones."
new "## Muuttaa useiden käyttöliittymän elementtien kokoa ja välejä, tehden niistä helpommin erottuvia matkapuhelimilla."
# gui.rpy:413
old "## Font sizes."
new "## Font sizes."
new "## Fonttikoot."
# gui.rpy:421
old "## Adjust the location of the textbox."
new "## Adjust the location of the textbox."
new "## Säädä teksti-ikkunan sijaintia."
# gui.rpy:427
old "## Change the size and spacing of items in the game menu."
new "## Change the size and spacing of items in the game menu."
new "## Mukauta pelivalikon elementtien kokoa ja sijaintia."
# gui.rpy:436
old "## File button layout."
new "## File button layout."
new "## Tallennusvalikon painikkeen asettelu."
# gui.rpy:440
old "## NVL-mode."
new "## NVL-mode."
new "## NVL-tila."
# gui.rpy:456
old "## Quick buttons."
new "## Quick buttons."
new "## Pikavalikko."
translate finnish strings:
# gui/game/gui.rpy:5
old "## The init offset statement causes the initialization statements in this file to run before init statements in any other file."
# Automatic translation.
new "## Init offset -lauseke saa aikaan sen, että tässä tiedostossa olevat alustamislausekkeet suoritetaan ennen minkä tahansa muun tiedoston init-lausekkeita."
# gui/game/gui.rpy:14
old "## Enable checks for invalid or unstable properties in screens or transforms"
# Automatic translation.
new "## Ota käyttöön virheellisten tai epävakaiden ominaisuuksien tarkistukset näytöissä tai muunnoksissa."
# gui/game/gui.rpy:19
old "## GUI Configuration Variables"
# Automatic translation.
new "## GUI-konfiguraatiomuuttujat"
# gui/game/gui.rpy:167
old "## The color of button text in various states."
# Automatic translation.
new "## Painikkeen tekstin väri eri tiloissa."
# gui/game/gui.rpy:173
old "## The horizontal alignment of the button text. (0.0 is left, 0.5 is center, 1.0 is right)."
# Automatic translation.
new "## Painikkeen tekstin vaakasuora kohdistus. (0.0 on vasen, 0.5 on keskellä, 1.0 on oikea)."
# gui/game/gui.rpy:278
old "## The position of the main menu text."
# Automatic translation.
new "## Päävalikon tekstin sijainti."
# gui/game/gui.rpy:287
old "## Generic frames."
# Automatic translation.
new "## Yleiset kehykset."
# gui/game/gui.rpy:307
old "## The default GUI only uses sliders and vertical scrollbars. All of the other bars are only used in creator-written screens."
# Automatic translation.
new "## Oletusarvoinen graafinen käyttöliittymä käyttää vain liukusäätimiä ja pystysuuntaisia vierityspalkkeja. Kaikkia muita palkkeja käytetään vain luojan kirjoittamissa näytöissä."
# gui/game/gui.rpy:368
old "## The maximum number of NVL-mode entries Ren'Py will display. When more entries than this are to be show, the oldest entry will be removed."
# Automatic translation.
new "## NVL-tilan merkintöjen enimmäismäärä, jonka Ren'Py näyttää. Kun näytetään tätä enemmän merkintöjä, vanhin merkintä poistetaan."
# gui/game/gui.rpy:405
old "## Localization"
# Automatic translation.
new "## Lokalisointi"
# gui/game/gui.rpy:407
old "## This controls where a line break is permitted. The default is suitable for most languages. A list of available values can be found at https://www.renpy.org/doc/html/style_properties.html#style-property-language"
# Automatic translation.
new "## Tämä säätää, missä kohtaa rivinvaihto sallitaan. Oletusarvo sopii useimmille kielille. Luettelo käytettävissä olevista arvoista löytyy osoitteesta https://www.renpy.org/doc/html/style_properties.html#style-property-language."
# gui/game/gui.rpy:415
old "## Mobile devices"
# Automatic translation.
new "## Mobiililaitteet"
# gui/game/gui.rpy:446
old "## Change the size and spacing of various things."
# Automatic translation.
new "## Muuta eri asioiden kokoa ja välejä."
File diff suppressed because it is too large Load Diff
+73 -45
View File
@@ -3,119 +3,119 @@ translate finnish strings:
# options.rpy:1
old "## This file contains options that can be changed to customize your game."
new "## This file contains options that can be changed to customize your game."
new "## Tämä tiedosto sisältää asetuksia, joita muokkaamalla voit mukauttaa peliäsi."
# options.rpy:4
old "## Lines beginning with two '#' marks are comments, and you shouldn't uncomment them. Lines beginning with a single '#' mark are commented-out code, and you may want to uncomment them when appropriate."
new "## Lines beginning with two '#' marks are comments, and you shouldn't uncomment them. Lines beginning with a single '#' mark are commented-out code, and you may want to uncomment them when appropriate."
new "## Rivit, jotka alkavat kahdells '#'-merkillä, ovat kommentteja eikä sinun tule muuttaa niitä ohjelmakoodiksi. Rivit, jotka alkavat yhdellä '#'-merkillä, ovat kommentoitua koodia, ja voit halutessasi palauttaa ne ohjelmakoodiksi."
# options.rpy:10
old "## Basics"
new "## Basics"
new "## Perusteet"
# options.rpy:12
old "## A human-readable name of the game. This is used to set the default window title, and shows up in the interface and error reports."
new "## A human-readable name of the game. This is used to set the default window title, and shows up in the interface and error reports."
new "## Ihmisille luettava pelin nimi. Tätä käytetään peli-ikkunan nimen asetuksessa, ja se näkyy pelin ikkunassa sekä virheraporteissa."
# options.rpy:15
old "## The _() surrounding the string marks it as eligible for translation."
new "## The _() surrounding the string marks it as eligible for translation."
new "## _() merkkijonon ympärillä merkitsee sen soveltuvaksi käännöksille."
# options.rpy:17
old "Ren'Py 7 Default GUI"
new "Ren'Py 7 Default GUI"
new "Ren'Py 7 Oletusarvoinen GUI"
# options.rpy:20
old "## Determines if the title given above is shown on the main menu screen. Set this to False to hide the title."
new "## Determines if the title given above is shown on the main menu screen. Set this to False to hide the title."
new "## Päättää, näytetäänkö ylläannettu nimi pelin päävalikossa. Aseta arvoksi False piilottaaksesi nimen."
# options.rpy:26
old "## The version of the game."
new "## The version of the game."
new "## Pelin versio."
# options.rpy:31
old "## Text that is placed on the game's about screen. To insert a blank line between paragraphs, write \\n\\n."
new "## Text that is placed on the game's about screen. To insert a blank line between paragraphs, write \\n\\n."
new "## Teksti, joka näkyy pelin tietoja-ikkunassa. Lisätäksesi tyhjän rivin lauseiden väliin, kirjoita \\n\\n."
# options.rpy:37
old "## A short name for the game used for executables and directories in the built distribution. This must be ASCII-only, and must not contain spaces, colons, or semicolons."
new "## A short name for the game used for executables and directories in the built distribution. This must be ASCII-only, and must not contain spaces, colons, or semicolons."
new "## Lyhyt nimi pelille, jota käytetään kootuille ohjelmatiedostoille sekä kansioille. Nimen on oltava pelkkiä ASCII-merkkejä, eikä se saa sisältää välilyöntejä, pisteitä, eikä puolipisteitä."
# options.rpy:44
old "## Sounds and music"
new "## Sounds and music"
new "## Äänet ja musiikki"
# options.rpy:46
old "## These three variables control which mixers are shown to the player by default. Setting one of these to False will hide the appropriate mixer."
new "## These three variables control which mixers are shown to the player by default. Setting one of these to False will hide the appropriate mixer."
new "## Nämä kolme muuttujaa ohjaavat, mitkä mikserit näytetään pelaajalle oletusarvoisesti. Asettamalla arvoksi False piilottaa kyseisen mikserin."
# options.rpy:55
old "## To allow the user to play a test sound on the sound or voice channel, uncomment a line below and use it to set a sample sound to play."
new "## To allow the user to play a test sound on the sound or voice channel, uncomment a line below and use it to set a sample sound to play."
new "## Mahdollistaaksesi käyttäjän soittaa testiääni äänitehoste- tai puhekanavilla, palauta seuraava kommentti takaisin ohjelmakoodiksi ja käytä sitä valitaksesi sopivan testiäänen."
# options.rpy:62
old "## Uncomment the following line to set an audio file that will be played while the player is at the main menu. This file will continue playing into the game, until it is stopped or another file is played."
new "## Uncomment the following line to set an audio file that will be played while the player is at the main menu. This file will continue playing into the game, until it is stopped or another file is played."
new "## Palauta seuraava rivi takaisin ohjelmakoodiksi valitaksesi äänitiedoston, jota soitetaan pelaajan ollessa päävalikossa. Tämän tiedoston toisto jatkuu pelin alkaessa, kunnes se pysäytetään tai toinen tiedosto alkaa soimaan."
# options.rpy:69
old "## Transitions"
new "## Transitions"
new "## Siirtymät"
# options.rpy:71
old "## These variables set transitions that are used when certain events occur. Each variable should be set to a transition, or None to indicate that no transition should be used."
new "## These variables set transitions that are used when certain events occur. Each variable should be set to a transition, or None to indicate that no transition should be used."
new "## Nämä muuttujat asettavat erilaisia siirtymiä eri tapahhtumien kohdalla. Jokainen muuttuja tulee asettaa johonkin siirtymään, tai None mikäli siirtymää ei haluta käyttää."
# options.rpy:75
old "## Entering or exiting the game menu."
new "## Entering or exiting the game menu."
new "## Pelivalikon avaaminen ja sulkeminen."
# options.rpy:81
old "## A transition that is used after a game has been loaded."
new "## A transition that is used after a game has been loaded."
new "## Siirtymä, jota käytetään kun peli on ladattu."
# options.rpy:86
old "## Used when entering the main menu after the game has ended."
new "## Used when entering the main menu after the game has ended."
new "## Käytetään siirryttäessä päävalikkoon pelin päätyttyä."
# options.rpy:91
old "## A variable to set the transition used when the game starts does not exist. Instead, use a with statement after showing the initial scene."
new "## A variable to set the transition used when the game starts does not exist. Instead, use a with statement after showing the initial scene."
new "## Muuttujaa siirtymän valitsemiseksi pelin alkaessa ei ole olemassa. Sen sijaan, käytä with-väitettä näytettyäsi ensimmäisen kohtauksen."
# options.rpy:96
old "## Window management"
new "## Window management"
new "## Ikkunanhallinta"
# options.rpy:98
old "## This controls when the dialogue window is displayed. If \"show\", it is always displayed. If \"hide\", it is only displayed when dialogue is present. If \"auto\", the window is hidden before scene statements and shown again once dialogue is displayed."
new "## This controls when the dialogue window is displayed. If \"show\", it is always displayed. If \"hide\", it is only displayed when dialogue is present. If \"auto\", the window is hidden before scene statements and shown again once dialogue is displayed."
new "## Tämä muokkaa dialogi-ikkunan näkyvyyttä. Arvon ollessa \"show\", ikkuna on aina näkyvissä. Mikäli se on \"hide\", ikkuna näkyy vain kun on dialogia mitä näyttää. Ja jos se on \"auto\", ikkuna ei ole näkyvissä ennen scene-lauseita ja näytetään kun dialogia on näytettävänä."
# options.rpy:103
old "## After the game has started, this can be changed with the \"window show\", \"window hide\", and \"window auto\" statements."
new "## After the game has started, this can be changed with the \"window show\", \"window hide\", and \"window auto\" statements."
new "## Pelin alettua, tätä voidaan muuttaa \"window show\", \"window hide\", ja \"window auto\" -lauseilla."
# options.rpy:109
old "## Transitions used to show and hide the dialogue window"
new "## Transitions used to show and hide the dialogue window"
new "## Siirtymät, joita käytetään dialogi-ikkunan näytössä ja piilotuksessa"
# options.rpy:115
old "## Preference defaults"
new "## Preference defaults"
new "## Asetusten oletusarvot"
# options.rpy:117
old "## Controls the default text speed. The default, 0, is infinite, while any other number is the number of characters per second to type out."
new "## Controls the default text speed. The default, 0, is infinite, while any other number is the number of characters per second to type out."
new "## Asettaa tekstin näytön oletusnopeuden. Oletusarvo, 0, on ääretön (teksti näkyy välittömästi), kaikki muut positiiviset luvut asettavat näytettyjen merkkien lukumäärän sekunnissa."
# options.rpy:123
old "## The default auto-forward delay. Larger numbers lead to longer waits, with 0 to 30 being the valid range."
new "## The default auto-forward delay. Larger numbers lead to longer waits, with 0 to 30 being the valid range."
new "## Oletusarvoinen automaattisen jatkamisen viive. Suuremmat luvut johtavatt pidempiin viiveisiin, tuetut arvot ovat väliltä 0-30."
# options.rpy:129
old "## Save directory"
new "## Save directory"
new "## Tallennuskansio"
# options.rpy:131
old "## Controls the platform-specific place Ren'Py will place the save files for this game. The save files will be placed in:"
new "## Controls the platform-specific place Ren'Py will place the save files for this game. The save files will be placed in:"
new "## Asettaa alustariippuvaisen sijainnin, johon Ren'Py tallentaa pelitallennukset. Tallennustiedostot tallennetaan kansioon:"
# options.rpy:134
old "## Windows: %APPDATA\\RenPy\\<config.save_directory>"
@@ -131,65 +131,93 @@ translate finnish strings:
# options.rpy:140
old "## This generally should not be changed, and if it is, should always be a literal string, not an expression."
new "## This generally should not be changed, and if it is, should always be a literal string, not an expression."
new "## Tätä ei yleensä kannata muuttaa, ja jos muutetaan, sen tulee aina olla merkkijonoliteraali eikä ekspressio."
# options.rpy:146
old "## Icon ########################################################################'"
new "## Icon ########################################################################'"
new "## Ikoni #######################################################################'"
# options.rpy:148
old "## The icon displayed on the taskbar or dock."
new "## The icon displayed on the taskbar or dock."
new "## Tehtäväpalkissa tai työpöydällä näkyvä ikoni."
# options.rpy:153
old "## Build configuration"
new "## Build configuration"
new "## Jakeluasetukset"
# options.rpy:155
old "## This section controls how Ren'Py turns your project into distribution files."
new "## This section controls how Ren'Py turns your project into distribution files."
new "## Tämä osio ohjaa Ren'Py:n käyttäytymistä pelin jakeluiden kokoamisvaiheessa."
# options.rpy:160
old "## The following functions take file patterns. File patterns are case- insensitive, and matched against the path relative to the base directory, with and without a leading /. If multiple patterns match, the first is used."
new "## The following functions take file patterns. File patterns are case- insensitive, and matched against the path relative to the base directory, with and without a leading /. If multiple patterns match, the first is used."
new "## Seuraavat funktiot vaativat tiedostonimimallin. Mallit ovat kirjasinkokoriippumattomia, ja niitä verrataan projektikansiosta riippuvaisina, joko alkavan /-merkin kanssa tai ilman. Jos useampi malli täsmää, käytetään ensimmäistä sopivaa."
# options.rpy:165
old "## In a pattern:"
new "## In a pattern:"
new "## Mallin syntaksi:"
# options.rpy:167
old "## / is the directory separator."
new "## / is the directory separator."
new "## / on kansioiden erotin."
# options.rpy:169
old "## * matches all characters, except the directory separator."
new "## * matches all characters, except the directory separator."
new "## * täsmää kaikkiin merkkeihin, paitsi kansion erottimeen."
# options.rpy:171
old "## ** matches all characters, including the directory separator."
new "## ** matches all characters, including the directory separator."
new "## ** täsmää kaikkiin merkkeihin, mukaan lukien kansion erottimeen."
# options.rpy:173
old "## For example, \"*.txt\" matches txt files in the base directory, \"game/**.ogg\" matches ogg files in the game directory or any of its subdirectories, and \"**.psd\" matches psd files anywhere in the project."
new "## For example, \"*.txt\" matches txt files in the base directory, \"game/**.ogg\" matches ogg files in the game directory or any of its subdirectories, and \"**.psd\" matches psd files anywhere in the project."
new "## Esimerkiksi, \"*.txt\" täsmää kaikkiin txt-tiedostoihin projektikansiossa, \"game/**.ogg\" täsmää kaikkiin ogg-tiedostoihin game-kansiossa tai sen alakansioissa, ja \"**.psd\" täsmää kaikkiin, missä tahansa projektissa sijaitseviin psd-tiedostoihin."
# options.rpy:177
old "## Classify files as None to exclude them from the built distributions."
new "## Classify files as None to exclude them from the built distributions."
new "## Luokittele tiedostot arvolla None jättääksesi ne pois kootuista jakeluista."
# options.rpy:185
old "## To archive files, classify them as 'archive'."
new "## To archive files, classify them as 'archive'."
new "## Arkistoidaksesi tiedostoja, luokittele ne arvolla 'archive'."
# options.rpy:190
old "## Files matching documentation patterns are duplicated in a mac app build, so they appear in both the app and the zip file."
new "## Files matching documentation patterns are duplicated in a mac app build, so they appear in both the app and the zip file."
new "## Dokumentaatiotiedostot kloonautuvat mac-sovelluksissa, joten ne sisältyvät sekä sovelluksessa että zip-tiedostossa."
# options.rpy:196
old "## A Google Play license key is required to download expansion files and perform in-app purchases. It can be found on the \"Services & APIs\" page of the Google Play developer console."
new "## A Google Play license key is required to download expansion files and perform in-app purchases. It can be found on the \"Services & APIs\" page of the Google Play developer console."
new "## Google Play -lisenssiavain vaaditaan jotta lisäosatiedostoja ja sovelluksen sisäisiä ostoja voidaan tukea. Sen voi löytää \"Services & APIs\"-sivulta Google Play -kehittäjäkonsolista."
# options.rpy:203
old "## The username and project name associated with an itch.io project, separated by a slash."
new "## The username and project name associated with an itch.io project, separated by a slash."
new "## Kauttaviivan erottama käyttäjänimi ja itch.io-projektinimi."
translate finnish strings:
# gui/game/options.rpy:31
old "## Text that is placed on the game's about screen. Place the text between the triple-quotes, and leave a blank line between paragraphs."
# Automatic translation.
new "## Teksti, joka sijoitetaan pelin about-näyttöön. Sijoita teksti kolmoislauseiden väliin ja jätä kappaleiden väliin tyhjä rivi."
# gui/game/options.rpy:47
old "## These three variables control, among other things, which mixers are shown to the player by default. Setting one of these to False will hide the appropriate mixer."
# Automatic translation.
new "## Nämä kolme muuttujaa säätelevät muun muassa sitä, mitkä mikserit näytetään pelaajalle oletusarvoisesti. Jonkin näistä muuttujista asettaminen Falseen piilottaa kyseisen mikserin."
# gui/game/options.rpy:82
old "## Between screens of the game menu."
# Automatic translation.
new "## Pelivalikon näyttöjen välillä."
# gui/game/options.rpy:152
old "## Icon"
# Automatic translation.
new "## Kuvake"
# gui/game/options.rpy:203
old "## A Google Play license key is required to perform in-app purchases. It can be found in the Google Play developer console, under \"Monetize\" > \"Monetization Setup\" > \"Licensing\"."
# Automatic translation.
new "## Google Play -lisenssiavain tarvitaan sovelluksen sisäisten ostojen tekemiseen. Se löytyy Google Play -kehittäjäkonsolista kohdasta \"Monetize\" > \"Monetization Setup\" > \"Licensing\"."
+260 -127
View File
@@ -3,23 +3,23 @@ translate finnish strings:
# screens.rpy:9
old "## Styles"
new "## Styles"
new "## Tyylit"
# screens.rpy:87
old "## In-game screens"
new "## In-game screens"
new "## Pelinsisäiset näytöt"
# screens.rpy:91
old "## Say screen"
new "## Say screen"
new "## Tulostenäyttö"
# screens.rpy:93
old "## The say screen is used to display dialogue to the player. It takes two parameters, who and what, which are the name of the speaking character and the text to be displayed, respectively. (The who parameter can be None if no name is given.)"
new "## The say screen is used to display dialogue to the player. It takes two parameters, who and what, which are the name of the speaking character and the text to be displayed, respectively. (The who parameter can be None if no name is given.)"
new "## Tulostenäyttöä käytetään dialogin näyttämiseen pelaajalle. Se ottaa kaksi parametriä, who ja what, jotka ovat puhuvan hahmon nimi sekä näytettävä teksti. (who-parametri voi olla None, jos nimeä ei anneta.)"
# screens.rpy:98
old "## This screen must create a text displayable with id \"what\", as Ren'Py uses this to manage text display. It can also create displayables with id \"who\" and id \"window\" to apply style properties."
new "## This screen must create a text displayable with id \"what\", as Ren'Py uses this to manage text display. It can also create displayables with id \"who\" and id \"window\" to apply style properties."
new "## Tämän näytön on luotava tekstiesittäjä käyttäen komentoa id \"what\", sillä Ren'Py käyttää tätä tekstin näytön käsittelyssä. Se voi myös luoda grafiikkaa käyttäen komentoja id \"who\" ja id \"window\" tyyliominaisuuksien lisäämiseksi."
# screens.rpy:102
old "## https://www.renpy.org/doc/html/screen_special.html#say"
@@ -27,15 +27,15 @@ translate finnish strings:
# screens.rpy:169
old "## Input screen"
new "## Input screen"
new "## Syötenäyttö"
# screens.rpy:171
old "## This screen is used to display renpy.input. The prompt parameter is used to pass a text prompt in."
new "## This screen is used to display renpy.input. The prompt parameter is used to pass a text prompt in."
new "## Tätä näyttöä käytetään renpy.input:in renderöinnissä. prompt-parametri antaa kehotetekstin."
# screens.rpy:174
old "## This screen must create an input displayable with id \"input\" to accept the various input parameters."
new "## This screen must create an input displayable with id \"input\" to accept the various input parameters."
new "## Tämän näytön tulee luoda syöttöikkuna käyttäen komentoa id \"input\" voidakseen hyväksyä erilaisia syöteparametrejä."
# screens.rpy:177
old "## http://www.renpy.org/doc/html/screen_special.html#input"
@@ -43,11 +43,11 @@ translate finnish strings:
# screens.rpy:205
old "## Choice screen"
new "## Choice screen"
new "## Valintanäyttö"
# screens.rpy:207
old "## This screen is used to display the in-game choices presented by the menu statement. The one parameter, items, is a list of objects, each with caption and action fields."
new "## This screen is used to display the in-game choices presented by the menu statement. The one parameter, items, is a list of objects, each with caption and action fields."
new "## Tätä näyttöä käytetään esittämään pelinsisäiset menu-lauseen esittämät valinnat. Sen ainoa parametri, items, on lista olioista, joiista jokaisessa on kentät otsikolle ja toiminnolle."
# screens.rpy:211
old "## http://www.renpy.org/doc/html/screen_special.html#choice"
@@ -55,15 +55,15 @@ translate finnish strings:
# screens.rpy:221
old "## When this is true, menu captions will be spoken by the narrator. When false, menu captions will be displayed as empty buttons."
new "## When this is true, menu captions will be spoken by the narrator. When false, menu captions will be displayed as empty buttons."
new "## Tämän ollessa tosi, kertoja puhuu valinnat ääneen. Ja kun epätosi, vaihtoehdot näytetään tyhjinä painikkeina."
# screens.rpy:244
old "## Quick Menu screen"
new "## Quick Menu screen"
new "## Pikavalikkonäyttö"
# screens.rpy:246
old "## The quick menu is displayed in-game to provide easy access to the out-of-game menus."
new "## The quick menu is displayed in-game to provide easy access to the out-of-game menus."
new "## Pikavalikko näytetään pelin aikana, tarjoten helpon pääsyn pelin ulkoisiin valikkoihin."
# screens.rpy:261
old "Back"
@@ -71,11 +71,12 @@ translate finnish strings:
# screens.rpy:262
old "History"
new "History"
new "Historia"
# screens.rpy:263
old "Skip"
new "Skip"
# Automatic translation.
new "Ohita"
# screens.rpy:264
old "Auto"
@@ -83,51 +84,51 @@ translate finnish strings:
# screens.rpy:265
old "Save"
new "Save"
new "Tallenna"
# screens.rpy:266
old "Q.Save"
new "Q.Save"
new "P.Tallenna"
# screens.rpy:267
old "Q.Load"
new "Q.Load"
new "P.Lataa"
# screens.rpy:268
old "Prefs"
new "Prefs"
new "Asetukset"
# screens.rpy:271
old "## This code ensures that the quick_menu screen is displayed in-game, whenever the player has not explicitly hidden the interface."
new "## This code ensures that the quick_menu screen is displayed in-game, whenever the player has not explicitly hidden the interface."
new "## Tämä koodi varmistaa, että quick_menu-näyttö näytetään pelin aikana, aina kun pelaaja ei ole erikseen sitä piilottanut."
# screens.rpy:291
old "## Navigation screen"
new "## Navigation screen"
new "## Siirtymänäyttö"
# screens.rpy:293
old "## This screen is included in the main and game menus, and provides navigation to other menus, and to start the game."
new "## This screen is included in the main and game menus, and provides navigation to other menus, and to start the game."
new "## Tämä näyttö sisältyy pää- ja pelivalikkoon, tarjoten pääsyn muihin valikoihin, sekä pelin aloitukseen."
# screens.rpy:308
old "Start"
new "Start"
new "Aloita"
# screens.rpy:316
old "Load"
new "Load"
new "Lataa"
# screens.rpy:318
old "Preferences"
new "Preferences"
new "Asetukset"
# screens.rpy:322
old "End Replay"
new "End Replay"
new "Päätä Toisto"
# screens.rpy:326
old "Main Menu"
new "Main Menu"
new "Päävalikko"
# screens.rpy:328
old "About"
@@ -135,15 +136,15 @@ translate finnish strings:
# screens.rpy:332
old "## Help isn't necessary or relevant to mobile devices."
new "## Help isn't necessary or relevant to mobile devices."
new "## Ohje ei ole tarpeellinen tai oleellinen mobiililaitteilla."
# screens.rpy:333
old "Help"
new "Help"
new "Ohje"
# screens.rpy:335
old "## The quit button is banned on iOS and unnecessary on Android."
new "## The quit button is banned on iOS and unnecessary on Android."
new "## Poistu-painike on kielletty iOS-laitteilla, ja tarpeeton Android-laitteilla."
# screens.rpy:336
old "Quit"
@@ -151,11 +152,11 @@ translate finnish strings:
# screens.rpy:350
old "## Main Menu screen"
new "## Main Menu screen"
new "## Päävalikkonäkymä"
# screens.rpy:352
old "## Used to display the main menu when Ren'Py starts."
new "## Used to display the main menu when Ren'Py starts."
new "## Käytetään päävalikon näyttämiseksi Ren'Py:n käynnistyessä."
# screens.rpy:354
old "## http://www.renpy.org/doc/html/screen_special.html#main-menu"
@@ -163,19 +164,19 @@ translate finnish strings:
# screens.rpy:369
old "## The use statement includes another screen inside this one. The actual contents of the main menu are in the navigation screen."
new "## The use statement includes another screen inside this one. The actual contents of the main menu are in the navigation screen."
new "## use-komento sisältää toisen näytön. Päävalikon sisältö on todellisuudessa osa siirtymänäyttöä."
# screens.rpy:413
old "## Game Menu screen"
new "## Game Menu screen"
new "## Pelivalikkonäkymä"
# screens.rpy:415
old "## This lays out the basic common structure of a game menu screen. It's called with the screen title, and displays the background, title, and navigation."
new "## This lays out the basic common structure of a game menu screen. It's called with the screen title, and displays the background, title, and navigation."
new "## Tämä esittää pelivalikon perusrakenteen. Sitä kutsutaan näytön nimellä, ja se näyttää taustakuvan, nimen, sekä siirtymävalinnat."
# screens.rpy:418
old "## The scroll parameter can be None, or one of \"viewport\" or \"vpgrid\". When this screen is intended to be used with one or more children, which are transcluded (placed) inside it."
new "## The scroll parameter can be None, or one of \"viewport\" or \"vpgrid\". When this screen is intended to be used with one or more children, which are transcluded (placed) inside it."
new "## scroll-parametri voi olla None, tai vaihtoisesti \"viewport\" tai \"vpgrid\". Tämän näytön sisältäessä yhden tai useamman muun näytön, jotka sijoitetaan sen sisään."
# screens.rpy:476
old "Return"
@@ -183,43 +184,43 @@ translate finnish strings:
# screens.rpy:539
old "## About screen"
new "## About screen"
new "## Tietoja-näyttö"
# screens.rpy:541
old "## This screen gives credit and copyright information about the game and Ren'Py."
new "## This screen gives credit and copyright information about the game and Ren'Py."
new "## Tämä näyttö antaa kehuja kehittäjille, sekä kopio-oikeusinformaatiota pelistä sekä Ren'Py:stä."
# screens.rpy:544
old "## There's nothing special about this screen, and hence it also serves as an example of how to make a custom screen."
new "## There's nothing special about this screen, and hence it also serves as an example of how to make a custom screen."
new "## Tässä näytössä ei ole mitään erityistä, minkä vuoksi se toimii hyvin esimerkkinä itse tehdystä näytöstä."
# screens.rpy:551
old "## This use statement includes the game_menu screen inside this one. The vbox child is then included inside the viewport inside the game_menu screen."
new "## This use statement includes the game_menu screen inside this one. The vbox child is then included inside the viewport inside the game_menu screen."
new "## Tämä use-lause sisältää game_menu-näytön. Sen alainen vbox-ikkuna sisältyy täten näkymään game_menu-näytön kautta."
# screens.rpy:561
old "Version [config.version!t]\n"
new "Version [config.version!t]\n"
new "Versio [config.version!t]\n"
# screens.rpy:563
old "## gui.about is usually set in options.rpy."
new "## gui.about is usually set in options.rpy."
new "## gui.about asetetaan yleensä tiedostossa options.rpy."
# screens.rpy:567
old "Made with {a=https://www.renpy.org/}Ren'Py{/a} [renpy.version_only].\n\n[renpy.license!t]"
new "Made with {a=https://www.renpy.org/}Ren'Py{/a} [renpy.version_only].\n\n[renpy.license!t]"
new "Kehitetty käyttäen ohjelmaa {a=https://www.renpy.org/}Ren'Py{/a} [renpy.version_only].\n\n[renpy.license!t]"
# screens.rpy:570
old "## This is redefined in options.rpy to add text to the about screen."
new "## This is redefined in options.rpy to add text to the about screen."
new "## Tämä on määritelty uudelleen options.rpy-tiedostossa tekstin lisäämiseksi tietoja-näyttöön."
# screens.rpy:582
old "## Load and Save screens"
new "## Load and Save screens"
new "## Lataa ja Tallenna -näytöt"
# screens.rpy:584
old "## These screens are responsible for letting the player save the game and load it again. Since they share nearly everything in common, both are implemented in terms of a third screen, file_slots."
new "## These screens are responsible for letting the player save the game and load it again. Since they share nearly everything in common, both are implemented in terms of a third screen, file_slots."
new "## Nämä näytöt mahdollistavat pelaajan tallentaa pelin edistys ja ladata olemassaolevia tallennuksia. Koska näillä on niin paljon yhteistä, molemmat näytöt on määritelty kolmannen näytön, file_slots, mukaan."
# screens.rpy:588
old "## https://www.renpy.org/doc/html/screen_special.html#save https://www.renpy.org/doc/html/screen_special.html#load"
@@ -239,11 +240,11 @@ translate finnish strings:
# screens.rpy:613
old "## This ensures the input will get the enter event before any of the buttons do."
new "## This ensures the input will get the enter event before any of the buttons do."
new "## Tämä varmistaa, että input saa enter-tapahtuman ennen muita painikkeita."
# screens.rpy:629
old "## The grid of file slots."
new "## The grid of file slots."
new "## Tallennuspaikkojen taulukko."
# screens.rpy:649
old "{#file_time}%A, %B %d %Y, %H:%M"
@@ -251,11 +252,11 @@ translate finnish strings:
# screens.rpy:649
old "empty slot"
new "empty slot"
new "tyhjä paikka"
# screens.rpy:657
old "## Buttons to access other pages."
new "## Buttons to access other pages."
new "## Painikkeita muille sivuille pääsyä varten."
# screens.rpy:666
old "<"
@@ -275,11 +276,11 @@ translate finnish strings:
# screens.rpy:711
old "## Preferences screen"
new "## Preferences screen"
new "## Asetukset-näyttö"
# screens.rpy:713
old "## The preferences screen allows the player to configure the game to better suit themselves."
new "## The preferences screen allows the player to configure the game to better suit themselves."
new "## Asetukset antavat pelaajan säätää pelin grafiikka, toiminnot sekä äänet mieleisekseen."
# screens.rpy:716
old "## https://www.renpy.org/doc/html/screen_special.html#preferences"
@@ -299,7 +300,7 @@ translate finnish strings:
# screens.rpy:744
old "Rollback Side"
new "Rollback Side"
new "Palautussivu"
# screens.rpy:745
old "Disable"
@@ -307,63 +308,63 @@ translate finnish strings:
# screens.rpy:746
old "Left"
new "Left"
new "Vasen"
# screens.rpy:747
old "Right"
new "Right"
new "Oikea"
# screens.rpy:752
old "Unseen Text"
new "Unseen Text"
new "Lukematon Teksti"
# screens.rpy:753
old "After Choices"
new "After Choices"
new "Päätösten Jälkeen"
# screens.rpy:754
old "Transitions"
new "Transitions"
new "Siirtymät"
# screens.rpy:756
old "## Additional vboxes of type \"radio_pref\" or \"check_pref\" can be added here, to add additional creator-defined preferences."
new "## Additional vboxes of type \"radio_pref\" or \"check_pref\" can be added here, to add additional creator-defined preferences."
new "## Ylimääräisiä tyyppien \"radio_pref\" tai \"check_pref\" vboxeja voidaan lisätä tähän, antaen pelaajalle ylimääräisiä kehittäjän luomia asetuksia."
# screens.rpy:767
old "Text Speed"
new "Text Speed"
new "Tekstin Nopeus"
# screens.rpy:771
old "Auto-Forward Time"
new "Auto-Forward Time"
new "Automaattisen Jatkamisen Viive"
# screens.rpy:778
old "Music Volume"
new "Music Volume"
new "Musiikin Äänenvoimakkuus"
# screens.rpy:785
old "Sound Volume"
new "Äänenvoimakkuus"
new "Ääniefektien Äänenvoimakkuus"
# screens.rpy:791
old "Test"
new "Test"
new "Kokeile"
# screens.rpy:795
old "Voice Volume"
new "Voice Volume"
new "Puheen Äänenvoimakkuus"
# screens.rpy:806
old "Mute All"
new "Mute All"
new "Mykistä Kaikki"
# screens.rpy:882
old "## History screen"
new "## History screen"
new "## Historia-näyttö"
# screens.rpy:884
old "## This is a screen that displays the dialogue history to the player. While there isn't anything special about this screen, it does have to access the dialogue history stored in _history_list."
new "## This is a screen that displays the dialogue history to the player. While there isn't anything special about this screen, it does have to access the dialogue history stored in _history_list."
new "## Tämä näyttö näyttää dialogihistorian pelaajalle. Vaikka kyseisessä näytössä ei ole mitään erityistä, sillä on pääsy _history_list:iin tallennettuun dialogihistoriaan."
# screens.rpy:888
old "## https://www.renpy.org/doc/html/history.html"
@@ -371,35 +372,35 @@ translate finnish strings:
# screens.rpy:894
old "## Avoid predicting this screen, as it can be very large."
new "## Avoid predicting this screen, as it can be very large."
new "## Vältä ennustamasta tätä näyttöä, sillä se voi olla hyvin suuri."
# screens.rpy:905
old "## This lays things out properly if history_height is None."
new "## This lays things out properly if history_height is None."
new "## Tämä asettelee dialogin kunnnolla, jos history_height on None."
# screens.rpy:914
old "## Take the color of the who text from the Character, if set."
new "## Take the color of the who text from the Character, if set."
new "## Ota väri hahmon who-tekstistä, jos asetettu."
# screens.rpy:921
old "The dialogue history is empty."
new "The dialogue history is empty."
new "Dialogihistoria on tyhjä."
# screens.rpy:965
old "## Help screen"
new "## Help screen"
new "## Ohje-näyttö"
# screens.rpy:967
old "## A screen that gives information about key and mouse bindings. It uses other screens (keyboard_help, mouse_help, and gamepad_help) to display the actual help."
new "## A screen that gives information about key and mouse bindings. It uses other screens (keyboard_help, mouse_help, and gamepad_help) to display the actual help."
new "## Näyttö, joka tarjoaa tietoa pelin käyttämistä hiiren ja näppäimistön painikkeista sekä niiden toiminnoista. Se käyttää muita näyttöjä (keyboard_help, mouse_help, ja gamepad_help) näyttääkseen itse ohjeet."
# screens.rpy:986
old "Keyboard"
new "Keyboard"
new "Näppäimistö"
# screens.rpy:987
old "Mouse"
new "Mouse"
new "Hiiri"
# screens.rpy:990
old "Gamepad"
@@ -407,35 +408,36 @@ translate finnish strings:
# screens.rpy:1003
old "Enter"
new "Enter"
# Automatic translation.
new "Kirjoita"
# screens.rpy:1004
old "Advances dialogue and activates the interface."
new "Advances dialogue and activates the interface."
new "Jatkaa dialogia ja aktivoi valittuja toimintoja."
# screens.rpy:1007
old "Space"
new "Space"
new "Välilyönti"
# screens.rpy:1008
old "Advances dialogue without selecting choices."
new "Advances dialogue without selecting choices."
new "Jatkaa dialogia tekemättä päätöksiä."
# screens.rpy:1011
old "Arrow Keys"
new "Arrow Keys"
new "Nuolinäppäimet"
# screens.rpy:1012
old "Navigate the interface."
new "Navigate the interface."
new "Liiku käyttöliittymässä."
# screens.rpy:1015
old "Escape"
new "Escape"
new "Esc"
# screens.rpy:1016
old "Accesses the game menu."
new "Accesses the game menu."
new "Avaa ja sulkee pelivalikon."
# screens.rpy:1019
old "Ctrl"
@@ -443,99 +445,100 @@ translate finnish strings:
# screens.rpy:1020
old "Skips dialogue while held down."
new "Skips dialogue while held down."
new "Sivuuttaa dialogin pidettäessä painettuna."
# screens.rpy:1023
old "Tab"
new "Tab"
new "Sarkain"
# screens.rpy:1024
old "Toggles dialogue skipping."
new "Toggles dialogue skipping."
new "Asettaa dialogin sivuutuksen päälle ja pois."
# screens.rpy:1027
old "Page Up"
new "Page Up"
# Automatic translation.
new "Sivu ylös"
# screens.rpy:1028
old "Rolls back to earlier dialogue."
new "Rolls back to earlier dialogue."
new "Siirtyy takaisin aiempaan dialogiin."
# screens.rpy:1031
old "Page Down"
new "Page Down"
new "Siirtyy uudempaan dialogiin."
# screens.rpy:1032
old "Rolls forward to later dialogue."
new "Rolls forward to later dialogue."
new "Vierittää kohti uudempaa dialogia."
# screens.rpy:1036
old "Hides the user interface."
new "Hides the user interface."
new "Piilottaa käyttöliittymän."
# screens.rpy:1040
old "Takes a screenshot."
new "Takes a screenshot."
new "Ottaa näytönkaappauksen."
# screens.rpy:1044
old "Toggles assistive {a=https://www.renpy.org/l/voicing}self-voicing{/a}."
new "Toggles assistive {a=https://www.renpy.org/l/voicing}self-voicing{/a}."
new "Asettaa auttavan {a=https://www.renpy.org/l/voicing}TTS-tilan{/a} päälle ja pois."
# screens.rpy:1050
old "Left Click"
new "Left Click"
new "Hiiren Vasen Painike"
# screens.rpy:1054
old "Middle Click"
new "Middle Click"
new "Hiiren Keskipainike"
# screens.rpy:1058
old "Right Click"
new "Right Click"
new "Hiiren Oikea Painike"
# screens.rpy:1062
old "Mouse Wheel Up\nClick Rollback Side"
new "Mouse Wheel Up\nClick Rollback Side"
new "Hiiren Rulla Ylös\nKlikkaa Palautussivua"
# screens.rpy:1066
old "Mouse Wheel Down"
new "Mouse Wheel Down"
new "Hiiren Rulla Alas"
# screens.rpy:1073
old "Right Trigger\nA/Bottom Button"
new "Right Trigger\nA/Bottom Button"
new "Oikea Liipaisin\nA/Alapainike"
# screens.rpy:1074
old "Advance dialogue and activates the interface."
new "Advance dialogue and activates the interface."
new "Jatka dialogia ja aktivoi valittuja toimintoja."
# screens.rpy:1078
old "Roll back to earlier dialogue."
new "Roll back to earlier dialogue."
new "Siirtyy takaisin aiempaan dialogiin."
# screens.rpy:1081
old "Right Shoulder"
new "Right Shoulder"
new "Oikea Olkapainike"
# screens.rpy:1082
old "Roll forward to later dialogue."
new "Roll forward to later dialogue."
new "Vieritä kohti uudempaa dialogia."
# screens.rpy:1085
old "D-Pad, Sticks"
new "D-Pad, Sticks"
new "Ristiohjain, Tikut"
# screens.rpy:1089
old "Start, Guide"
new "Start, Guide"
new "Start, Opas"
# screens.rpy:1090
old "Access the game menu."
new "Access the game menu."
new "Avaa ja sulje pelivalikko."
# screens.rpy:1093
old "Y/Top Button"
new "Y/Top Button"
new "Y/Yläpainike"
# screens.rpy:1096
old "Calibrate"
@@ -543,15 +546,15 @@ translate finnish strings:
# screens.rpy:1124
old "## Additional screens"
new "## Additional screens"
new "## Ylimääräisiä näyttöjä"
# screens.rpy:1128
old "## Confirm screen"
new "## Confirm screen"
new "## Vahvistusikkuna"
# screens.rpy:1130
old "## The confirm screen is called when Ren'Py wants to ask the player a yes or no question."
new "## The confirm screen is called when Ren'Py wants to ask the player a yes or no question."
new "## Vahvistusikkunaa käytetään, kun Ren'Py haluaa kysyä pelaajalta kyllä tai ei -kysymyksen."
# screens.rpy:1133
old "## http://www.renpy.org/doc/html/screen_special.html#confirm"
@@ -559,7 +562,7 @@ translate finnish strings:
# screens.rpy:1137
old "## Ensure other screens do not get input while this screen is displayed."
new "## Ensure other screens do not get input while this screen is displayed."
new "## Varmista, etteivät muut näytöt odota syötettä tämän näytön ollessa näkyvillä."
# screens.rpy:1161
old "Yes"
@@ -571,15 +574,15 @@ translate finnish strings:
# screens.rpy:1164
old "## Right-click and escape answer \"no\"."
new "## Right-click and escape answer \"no\"."
new "## Hiiren oikea painike ja Esc antavat vastauksen \"ei\"."
# screens.rpy:1191
old "## Skip indicator screen"
new "## Skip indicator screen"
new "## Sivuutusilmaisin-näyttö"
# screens.rpy:1193
old "## The skip_indicator screen is displayed to indicate that skipping is in progress."
new "## The skip_indicator screen is displayed to indicate that skipping is in progress."
new "## skip_indicator-näyttö on näkyvillä, kun dialogin sivuutuksen tila on käytössä."
# screens.rpy:1196
old "## https://www.renpy.org/doc/html/screen_special.html#skip-indicator"
@@ -587,19 +590,19 @@ translate finnish strings:
# screens.rpy:1208
old "Skipping"
new "Skipping"
new "Sivuutetaan dialogia"
# screens.rpy:1215
old "## This transform is used to blink the arrows one after another."
new "## This transform is used to blink the arrows one after another."
new "## Tätä muutosta käytetään nuolten vilkkumiseen toistensa perään."
# screens.rpy:1247
old "## Notify screen"
new "## Notify screen"
new "## Ilmoitusnäyttö"
# screens.rpy:1249
old "## The notify screen is used to show the player a message. (For example, when the game is quicksaved or a screenshot has been taken.)"
new "## The notify screen is used to show the player a message. (For example, when the game is quicksaved or a screenshot has been taken.)"
new "## Ilmoitusnäyttöä käytetään näyttämään pelaajalle viesti. (Esimerkiksi kun peli on pikatallennettu tai näytönkaappaus on otettu.)"
# screens.rpy:1252
old "## https://www.renpy.org/doc/html/screen_special.html#notify-screen"
@@ -607,11 +610,11 @@ translate finnish strings:
# screens.rpy:1286
old "## NVL screen"
new "## NVL screen"
new "## NVL-näyttö"
# screens.rpy:1288
old "## This screen is used for NVL-mode dialogue and menus."
new "## This screen is used for NVL-mode dialogue and menus."
new "## Tätä näyttöä käytetään NVL-tilan dialogiin ja valikoihin."
# screens.rpy:1290
old "## http://www.renpy.org/doc/html/screen_special.html#nvl"
@@ -619,25 +622,155 @@ translate finnish strings:
# screens.rpy:1301
old "## Displays dialogue in either a vpgrid or the vbox."
new "## Displays dialogue in either a vpgrid or the vbox."
new "## Näyttää dialogin joko vpgridissä tai vboxissa."
# screens.rpy:1314
old "## Displays the menu, if given. The menu may be displayed incorrectly if config.narrator_menu is set to True, as it is above."
new "## Displays the menu, if given. The menu may be displayed incorrectly if config.narrator_menu is set to True, as it is above."
new "## Näyttää valikon, jos annettu. Valikko voi näyttää väärältä mikäli config.narrator_menu on asetettu arvoon True, kuten yllä."
# screens.rpy:1344
old "## This controls the maximum number of NVL-mode entries that can be displayed at once."
new "## This controls the maximum number of NVL-mode entries that can be displayed at once."
new "## Tämä säätää, kuinka mointa NVL-tilan viestiä voidaan maksimissaan näyttää kerralla."
# screens.rpy:1406
old "## Mobile Variants"
new "## Mobile Variants"
new "## Mobiiliversiot"
# screens.rpy:1413
old "## Since a mouse may not be present, we replace the quick menu with a version that uses fewer and bigger buttons that are easier to touch."
new "## Since a mouse may not be present, we replace the quick menu with a version that uses fewer and bigger buttons that are easier to touch."
new "## Koska hiirtä ei välttämättä ole, korvaamme pikavalikon versiolla jossa on vähemmän, ja suurempia painikkeita, joita on helpompi koskea."
# screens.rpy:1429
old "Menu"
new "Menu"
new "Valikko"
translate finnish strings:
# gui/game/screens.rpy:114
old "## If there's a side image, display it above the text. Do not display on the phone variant - there's no room."
# Automatic translation.
new "## Jos sivulla on kuva, näytä se tekstin yläpuolella. Älä näytä puhelinmuunnoksessa - siinä ei ole tilaa."
# gui/game/screens.rpy:120
old "## Make the namebox available for styling through the Character object."
# Automatic translation.
new "## Tee nimilaatikosta muotoiltavissa oleva Character-olio."
# gui/game/screens.rpy:173
old "## https://www.renpy.org/doc/html/screen_special.html#input"
new "## https://www.renpy.org/doc/html/screen_special.html#input"
# gui/game/screens.rpy:206
old "## https://www.renpy.org/doc/html/screen_special.html#choice"
new "## https://www.renpy.org/doc/html/screen_special.html#choice"
# gui/game/screens.rpy:241
old "## Ensure this appears on top of other screens."
# Automatic translation.
new "## Varmista, että tämä näkyy muiden näyttöjen yläpuolella."
# gui/game/screens.rpy:280
old "## Main and Game Menu Screens"
# Automatic translation.
new "## Pää- ja pelivalikon näytöt"
# gui/game/screens.rpy:329
old "## The quit button is banned on iOS and unnecessary on Android and Web."
# Automatic translation.
new "## Lopeta-painike on kielletty iOS:ssä ja tarpeeton Androidissa ja Webissä."
# gui/game/screens.rpy:348
old "## https://www.renpy.org/doc/html/screen_special.html#main-menu"
new "## https://www.renpy.org/doc/html/screen_special.html#main-menu"
# gui/game/screens.rpy:352
old "## This ensures that any other menu screen is replaced."
# Automatic translation.
new "## Näin varmistetaan, että kaikki muut valikkonäytöt korvataan."
# gui/game/screens.rpy:357
old "## This empty frame darkens the main menu."
# Automatic translation.
new "## Tämä tyhjä kehys tummentaa päävalikon."
# gui/game/screens.rpy:429
old "## Reserve space for the navigation section."
# Automatic translation.
new "## Varaa tilaa navigointiosuudelle."
# gui/game/screens.rpy:608
old "## The page name, which can be edited by clicking on a button."
# Automatic translation.
new "## Sivun nimi, jota voidaan muokata napsauttamalla painiketta."
# gui/game/screens.rpy:668
old "## range(1, 10) gives the numbers from 1 to 9."
# Automatic translation.
new "## range(1, 10) antaa numerot 1-9."
# gui/game/screens.rpy:676
old "Upload Sync"
# Automatic translation.
new "Lataa synkronointi"
# gui/game/screens.rpy:680
old "Download Sync"
# Automatic translation.
new "Lataa Sync"
# gui/game/screens.rpy:921
old "## This determines what tags are allowed to be displayed on the history screen."
# Automatic translation.
new "## Tämä määrittää, mitä tunnisteita saa näyttää historiaruudulla."
# gui/game/screens.rpy:1049
old "Opens the accessibility menu."
# Automatic translation.
new "Avaa saavutettavuusvalikon."
# gui/game/screens.rpy:1082
old "Left Trigger\nLeft Shoulder"
# Automatic translation.
new "Vasen liipaisin\nVasen olkapää"
# gui/game/screens.rpy:1139
old "## https://www.renpy.org/doc/html/screen_special.html#confirm"
new "## https://www.renpy.org/doc/html/screen_special.html#confirm"
# gui/game/screens.rpy:1248
old "## We have to use a font that has the BLACK RIGHT-POINTING SMALL TRIANGLE glyph in it."
# Automatic translation.
new "## Meidän on käytettävä fonttia, jossa on BLACK RIGHT-POINTING SMALL TRIANGLE -lyhenne."
# gui/game/screens.rpy:1296
old "## https://www.renpy.org/doc/html/screen_special.html#nvl"
new "## https://www.renpy.org/doc/html/screen_special.html#nvl"
# gui/game/screens.rpy:1320
old "## Displays the menu, if given. The menu may be displayed incorrectly if config.narrator_menu is set to True."
# Automatic translation.
new "## Näyttää valikon, jos se on annettu. Valikko saatetaan näyttää virheellisesti, jos config.narrator_menu on asetettu arvoon True."
# gui/game/screens.rpy:1410
old "## Bubble screen"
# Automatic translation.
new "## Kupla näyttö"
# gui/game/screens.rpy:1412
old "## The bubble screen is used to display dialogue to the player when using speech bubbles. The bubble screen takes the same parameters as the say screen, must create a displayable with the id of \"what\", and can create displayables with the \"namebox\", \"who\", and \"window\" ids."
# Automatic translation.
new "## Puhekuplaikkunaa käytetään näyttämään dialogi pelaajalle, kun käytetään puhekuplia. Bubble screen ottaa samat parametrit kuin say screen, sen on luotava displayable, jonka id on \"what\", ja se voi luoda displayables, joiden id:t ovat \"namebox\", \"who\" ja \"window\"."
# gui/game/screens.rpy:1417
old "## https://www.renpy.org/doc/html/bubble.html#bubble-screen"
new "## https://www.renpy.org/doc/html/bubble.html#bubble-screen"
translate finnish strings:
# gui/game/screens.rpy:411
old "## The scroll parameter can be None, or one of \"viewport\" or \"vpgrid\". This screen is intended to be used with one or more children, which are transcluded (placed) inside it."
# Automatic translation.
new "## Selausparametri voi olla None tai jokin seuraavista: \"viewport\" tai \"vpgrid\". Tämä ruutu on tarkoitettu käytettäväksi yhden tai useamman lapsen kanssa, jotka siirretään (sijoitetaan) sen sisään."
+154 -16
View File
@@ -1,5 +1,4 @@
translate french strings:
translate french strings:
# 00action_file.rpy:26
old "{#weekday}Monday"
@@ -333,8 +332,6 @@ translate french strings:
old "return"
new "retour"
translate french strings:
# renpy/common/00accessibility.rpy:76
old "Font Override"
new "Forcer la police"
@@ -353,7 +350,7 @@ translate french strings:
# renpy/common/00accessibility.rpy:94
old "Text Size Scaling"
new "Redimensionnement du Texte"
new "Redimensionnement du texte"
# renpy/common/00accessibility.rpy:100
old "Reset"
@@ -361,7 +358,7 @@ translate french strings:
# renpy/common/00accessibility.rpy:105
old "Line Spacing Scaling"
new "Espacement Vertical"
new "Espacement vertical"
# renpy/common/00accessibility.rpy:117
old "Self-Voicing"
@@ -393,7 +390,7 @@ translate french strings:
# renpy/common/00accessibility.rpy:34
old "viewport"
new "viewport"
new "fenêtre déroulante"
# renpy/common/00accessibility.rpy:35
old "horizontal scroll"
@@ -429,11 +426,11 @@ translate french strings:
# renpy/common/00action_file.rpy:353
old "Save slot %s: [text]"
new "Sauvegarder %s: [text]"
new "Sauvegarder %s : [text]"
# renpy/common/00action_file.rpy:434
old "Load slot %s: [text]"
new "Charger %s: [text]"
new "Charger %s : [text]"
# renpy/common/00action_file.rpy:487
old "Delete slot [text]"
@@ -489,7 +486,7 @@ translate french strings:
# renpy/common/00director.rpy:1561
old "(statement)"
new "(statement)"
new "(instruction)"
# renpy/common/00director.rpy:1562
old "(tag)"
@@ -509,7 +506,8 @@ translate french strings:
# renpy/common/00director.rpy:1601
old "(channel)"
new "(channel)"
# Automatic translation.
new "(canal)"
# renpy/common/00director.rpy:1602
old "(filename)"
@@ -529,7 +527,7 @@ translate french strings:
# renpy/common/00director.rpy:1674
old "Statement:"
new "Statement :"
new "Instruction :"
# renpy/common/00director.rpy:1695
old "Tag:"
@@ -545,7 +543,7 @@ translate french strings:
# renpy/common/00director.rpy:1748
old "Behind:"
new "Sous :"
new "Derrière :"
# renpy/common/00director.rpy:1767
old "Transition:"
@@ -553,7 +551,7 @@ translate french strings:
# renpy/common/00director.rpy:1785
old "Channel:"
new "Channel :"
new "Piste :"
# renpy/common/00director.rpy:1803
old "Audio Filename:"
@@ -733,7 +731,7 @@ translate french strings:
# renpy/common/_developer/developer.rpym:57
old "Show Image Load Log (F4)"
new "Montrer le log ne chargement des images (F4)"
new "Afficher le log de chargement des images (F4)"
# renpy/common/_developer/developer.rpym:60
old "Hide Image Load Log (F4)"
@@ -761,7 +759,7 @@ translate french strings:
# renpy/common/_developer/developer.rpym:506
old "Type to filter: "
new "Type à filtrer : "
new "Écrire pour filtrer : "
# renpy/common/_developer/developer.rpym:631
old "Textures: [tex_count] ([tex_size_mb:.1f] MB)"
@@ -770,3 +768,143 @@ translate french strings:
# renpy/common/_developer/developer.rpym:635
old "Image cache: [cache_pct:.1f]% ([cache_size_mb:.1f] MB)"
new "Cache d'images : [cache_pct:.1f]% ([cache_size_mb:.1f] MB)"
# renpy/common/00preferences.rpy:480
old "renderer menu"
new "menu de rendu"
# renpy/common/00preferences.rpy:483
old "accessibility menu"
new "menu d'accessibilité"
# renpy/common/00accessibility.rpy:180
old "High Contrast Text"
new "Texte en contraste élevé (surbrillance)"
# renpy/common/00preferences.rpy:493
old "high contrast text"
new "texte en contraste élevé"
# renpy/common/00preferences.rpy:511
old "audio when minimized"
new "audio quand minimisé"
# renpy/common/00preferences.rpy:531
old "main volume"
new "volume principal"
# renpy/common/00preferences.rpy:535
old "mute main"
new "sourdine générale"
# renpy/common/00speechbubble.rpy:299
old "Speech Bubble Editor"
new "Éditeur de bulles de dialogue"
# renpy/common/00speechbubble.rpy:304
old "(hide)"
new "(masquer)"
# renpy/common/00director.rpy:1748
old "Click to toggle attribute, right click to toggle negative attribute."
new "Clic pour (dés)activer des attributs, clic droit pour (dés)activer les suppressions d'attributs."
# renpy/common/00director.rpy:1771
old "Click to set transform, right click to add to transform list."
new "Clic pour assigner le transform, clic droit pour ajouter à la liste des transforms."
# renpy/common/00director.rpy:1789
old "Click to set, right click to add to behind list."
new "Clic pour assigner, clic droit pour ajouter à la liste du \"behind\"."
# renpy/common/00preferences.rpy:528
old "audio when unfocused"
new "audio lors de la perte de focus"
# renpy/common/00preferences.rpy:537
old "web cache preload"
new "préchargement du cache web cache"
# renpy/common/00preferences.rpy:552
old "voice after game menu"
new "voix dans le menu de jeu"
# renpy/common/00sync.rpy:58
old "Sync downloaded."
new "Sync téléchargé."
# renpy/common/00sync.rpy:178
old "Could not connect to the Ren'Py Sync server."
new "Échec de la connexion au serveur Ren'Py Sync."
# renpy/common/00sync.rpy:180
old "The Ren'Py Sync server timed out."
new "Le serveur Ren'Py Sync a mis trop de temps à répondre."
# renpy/common/00sync.rpy:182
old "An unknown error occurred while connecting to the Ren'Py Sync server."
new "Une erreur inconnue est arrivée lors de la connexion au serveur Ren'Py Sync."
# renpy/common/00sync.rpy:255
old "The Ren'Py Sync server does not have a copy of this sync. The sync ID may be invalid, or it may have timed out."
new "Le serveur Ren'Py Sync ne reconnaît pas ce code sync. l'ID est peut-être invalide, ou il peut avoir expiré."
# renpy/common/00sync.rpy:397
old "Please enter the sync ID you generated.\nNever enter a sync ID you didn't create yourself."
new "Entrez l'ID sync que vous avez généré.\nN'entrez jamais un ID sync que vous n'avez pas généré vous-même."
# renpy/common/00sync.rpy:416
old "The sync ID is not in the correct format."
new "L'ID sync n'est pas dans un format correct."
# renpy/common/00sync.rpy:436
old "The sync could not be decrypted."
new "Le sync n'a pas pu être déchiffré."
# renpy/common/00sync.rpy:459
old "The sync belongs to a different game."
new "Le sync correspond à un autre jeu."
# renpy/common/00sync.rpy:464
old "The sync contains a file with an invalid name."
new "Le sync contient un fichier ayant un nom invalide."
# renpy/common/00sync.rpy:517
old "This will upload your saves to the {a=https://sync.renpy.org}Ren'Py Sync Server{/a}.\nDo you want to continue?"
new "Vos sauvegardes vont être téléchargées sur le {a=https://sync.renpy.org}serveur Ren'Py Sync{/a}.\nVoulez-vous continuer ?"
# renpy/common/00sync.rpy:546
old "Enter Sync ID"
new "Entrez l'ID Sync"
# renpy/common/00sync.rpy:557
old "This will contact the {a=https://sync.renpy.org}Ren'Py Sync Server{/a}."
new "Ceci va contacter le {a=https://sync.renpy.org}serveur Ren'Py Sync{/a}."
# renpy/common/00sync.rpy:584
old "Sync Success"
new "Sync réussi"
# renpy/common/00sync.rpy:587
old "The Sync ID is:"
new "L'ID Sync est :"
# renpy/common/00sync.rpy:593
old "You can use this ID to download your save on another device.\nThis sync will expire in an hour.\nRen'Py Sync is supported by {a=https://www.renpy.org/sponsors.html}Ren'Py's Sponsors{/a}."
new "Vous pouvez utiliser cet ID pour transférer votre sauvegarde sur un autre appareil.\nCe sync expirera dans une heure.\nRen'Py Sync is soutenu par les {a=https://www.renpy.org/sponsors.html}Sponsors de Ren'Py's{/a}."
# renpy/common/00sync.rpy:619
old "Sync Error"
new "Erreur de Sync"
# renpy/common/00webvideo.rpy:5
old "Touch to play the video."
new "Touchez pour jouer la vidéo."
# renpy/common/00gui.rpy:456
old "This save was created on a different device. Maliciously constructed save files can harm your computer. Do you trust this save's creator and everyone who could have changed the file?"
new "Cette sauvegarde a été créée sur un autre appareil. Des faux fichiers de sauvegarde peuvent être utilisés pour endommager votre ordinateur. Faites-vous confiance au créateur de cette sauvegarde et à tous ceux qui auraient pu modifier le fichier ?"
# renpy/common/00gui.rpy:457
old "Do you trust the device the save was created on? You should only choose yes if you are the device's sole user."
new "Faites-vous confiance à l'appareil sur lequel cette sauvegarde a été créée ? Vous ne devriez dire oui que si vous en êtes l'unique utilisateur ."
+35 -20
View File
@@ -1,5 +1,4 @@
translate french strings:
translate french strings:
# _developer/developer.rpym:38
old "Developer Menu"
@@ -15,7 +14,11 @@ translate french strings:
# _developer/developer.rpym:47
old "Variable Viewer"
new "Visualisateur de variable"
new "Inspecteur de variables"
# renpy/common/_developer/developer.rpym:51
old "Persistent Viewer"
new "Inspecteur de données persistentes"
# _developer/developer.rpym:49
old "Theme Test"
@@ -43,15 +46,15 @@ translate french strings:
# _developer/developer.rpym:217
old "Return to the developer menu"
new "Retourner au menu du développeur"
new "Retourner au menu de développeur"
# _developer/developer.rpym:373
old "Rectangle: %r"
new "Rectangle: %r"
new "Rectangle : %r"
# _developer/developer.rpym:378
old "Mouse position: %r"
new "Mouse position: %r"
new "Position de la souris : %r"
# _developer/developer.rpym:383
old "Right-click or escape to quit."
@@ -75,11 +78,11 @@ translate french strings:
# _developer/developer.rpym:532
old "\n{color=#cfc}✔ predicted image (good){/color}\n{color=#fcc}✘ unpredicted image (bad){/color}\n{color=#fff}Drag to move.{/color}"
new "\n{color=#cfc}✔ image prédite (bon){/color}\n{color=#fcc}✘ image prédite (mauvais){/color}\n{color=#fff}Glissez pour bouger.{/color}"
new "\n{color=#cfc}✔ image prédite (bien){/color}\n{color=#fcc}✘ image non prédite (pas bien){/color}\n{color=#fff}Glissez pour déplacer.{/color}"
# _developer/inspector.rpym:38
old "Displayable Inspector"
new "Inspecteur affichable"
new "Inspecteur de displayables"
# _developer/inspector.rpym:61
old "Size"
@@ -99,11 +102,11 @@ translate french strings:
# _developer/inspector.rpym:139
old "displayable:"
new "affichable :"
new "displayable :"
# _developer/inspector.rpym:145
old " (no properties affect the displayable)"
new " (Aucune propriété naffecte laffichage)"
new " (Aucune propriété ne s'applique au displayable)"
# _developer/inspector.rpym:147
old " (default properties omitted)"
@@ -115,7 +118,7 @@ translate french strings:
# 00console.rpy:182
old "Press <esc> to exit console. Type help for help.\n"
new "Pressez « Echap » pour quitter la console. Pressez « Aide » pour afficher laide.\n"
new "Appuyez sur Échap pour quitter la console. Écrivez help pour afficher laide.\n"
# 00console.rpy:186
old "Ren'Py script enabled."
@@ -125,9 +128,13 @@ translate french strings:
old "Ren'Py script disabled."
new "Script Ren'Py désactivé."
# 00console.rpy:398
old "help: show this help"
new "aide: Afficher cette aide"
# renpy/common/00console.rpy:781
old "help: show this help\n help <expr>: show signature and documentation of <expr>"
new "help : afficher cette aide\n help <expr>: afficher la signature et la documentation de <expr>"
# renpy/common/00console.rpy:805
old "Help may display undocumented functions. Please check that the function or\nclass you want to use is documented.\n\n"
new "Help peut afficher des fonctions non documentées. Veuillez vérifier que la\nfonction ou classe que vous voulez utiliser est bien documentée.\n\n"
# 00console.rpy:403
old "commands:\n"
@@ -135,15 +142,15 @@ translate french strings:
# 00console.rpy:413
old " <renpy script statement>: run the statement\n"
new " <renpy script statement> : Exécuter cette déclaration\n"
new " <renpy script statement> : exécuter cette déclaration\n"
# 00console.rpy:415
old " <python expression or statement>: run the expression or statement"
new " <python expression or statement> : Exécuter cette expression ou cette déclaration"
new " <expression ou instruction python> : exécuter cette expression ou cette instruction"
# 00console.rpy:423
old "clear: clear the console history"
new "clear: Purger lhistorique de la console"
new "clear : effacer lhistorique de la console"
# 00console.rpy:427
old "exit: exit the console"
@@ -159,7 +166,7 @@ translate french strings:
# 00console.rpy:459
old "reload: reloads the game, refreshing the scripts"
new "reload : Recharge le jeu, rafraîchit les scripts"
new "reload : recharge le jeu, rafraîchit les scripts"
# 00console.rpy:467
old "watch <expression>: watch a python expression"
@@ -179,7 +186,7 @@ translate french strings:
# renpy/common/00console.rpy:814
old "watch <expression>: watch a python expression\n watch short: makes the representation of traced expressions short (default)\n watch long: makes the representation of traced expressions as is"
new "watch <expression> : surveille une expression python\n watch short: raccourcit la représentation des expressions (par défaut)\n watch long : affiche la totalité des expressions surveillées"
new "watch <expression> : surveille une expression python\n watch short : raccourcit la représentation des expressions (par défaut)\n watch long : affiche la totalité des expressions surveillées"
# renpy/common/00console.rpy:917
old "short: Shorten the representation of objects on the console (default)."
@@ -195,4 +202,12 @@ translate french strings:
# renpy/common/00console.rpy:929
old "unescape: Disables escaping of unicode symbols in unicode strings and print it as is (default)."
new "unescape : Désacrive l'échappage des symboles unicode dans les chaînes de caractères unicode et les affiche telles quelles (par défaut)."
new "unescape : Désactive l'échappage des symboles unicode dans les chaînes de caractères unicode et les affiche telles quelles (par défaut)."
# renpy/common/00console.rpy:784
old "stack: print the return stack"
new "stack : affiche la pile de retour"
# renpy/common/_developer/developer.rpym:70
old "Speech Bubble Editor (Shift+B)"
new "Éditeur de bulles de dialogue (Shift+B)"
+2 -3
View File
@@ -1,5 +1,4 @@
translate french strings:
translate french strings:
# 00gltest.rpy:64
old "Graphics Acceleration"
@@ -47,7 +46,7 @@ translate french strings:
# 00gltest.rpy:152
old "This computer has a problem displaying graphics: [problem]."
new "Cet ordinateur rencontre un problème pour afficher les graphismes: [problem]."
new "Cet ordinateur rencontre un problème pour afficher les graphismes : [problem]."
# 00gltest.rpy:157
old "Its graphics drivers may be out of date or not operating correctly. This can lead to slow or incorrect graphics display. Updating DirectX could fix this problem."
+5 -2
View File
@@ -1,5 +1,4 @@
translate french strings:
translate french strings:
# gui.rpy:2
old "## Initialization"
@@ -456,3 +455,7 @@ translate french strings:
# gui/game/gui.rpy:441
old "## Change the size and spacing of various things."
new "## Changer la taille et l'espacement de diverses choses."
# gui/game/gui.rpy:14
old "## Enable checks for invalid or unstable properties in screens or transforms"
new "## Active la vérification de propriétés invalides ou instables dans les screens et transforms"
+461 -46
View File
@@ -1,5 +1,7 @@
translate french strings:
translate french strings:
# game/new_project.rpy:77
old "{#language name and font}"
new "{font=fonts/Roboto-Light.ttf}Français{/font}"
# about.rpy:39
old "[version!q]"
@@ -39,7 +41,7 @@ translate french strings:
# android.rpy:32
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 compiler les paquets Android. Choisissez « installer le kit de développement et créer les clés » pour cela."
new "RAPT a été installé, mais vous devez installer le kit de développement Android pour pouvoir compiler les paquets Android, avec « Installer le SDK »."
# android.rpy:33
old "RAPT has been installed, but a key hasn't been configured. Please create a new key, or restore android.keystore."
@@ -63,11 +65,11 @@ translate french strings:
# 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 "Tentative d’émulation d'une console télé basée sur Android, comme OUYA ou Fire TV.\n\n Le contrôleur est émulé par les touches fléchées, le bouton select par la touche Entrée, le bouton menu par la touche Echap, et le bouton retour par la touche PageUp."
new "Tentative d’émulation d'une console télé basée sur Android, comme OUYA ou Fire TV.\n\nLa manette est émulée par les touches fléchées, le bouton select par la touche Entrée, le bouton menu par la touche Echap, et le bouton retour par la touche PageUp."
# android.rpy:41
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."
new "Télécharge et installe le kit de développement Android et les paquets requis. Optionnellement, génère les clés requises pour signer le paquet."
# android.rpy:42
old "Configures the package name, version, and other information about this project."
@@ -107,7 +109,7 @@ translate french strings:
# android.rpy:304
old "Android: [project.current.name!q]"
new "Android: [project.current.name!q]"
new "Android : [project.current.name!q]"
# android.rpy:324
old "Emulation:"
@@ -207,7 +209,8 @@ translate french strings:
# choose_theme.rpy:370
old "Planetarium"
new "Planetarium"
# Automatic translation.
new "Planétarium"
# choose_theme.rpy:425
old "Choose Theme"
@@ -307,7 +310,7 @@ translate french strings:
# distribute_gui.rpy:194
old "Add from clauses to calls, once"
new "Add from clauses to calls, once"
new "Ajouter des \"from\" aux \"call\""
# distribute_gui.rpy:195
old "Refresh"
@@ -315,7 +318,7 @@ translate french strings:
# distribute_gui.rpy:199
old "Upload to itch.io"
new "Télécharger (upload) sur itch.io"
new "Uploader sur itch.io"
# distribute_gui.rpy:215
old "Build Packages:"
@@ -331,7 +334,7 @@ translate french strings:
# distribute_gui.rpy:241
old "Add from clauses to calls"
new "Add from clauses to calls"
new "Ajouter des \"from\" aux \"call\""
# distribute_gui.rpy:242
old "Force Recompile"
@@ -343,7 +346,7 @@ translate french strings:
# distribute_gui.rpy:250
old "Adding from clauses to call statements that do not have them."
new "Adding from clauses to call statements that do not have them."
new "Ajout de \"from\" aux \"call\" qui n'en ont pas."
# distribute_gui.rpy:271
old "Errors were detected when running the project. Please ensure the project runs without errors before building distributions."
@@ -411,7 +414,7 @@ translate french strings:
# front_page.rpy:93
old "refresh"
new "rafraichir"
new "rafraîchir"
# front_page.rpy:120
old "+ Create New Project"
@@ -471,7 +474,7 @@ translate french strings:
# front_page.rpy:223
old "Navigate Script"
new "Naviguer dans le script"
new "Parcourir le script"
# front_page.rpy:234
old "Check Script (Lint)"
@@ -562,8 +565,8 @@ translate french strings:
new "Le projet [project_name!q] existe déjà. Choisissez un nom de projet différent."
# gui7.rpy:341
old "What resolution should the project use? Although Ren'Py can scale the window up and down, this is the initial size of the window, the size at which assets should be drawn, and the size at which the assets will be at their sharpest.\n\nThe default of 1280x720 is a reasonable compromise."
new "Quelle résolution souhaitez-vous utiliser pour votre projet ? Même si RenPy peut agrandir ou diminuer les fenêtres et leurs images à l’échelle, il sagit là de l’échelle initiale, la taille à laquelle les composants doivent être dessinés et la taille de fenêtre pour lesquelles ils seront le plus précis.\n\nThe La valeur par défaut (1280x720) semble être un compromis raisonnable."
old "What resolution should the project use? Although Ren'Py can scale the window up and down, this is the initial size of the window, the size at which assets should be drawn, and the size at which the assets will be at their sharpest.\n\nThe default of [default_size[0]]x[default_size[1]] is a reasonable compromise."
new "Quelle résolution souhaitez-vous utiliser pour votre projet ? Même si RenPy peut agrandir ou diminuer les fenêtres et leurs images à l’échelle, il sagit là de l’échelle initiale, la taille à laquelle les composants doivent être dessinés et la taille de fenêtre pour lesquelles ils seront le plus précis.\n\nThe La valeur par défaut ([default_size[0]]x[default_size[1]]) semble être un compromis raisonnable."
# gui7.rpy:389
old "Creating the new project..."
@@ -655,11 +658,11 @@ translate french strings:
# ios.rpy:33
old "Attempts to emulate an iPhone.\n\nTouch input is emulated through the mouse, but only when the button is held down."
new "Tentatives pour émuler un iPhone.\n\nLe contact tactile est émulé via la souris, mais seulement si le bouton est maintenu pressé."
new "Tentative d'émuler un iPhone.\n\nLe contact tactile est émulé via la souris, mais seulement si le bouton est maintenu pressé."
# ios.rpy:34
old "Attempts to emulate an iPad.\n\nTouch input is emulated through the mouse, but only when the button is held down."
new "Tentatives pour émuler un iPad.\n\nLe contact tactile est émulé via la souris, mais seulement si le bouton est maintenu pressé."
new "Tentative d'émuler un iPad.\n\nLe contact tactile est émulé via la souris, mais seulement si le bouton est maintenu pressé."
# ios.rpy:36
old "Selects the directory where Xcode projects will be placed."
@@ -687,7 +690,7 @@ translate french strings:
# ios.rpy:211
old "iOS: [project.current.name!q]"
new "iOS: [project.current.name!q]"
new "iOS : [project.current.name!q]"
# ios.rpy:240
old "iPhone"
@@ -743,7 +746,7 @@ translate french strings:
# itch.rpy:99
old "The butler program was not found."
new "Le programme coordonnateur(butler) n'a pas été trouvé."
new "Le programme butler n'a pas été trouvé."
# itch.rpy:99
old "Please install the itch.io app, which includes butler, and try again."
@@ -887,7 +890,7 @@ translate french strings:
# preferences.rpy:111
old "Text Editor:"
new "Éditeur :"
new "Éditeur de texte :"
# preferences.rpy:117
old "Text editor: [text]"
@@ -895,7 +898,7 @@ translate french strings:
# preferences.rpy:133
old "Update Channel:"
new "Version"
new "Type de version :"
# preferences.rpy:153
old "Navigation Options:"
@@ -923,7 +926,7 @@ translate french strings:
# preferences.rpy:174
old "Show edit file section"
new "Afficher la section d’édition de fichier"
new "Afficher la section d’édition de fichiers"
# preferences.rpy:175
old "Large fonts"
@@ -931,11 +934,11 @@ translate french strings:
# preferences.rpy:178
old "Console output"
new "Sortie console"
new "Console de sortie"
# preferences.rpy:199
old "Open launcher project"
new "Ouvrir le projet lanceur"
new "Ouvrir le projet du lanceur"
# preferences.rpy:213
old "Language:"
@@ -995,7 +998,7 @@ translate french strings:
# translations.rpy:104
old "The language to work with. This should only contain lower-case ASCII characters and underscores."
new "Le langage avec lequel travailler. Cette valeur ne doit contenir que des caractères ASCII en minuscules et des underscores (tiret bas)."
new "Le langage avec lequel travailler. Cette valeur ne doit contenir que des caractères ASCII en minuscules et des underscores."
# translations.rpy:130
old "Generate empty strings for translations"
@@ -1023,7 +1026,7 @@ translate french strings:
# translations.rpy:180
old "Update Default Interface Translations"
new "Met à jour la traduction de l'interface par défaut"
new "Mise à jour de la traduction par défaut de l'interface"
# translations.rpy:200
old "The extract command allows you to extract string translations from an existing project into a temporary file.\n\nThe merge command merges extracted translations into another project."
@@ -1055,11 +1058,11 @@ translate french strings:
# translations.rpy:282
old "Updating default interface translations..."
new "Mise à jour en cours de la traduction de linterface par défaut..."
new "Mise à jour de la traduction par défaut de linterface en cours..."
# translations.rpy:306
old "Extract Dialogue: [project.current.name!q]"
new "Extraire le dialogue : [project.current.name!q]"
new "Extraire les dialogues : [project.current.name!q]"
# translations.rpy:322
old "Format:"
@@ -1067,7 +1070,7 @@ translate french strings:
# translations.rpy:330
old "Tab-delimited Spreadsheet (dialogue.tab)"
new "Feuille de calcul avec pour séparateur des tabulations (dialogue.tab)"
new "Feuille de calcul avec des tabulations comme séparateur (dialogue.tab)"
# translations.rpy:331
old "Dialogue Text Only (dialogue.txt)"
@@ -1075,11 +1078,11 @@ translate french strings:
# translations.rpy:344
old "Strip text tags from the dialogue."
new "Retire les tags (balises) des dialogues."
new "Retire les text tags (balises) des dialogues."
# translations.rpy:345
old "Escape quotes and other special characters."
new "Protège (escape) les apostrophes et les autres caractères spéciaux."
new "Protège (échappe) les apostrophes et les autres caractères spéciaux."
# translations.rpy:346
old "Extract all translatable strings, not just dialogue."
@@ -1099,11 +1102,19 @@ translate french strings:
# updater.rpy:86
old "The update channel controls the version of Ren'Py the updater will download. Please select an update channel:"
new "Le canal de mise à jour détermine la version de RenPy qui sera téléchargée. Sil vous plaît, sélectionnez un canal de mise à jour :"
new "Le canal de mise à jour détermine la version de RenPy qui sera téléchargée. Sélectionnez un canal de mise à jour :"
# updater.rpy:91
old "Release"
new "Version actuelle."
new "Stable"
# game/updater.rpy:64
old "Release (Ren'Py 8, Python 3)"
new "Stable (Ren'Py 8, Python 3)"
# game/updater.rpy:65
old "Release (Ren'Py 7, Python 2)"
new "Stable (Ren'Py 7, Python 2)"
# updater.rpy:97
old "{b}Recommended.{/b} The version of Ren'Py that should be used in all newly-released games."
@@ -1111,7 +1122,15 @@ translate french strings:
# updater.rpy:102
old "Prerelease"
new "Version de test"
new "Pré-stable"
# game/updater.rpy:69
old "Prerelease (Ren'Py 8, Python 3)"
new "Pré-stable (Ren'Py 8, Python 3)"
# game/updater.rpy:70
old "Prerelease (Ren'Py 7, Python 2)"
new "Pré-stable (Ren'Py 7, Python 2)"
# updater.rpy:108
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."
@@ -1127,11 +1146,35 @@ translate french strings:
# updater.rpy:126
old "Nightly"
new "Nightly"
new "Journalière"
# game/updater.rpy:77
old "Nightly (Ren'Py 8, Python 3)"
new "Journalière (Ren'Py 8, Python 3)"
# game/updater.rpy:78
old "Nightly (Ren'Py 7, Python 2)"
new "Journalière (Ren'Py 7, Python 2)"
# updater.rpy:132
old "The bleeding edge of Ren'Py development. This may have the latest features, or might not run at all."
new "Les toutes dernières version de RenPy encore en développement. Vous pouvez alors utiliser les toutes dernières fonctionnalités, mais le logiciel peut également ne pas sexécuter du tout."
new "La toute dernière version de RenPy, encore en développement. Elle peut contenir les toutes dernières fonctionnalités, ou alors ne pas marcher du tout."
# game/updater.rpy:76
old "Nightly Fix"
new "Journalière Corrective"
# game/updater.rpy:77
old "Nightly Fix (Ren'Py 8, Python 3)"
new "Journalière Corrective (Ren'Py 8, Python 3)"
# game/updater.rpy:78
old "Nightly Fix (Ren'Py 7, Python 2)"
new "Journalière Corrective (Ren'Py 7, Python 2)"
# game/updater.rpy:79
old "A nightly build of fixes to the release version of Ren'Py."
new "Une version journalière qui corrige les bugs de la dernière version stable."
# updater.rpy:152
old "An error has occured:"
@@ -1190,16 +1233,16 @@ translate french strings:
new "Le nom de fichier ne peut pas être vide."
# game/android.rpy:31
old "A 64-bit/x64 Java 8 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=https://adoptopenjdk.net/?variant=openjdk8&jvmVariant=hotspot}download and install the JDK{/a}, then restart the Ren'Py launcher."
new "Un kit de développement Java 8 64-bit/x64 est requis pour construire des paquets Android depuis Windows. Le JDK est différent du JRE, donc il est possible d'avoir Java sans avoir le JDK.\n\n{a=https://adoptopenjdk.net/?variant=openjdk8&jvmVariant=hotspot}Téléchargez et installez le JDK{/a}, puis redémarrez Ren'Py."
old "A 64-bit/x64 Java [JDK_REQUIREMENT] 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=https://www.renpy.org/jdk/[JDK_REQUIREMENT]}download and install the JDK{/a}, then restart the Ren'Py launcher."
new "Un kit de développement Java [JDK_REQUIREMENT] 64-bit/x64 est requis pour construire des paquets Android depuis Windows. Le JDK est différent du JRE, donc il est possible d'avoir Java sans avoir le JDK.\n\n{a=https://www.renpy.org/jdk/[JDK_REQUIREMENT]}Téléchargez et installez le JDK{/a}, puis redémarrez Ren'Py."
# game/android.rpy:50
old "Selects the Debug build, which can be accessed through Android Studio. Changing between debug and release builds requires an uninstall from your device."
new "Selectionne le build de Debug, qui peut être atteint depuis Android Studio. Passer d'un build debug à un build release nécessitera une désinstallation sur votre appareil."
new "Selectionne le build de Debug, qui peut être atteint depuis Android Studio. Passer d'un build debug à un build stable nécessitera une désinstallation sur votre appareil."
# game/android.rpy:51
old "Selects the Release build, which can be uploaded to stores. Changing between debug and release builds requires an uninstall from your device."
new "Sélectionne le build de Release, qui peut être posté sur des magasins d'applications. Passer d'un build debug à un build release nécessitera une désinstallation sur votre appareil."
new "Sélectionne le build Stable, qui peut être posté sur des magasins d'applications. Passer d'un build debug à un build stable nécessitera une désinstallation sur votre appareil."
# game/android.rpy:313
old "Android: [project.current.display_name!q]"
@@ -1275,7 +1318,7 @@ translate french strings:
# game/androidstrings.rpy:24
old "What is the name of the package?\n\nThis is usually of the form com.domain.program or com.domain.email.program. It may only contain ASCII letters and dots. It must contain at least one dot."
new "Quel est le nom du package?\n\nIl est généralement de la forme com.domain.program ou com.domain.email.program. Il doit uniquement contenir des lettres ASCII et des points. Il doit contenir au moins un point."
new "Quel est le nom du package ?\n\nIl est généralement de la forme com.domain.program ou com.domain.email.program. Il doit uniquement contenir des lettres ASCII et des points. Il doit contenir au moins un point."
# game/androidstrings.rpy:25
old "The package name may not be empty."
@@ -1547,7 +1590,7 @@ translate french strings:
# game/gui7.rpy:339
old "Custom. The GUI is optimized for a 16:9 aspect ratio."
new "Personnalisé. Le GUI est optimié pour un ratio de cadre 16:9."
new "Personnalisé. Le GUI est optimisé pour un ratio de cadre 16:9."
# game/gui7.rpy:355
old "WIDTH"
@@ -1591,7 +1634,7 @@ translate french strings:
# game/install.rpy:110
old "Install Libraries"
new "Installer les Bibliothèques"
new "Installer des bibliothèques"
# game/install.rpy:125
old "This screen allows you to install libraries that can't be distributed with Ren'Py. Some of these libraries may require you to agree to a third-party license before being used or distributed."
@@ -1611,7 +1654,7 @@ translate french strings:
# game/install.rpy:151
old "Install Steam Support"
new "Installer le upport Steam"
new "Installer le support Steam"
# game/install.rpy:160
old "Before installing Steam support, please make sure you are a {a=https://partner.steamgames.com/}Steam partner{/a}."
@@ -1627,7 +1670,7 @@ translate french strings:
# game/interface.rpy:136
old "Ren'Py Sponsor Information"
new "Information sur les sponsors de Ren'Py Sponsor"
new "Informations sur les sponsors de Ren'Py"
# game/interface.rpy:372
old "opening the log file"
@@ -1655,7 +1698,7 @@ translate french strings:
# game/preferences.rpy:145
old "Reset window size"
new "Réinisialiser la taille de la fenêtre"
new "Réinitialiser la taille de la fenêtre"
# game/preferences.rpy:188
old "Force new tutorial"
@@ -1752,3 +1795,375 @@ translate french strings:
# game/web.rpy:354
old "Before packaging web apps, you'll need to download RenPyWeb, Ren'Py's web support. Would you like to download RenPyWeb now?"
new "Avant l'empaquetage des apps web, vous devrez télécharger RenPyWeb, le support web de Ren'Py. Voulez-vous télécharger RenPyWeb maintenant ?"
# game/preferences.rpy:206
old "Default theme"
new "Thème par défaut"
# game/preferences.rpy:209
old "Custom theme"
new "Thème personnalisé"
# game/web.rpy:330
old "Images and music can be downloaded while playing. A 'progressive_download.txt' file will be created so you can configure this behavior."
new "Les images et la musique peuvent être téléchargées pendant le jeu. Un fichier 'progressive_download.txt' sera créé pour configurer cette fonction."
# game/web.rpy:334
old "Current limitations in the web platform mean that loading large images may cause audio or framerate glitches, and lower performance in general. Movies aren't supported."
new "Les limitations actuelles de la platforme web signifient que le chargement de grandes images peuvent causer des bugs audio ou des saccades. Les objets 'Movies' ne sont pas supportés."
# game/web.rpy:338
old "There are known issues with Safari and other Webkit-based browsers that may prevent games from running."
new "Des bugs connus avec Safari et d'autres navigateurs basés sur Webkit peuvent empêcher des jeux de fonctionner."
# game/android.rpy:38
old "Please select if you want a Play Bundle (for Google Play), or a Universal APK (for sideloading and other app stores)."
new "Faites le choix entre un Play Bundle (pour Google Play), ou un Universal APK (pour d'autres librairies d'applications)."
# game/android.rpy:53
old "Pairs with a device over Wi-Fi, on Android 11+."
new "Appaire un autre appareil par Wi-Fi, sur Android 11+."
# game/android.rpy:54
old "Connects to a device over Wi-Fi, on Android 11+."
new "Se connecte à un appareil par Wi-Fi, sur Android 11+."
# game/android.rpy:56
old "Builds an Android App Bundle (ABB), intended to be uploaded to Google Play. This can include up to 2GB of data."
new "Construit un Android App Bundle (ABB), fait pour être uploadé sur Google Play. Peut inclure jusqu'à 2GB de données."
# game/android.rpy:57
old "Builds a Universal APK package, intended for sideloading and stores other than Google Play. This can include up to 2GB of data."
new "Construit un paquet Universal APK, fait pour d'autres librairies que Google Play. Peut inclure jusqu'à 2GB de données."
# game/android.rpy:384
old "Play Bundle"
new "Play Bundle"
# game/android.rpy:388
old "Universal APK"
new "Universal APK"
# game/android.rpy:445
old "Wi-Fi Debugging Pair"
new "Debug d'appairage Wi-Fi"
# game/android.rpy:449
old "Wi-Fi Debugging Connect"
new "Debug de connexion Wi-Fi"
# game/android.rpy:537
old "Wi-Fi Pairing Code"
new "Code d'appairage Wi-Fi"
# game/android.rpy:537
old "If supported, this can be found in 'Developer options', 'Wireless debugging', 'Pair device with pairing code'."
new "Si supporté, peut être trouvé dans 'Options de développement', 'Débogage sans fil', 'Appairer appareil avec un code'."
# game/android.rpy:544
old "Pairing Host & Port"
new "Hôte d'appairage & Port"
# game/android.rpy:560
old "IP Address & Port"
new "Addresse IP & Port"
# game/android.rpy:560
old "If supported, this can be found in 'Developer options', 'Wireless debugging'."
new "Si supporté, peut être trouvé dans 'Options de développement', 'Débogage sans fil'."
# game/gui7.rpy:311
old "{size=-4}\n\nThis will not overwrite gui/main_menu.png, gui/game_menu.png, and gui/window_icon.png, but will create files that do not exist.{/size}"
new "{size=-4}\n\nCeci ne remplacera pas gui/main_menu.png, gui/game_menu.png, ou gui/window_icon.png, mais créera des fichiers s'ils n'existent pas.{/size}"
# game/ios.rpy:339
old "There are known issues with the iOS simulator on Apple Silicon. Please test on x86_64 or iOS devices."
new "Des erreurs sont rapportées sur le simulateur d'iOS sur Apple Silicon. Préférez des appareils x86_64 ou iOS."
# game/android.rpy:38
old "RAPT has been installed, but a bundle key hasn't been configured. Please create a new key, or restore bundle.keystore."
new "RAPT a été installé, mais aucune clé de paquet n'a été configurée. Créez une nouvelle clé, ou restaurez bundle.keystore."
# game/androidstrings.rpy:16
old "I'm installing the bundle."
new "J'installe le paquet."
# game/androidstrings.rpy:30
old "How much RAM do you want to allocate to Gradle?\n\nThis must be a positive integer number."
new "Combien de RAM voulez-vous allouer à Gradle ?\n\nEntrez un nombre entier positif."
# game/androidstrings.rpy:31
old "The RAM size must contain only numbers."
new "La taille de RAM ne doit contenir que des chiffres."
# game/androidstrings.rpy:55
old "I can create an application signing key for you. This key is required to create Universal APK for sideloading and stores other than Google Play.\n\nDo you want to create a key?"
new "Je paux vous créer une clé de signature d'application. Cette clé est nécessaire pour créer des Universal APK pour des autres stores que Google Play.\n\nVoulez-vous créer une clé ?"
# game/androidstrings.rpy:59
old "I can create a bundle signing key for you. This key is required to build an Android App Bundle (AAB) for upload to Google Play.\n\nDo you want to create a key?"
new "Je peux vous créer une clé de signature de paquets. Cette clé est nécessaire pour construire un Android App Bundle (AAB) pour uploader sur Google Play.\n\nVoulez-vous créer une clé ?"
# game/androidstrings.rpy:60
old "I will create the key in the bundle.keystore file.\n\nYou need to back this file up. If you lose it, you will not be able to upgrade your application.\n\nYou also need to keep the key safe. If evil people get this file, they could make fake versions of your application, and potentially steal your users' data.\n\nWill you make a backup of bundle.keystore, and keep it in a safe place?"
new "Je vais créer la clé dans le fichier bundle.keystore.\n\nVous devez conserver ce fichier. Sans lui, vous ne pourrez plus mettre à jour votre application.\n\nVous devez aussi la garder cachée. Si des malotrus accèdent à ce fichier, ils pourront faire des faussez versions de votre application, et potentiellement voler les données des utilisateurs.\n\nAllez-vous faire une sauvegarde de bundle.keystore, et le garder bien caché ?"
# game/androidstrings.rpy:61
old "Could not create bundle.keystore. Is keytool in your path?"
new "Impossible de créer bundle.keystore. Est-ce que le keytool est dans votre path ?"
# game/preferences.rpy:206
old "Daily check for update"
new "Vérification quotidienne des mises à jour"
# game/android.rpy:55
old "Lists the connected devices."
new "Liste les appareils connectés."
# game/android.rpy:58
old "Disconnects a device connected over Wi-Fi."
new "Déconnecte un appareil connecté via Wi-Fi."
# game/android.rpy:453
old "List Devices"
new "Lister les appareils"
# game/android.rpy:465
old "Wi-Fi Debugging Disconnect"
new "Debug : déconnexion Wi-Fi"
# game/android.rpy:603
old "This can be found in 'List Devices'."
new "Introuvable dans 'Lister les appareils'."
# game/androidstrings.rpy:17
old "Installing the bundle appears to have failed."
new "L'installation du bundle semble avoir échoué."
# game/androidstrings.rpy:19
old "Launching the app appears to have failed."
new "Le lancement de l'app semble avoir échoué."
# game/androidstrings.rpy:44
old "The version of Java on your computer does not appear to be JDK 8, which is the only version supported by the Android SDK. If you need to install JDK 8, you can download it from:\n\n{a=https://adoptium.net/?variant=openjdk8}https://adoptium.net/?variant=openjdk8{/a}\n\nYou can also set the JAVA_HOME environment variable to use a different version of Java."
new "La version de Java présente sur votre ordinateur ne semble pas être JDK 8, qui est la seule version supportée par le SDK Android. Si vous devez installer JDK 8, vous pouvez le télécharger ici :\n\n{a=https://adoptium.net/?variant=openjdk8}https://adoptium.net/?variant=openjdk8{/a}\n\nVous pouvez aussi régler la variable d'environnement JAVA_HOME sur une autre version de Java."
# game/updater.rpy:109
old "• {a=https://www.renpy.org/doc/html/changelog.html}View change log{/a}"
new "• {a=https://www.renpy.org/doc/html/changelog.html}Regarder le changelog{/a}"
# game/updater.rpy:111
old "• {a=https://www.renpy.org/dev-doc/html/changelog.html}View change log{/a}"
new "• {a=https://www.renpy.org/dev-doc/html/changelog.html}Regarder le changelog{/a}"
# game/android.rpy:60
old "Removes Android temporary files."
new "Retirer les fichiers temporaires Android."
# game/android.rpy:472
old "Clean"
new "Nettoyer"
# game/android.rpy:628
old "Cleaning up Android project."
new "Nettoyage du projet Android."
# game/androidstrings.rpy:43
old "I was unable to use javac to compile a test file. If you haven't installed the Java Development Kit yet, please download it from:\n\n{a=https://adoptium.net/?variant=openjdk8}https://adoptium.net/?variant=openjdk8{/a}\n\nThe JDK is different from the JRE, so it's possible you have Java without having the JDK. Please make sure you installed the 'JavaSoft (Oracle) registry keys'.\n\nWithout a working JDK, I can't continue."
new "Impossible d'utiliser javac pour compiler un fichier de test. Si vous n'avez pas installé Java Development Kit, téléchargez-le ici :\n\n{a=https://adoptium.net/?variant=openjdk8}https://adoptium.net/?variant=openjdk8{/a}\n\nLe JDK est différent du JRE, donc il est possible d'avoir Java sans avoir le JDK. Vérifiez que vous avez installé les 'JavaSoft (Oracle) registry keys'.\n\nSans un JDK fonctionnel, je ne peux pas continuer."
# game/androidstrings.rpy:64
old "I've opened the directory containing android.keystore and bundle.keystore. Please back them up, and keep them in a safe place."
new "J'ai ouvert le répertoire contenant android.keystore et bundle.keystore. Sauvegardez-les, et gardez-les dans un endroit sûr."
# game/choose_directory.rpy:67
old "Select Projects Directory"
new "Sélectionner le répertoire des Projets"
# game/distribute.rpy:1674
old "Copying files..."
new "Copie des fichiers..."
# game/distribute_gui.rpy:195
old "Update old-game"
new "Mettre à jour old-game"
# game/editor.rpy:152
old "A modern editor with many extensions including advanced Ren'Py integration."
new "Un éditeur moderne avec beaucoup d'extensions, y compris des intégrations Ren'Py avancées."
# game/editor.rpy:153
old "A modern editor with many extensions including advanced Ren'Py integration.\n{a=jump:reinstall_vscode}Upgrade Visual Studio Code to the latest version.{/a}"
new "Un éditeur moderne avec beaucoup d'extensions, y compris des intégrations Ren'Py avancées.\n{a=jump:reinstall_vscode}Mettez Visual Studio Code à jour.{/a}"
# game/editor.rpy:162
old "Visual Studio Code"
new "Visual Studio Code"
# game/editor.rpy:162
old "Up to 110 MB download required."
new "Jusqu'à 110 Mo nécessaires pour le téléchargement."
# game/editor.rpy:175
old "A modern and approachable text editor."
new "Un éditeur de texte moderne et accessible."
# game/editor.rpy:187
old "Atom"
new "Atom"
# game/editor.rpy:200
old "jEdit"
new "jEdit"
# game/editor.rpy:209
old "Visual Studio Code (System)"
new "Visual Studio Code (Système)"
# game/editor.rpy:209
old "Uses a copy of Visual Studio Code that you have installed outside of Ren'Py. It's recommended you install the language-renpy extension to add support for Ren'Py files."
new "Utilise une copie de Visual Studio Code que vous avez installé en-dehors de Ren'Py. Il est recommandé d'installer l'extension language-renpy pour ajouter la gestion des fichiers Ren'Py."
# game/installer.rpy:10
old "Downloading [extension.download_file]."
new "Téléchargement de [extension.download_file]."
# game/installer.rpy:11
old "Could not download [extension.download_file] from [extension.download_url]:\n{b}[extension.download_error]"
new "Impossible de télécharger [extension.download_file] depuis [extension.download_url] :\n{b}[extension.download_error]"
# game/installer.rpy:12
old "The downloaded file [extension.download_file] from [extension.download_url] is not correct."
new "le fichier [extension.download_file] téléchargé depuis [extension.download_url] est incorrect."
# game/interface.rpy:124
old "[interface.version]"
new "[interface.version]"
# game/preferences.rpy:154
old "Clean temporary files"
new "Nettoyer les fichiers temporaires"
# game/preferences.rpy:256
old "Cleaning temporary files..."
new "Nettoyage des fichiers temporaires..."
# game/project.rpy:280
old "This may be because the project is not writeable."
new "Il est possible que le projet ne soit pas accessible en écriture."
# game/translations.rpy:391
old "Language (or None for the default language):"
new "Langue (or None pour la langue par défaut) :"
# game/web.rpy:344
old "This feature is not supported in Ren'Py 8."
new "Cette fonctionnalité n'est pas supportée dans Ren'Py 8."
# game/web.rpy:344
old "We will restore support in a future release of Ren'Py 8. Until then, please use Ren'Py 7 for web support."
new "La version web sera supportée à nouveau dans une future version de Ren'Py 8. En attendant, utilisez Ren'Py 7 pour des distributions web."
# game/preferences.rpy:104
old "General"
new "Général"
# game/preferences.rpy:105
old "Options"
new "Options"
# game/preferences.rpy:244
old "Launcher Theme:"
new "Thème du lanceur :"
# game/preferences.rpy:254
old "Information about creating a custom theme can be found {a=https://www.renpy.org/doc/html/skins.html}in the Ren'Py Documentation{/a}."
new "Plus d'informations sur comment créer un thème personnalisé se trouvent {a=https://www.renpy.org/doc/html/skins.html}dans la documentation de Ren'Py{/a}."
# game/preferences.rpy:271
old "Install Libraries:"
new "Installer des bibliothèques :"
# game/preferences.rpy:327
old "{#in language font}Welcome! Please choose a language"
new "{font=fonts/Roboto-Light.ttf}Bienvenue ! Choisissez une langue{/font}"
# game/preferences.rpy:327
old "{#in language font}Start using Ren'Py in [lang_name]"
new "{font=fonts/Roboto-Light.ttf}Commencez à utiliser Ren'Py en [lang_name]{/font}"
# game/distribute_gui.rpy:231
old "(DLC)"
new "(DLC)"
# game/project.rpy:46
old "Lint checks your game for potential mistakes, and gives you statistics."
new "Lint vérifie votre jeu pour des erreurs communes, et génère des statistiques."
# game/web.rpy:484
old "Creating package..."
new "Création du package..."
# game/android.rpy:37
old "RAPT has been installed, but a key hasn't been configured. Please generate new keys, or copy android.keystore and bundle.keystore to the base directory."
new "RAPT a été installé, mais aucune clé na été configurée. Veuillez générer de nouvelles clés, ou copier android.keystore and bundle.keystore dans le dossier racine du projet."
# game/android.rpy:44
old "Attempts to emulate a televison-based Android 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 télé basée sur Android.\n\nLa manette est émulée par les touches fléchées, le bouton select par la touche Entrée, le bouton menu par la touche Echap, et le bouton retour par la touche PageUp."
# game/android.rpy:46
old "Downloads and installs the Android SDK and supporting packages."
new "Télécharge et installe le kit de développement Android et les paquets requis."
# game/android.rpy:47
old "Generates the keys required to sign the package."
new "Génère les clés requises pour signer le package."
# game/android.rpy:381
old "Install SDK"
new "Installer le SDK"
# game/android.rpy:385
old "Generate Keys"
new "Générer les clés"
# game/androidstrings.rpy:32
old "How much RAM (in GB) do you want to allocate to Gradle?\nThis must be a positive integer number."
new "Combien de RAM (in GB) voulez-vous allouer à Gradle ?\nEntrez un nombre entier positif."
# game/androidstrings.rpy:33
old "The RAM size must contain only numbers and be positive."
new "La taille de RAM ne doit contenir que des chiffres et être positive."
# game/androidstrings.rpy:63
old "I found an android.keystore file in the rapt directory. Do you want to use this file?"
new "J'ai trouvé un fichier android.keystore dans le dossier \"rapt\". Voulez-vous l'utiliser ?"
# game/androidstrings.rpy:66
old "\n\nSaying 'No' will prevent key creation."
new "\n\nRépondre \"Non\" empêchera la création de clés."
# game/androidstrings.rpy:69
old "I found a bundle.keystore file in the rapt directory. Do you want to use this file?"
new "J'ai trouvé un fichier bundle.keystore dans le dossier \"rapt\". Voulez-vous l'utiliser ?"
# game/choose_directory.rpy:72
old "No directory was selected, but one is required."
new "Un chemin d'accès est nécessaire, mais aucun n'a été fourni."
# game/choose_directory.rpy:80
old "The selected directory does not exist."
new "Le dossier sélectionné n'existe pas."
# game/choose_directory.rpy:82
old "The selected directory is not writable."
new "Le dossier sélectionné n'est pas ouvert en écriture."
# game/distribute.rpy:554
old "This may be derived from build.name and config.version or build.version."
new "Cette variable peut être dérivée de build.name, et de config.version ou build.version."
# game/new_project.rpy:66
old "Warning : you are using Ren'Py 7. It is recommended to start new projects using Ren'Py 8 instead."
new "Attention : vous utilisez Ren'Py 7. Il est recommandé d'utiliser Ren'Py 8 pour de nouveaux projets."
+1 -3
View File
@@ -1,5 +1,4 @@
translate french strings:
translate french strings:
# _layout/classic_joystick_preferences.rpym:94
old "Joystick Mapping"
@@ -24,4 +23,3 @@ translate french strings:
# _compat/gamemenu.rpym:362
old "Next"
new "Suivant"
+7 -8
View File
@@ -1,5 +1,4 @@
translate french strings:
translate french strings:
# options.rpy:1
old "## This file contains options that can be changed to customize your game."
@@ -45,9 +44,9 @@ translate french strings:
old "## Sounds and music"
new "## Sons et musiques"
# options.rpy:46
old "## These three variables control which mixers are shown to the player by default. Setting one of these to False will hide the appropriate mixer."
new "## Ces trois variables contrôlent quels mixeurs sont affichés au joueur par défaut. Configurer lun de ceux-ci à False (Faux) cachera le mixeur concerné."
# gui/game/options.rpy:47
old "## These three variables control, among other things, which mixers are shown to the player by default. Setting one of these to False will hide the appropriate mixer."
new "## Ces trois variables contrôlent, entre autres, quels mixeurs sont affichés au joueur par défaut. Configurer lun de ceux-ci à False (Faux) cachera le mixeur concerné."
# options.rpy:55
old "## To allow the user to play a test sound on the sound or voice channel, uncomment a line below and use it to set a sample sound to play."
@@ -155,7 +154,7 @@ translate french strings:
# options.rpy:165
old "## In a pattern:"
new "## Dans le format:"
new "## Dans le format :"
# options.rpy:167
old "## / is the directory separator."
@@ -186,8 +185,8 @@ translate french strings:
new "## Les fichiers correspondant au format de documentation sont dupliqués pour les compilation sur Mac, c'est pourquoi ils apparaissent deux fois dans larchive zip."
# options.rpy:196
old "## A Google Play license key is required to download expansion files and perform in-app purchases. It can be found on the \"Services & APIs\" page of the Google Play developer console."
new "## Une clé de licence A Google Play est requise pour télécharger les fichiers et permettre les achats dans l'application. Vous pourrez la trouver sur la page « Services & APIs » de la console de développement Google Play."
old "## A Google Play license key is required to perform in-app purchases. It can be found in the Google Play developer console, under \"Monetize\" > \"Monetization Setup\" > \"Licensing\"."
new "## Une clé de licence Google Play est requise pour permettre les achats depuis l'application. Vous pourrez la trouver dans la console de développement Google Play, sous \"Monétiser\" > \"Configuration de la monétisation\" > \"Licences\"."
# options.rpy:203
old "## The username and project name associated with an itch.io project, separated by a slash."
+35 -12
View File
@@ -1,5 +1,4 @@
translate french strings:
translate french strings:
# screens.rpy:9
old "## Styles"
@@ -35,7 +34,7 @@ translate french strings:
# screens.rpy:174
old "## This screen must create an input displayable with id \"input\" to accept the various input parameters."
new "## This screen must create an input displayable with id \"input\" to accept the various input parameters."
new "## Cet écran doit créer une entrée affichable avec l'id \"input\" pour accepter les différents paramètres."
# screens.rpy:177
old "## http://www.renpy.org/doc/html/screen_special.html#input"
@@ -55,7 +54,7 @@ translate french strings:
# screens.rpy:221
old "## When this is true, menu captions will be spoken by the narrator. When false, menu captions will be displayed as empty buttons."
new "## When this is true, menu captions will be spoken by the narrator. When false, menu captions will be displayed as empty buttons."
new "## Lorsque cette option est activée, les sous-titres du menu sont dits par \"narrator\". Si cette valeur est fausse, les légendes du menu seront affichées sous forme de boutons vides."
# screens.rpy:244
old "## Quick Menu screen"
@@ -163,7 +162,7 @@ translate french strings:
# screens.rpy:369
old "## The use statement includes another screen inside this one. The actual contents of the main menu are in the navigation screen."
new "## The use statement includes another screen inside this one. The actual contents of the main menu are in the navigation screen."
new "## L'instruction use inclut un autre écran à l'intérieur de celui-ci. Le vrai contenu du menu principal se trouve dans l'écran \"navigation\"."
# screens.rpy:413
old "## Game Menu screen"
@@ -171,11 +170,11 @@ translate french strings:
# screens.rpy:415
old "## This lays out the basic common structure of a game menu screen. It's called with the screen title, and displays the background, title, and navigation."
new "## This lays out the basic common structure of a game menu screen. It's called with the screen title, and displays the background, title, and navigation."
new "## Ceci présente la structure commune de base d'un écran du menu de jeu. Il est appelé en lui passant le titre de l'écran, et il affiche l'arrière-plan, le titre et la navigation."
# screens.rpy:418
old "## The scroll parameter can be None, or one of \"viewport\" or \"vpgrid\". When this screen is intended to be used with one or more children, which are transcluded (placed) inside it."
new "## The scroll parameter can be None, or one of \"viewport\" or \"vpgrid\". When this screen is intended to be used with one or more children, which are transcluded (placed) inside it."
old "## The scroll parameter can be None, or one of \"viewport\" or \"vpgrid\". This screen is intended to be used with one or more children, which are transcluded (placed) inside it."
new "## Le paramètre de défilement peut être None, ou \"viewport\" ou \"vpgrid\". Cet écran est destiné à être utilisé avec un ou plusieurs enfants, qui sont transclus (placés) à l'intérieur de l'écran."
# screens.rpy:476
old "Return"
@@ -183,7 +182,7 @@ translate french strings:
# screens.rpy:539
old "## About screen"
new "## Écran « À propos... »"
new "## Écran « À propos... »"
# screens.rpy:541
old "## This screen gives credit and copyright information about the game and Ren'Py."
@@ -451,7 +450,7 @@ translate french strings:
# screens.rpy:1024
old "Toggles dialogue skipping."
new "Active ou désactives les «sauts des dialogues»."
new "Active ou désactive les «sauts des dialogues»."
# screens.rpy:1027
old "Page Up"
@@ -622,8 +621,8 @@ translate french strings:
new "## Les dialogues sont affichés soit dans une vpgrid soit dans une vbox."
# screens.rpy:1314
old "## Displays the menu, if given. The menu may be displayed incorrectly if config.narrator_menu is set to True, as it is above."
new "## Si fourni, affiche le menu. Le menu peut safficher de manière incorrecte si config.narrator_menu est initialisé à True, comme cest le cas au-dessus."
old "## Displays the menu, if given. The menu may be displayed incorrectly if config.narrator_menu is set to True."
new "## Si fourni, affiche le menu. Le menu peut safficher de manière incorrecte si config.narrator_menu est initialisé à True."
# screens.rpy:1344
old "## This controls the maximum number of NVL-mode entries that can be displayed at once."
@@ -716,3 +715,27 @@ translate french strings:
# gui/game/screens.rpy:1292
old "## https://www.renpy.org/doc/html/screen_special.html#nvl"
new "## https://www.renpy.org/doc/html/screen_special.html#nvl"
# gui/game/screens.rpy:1049
old "Opens the accessibility menu."
new "Ouvre le menu d'accessibilité."
# gui/game/screens.rpy:1397
old "## Bubble screen"
new "## Screen des bulles"
# gui/game/screens.rpy:1412
old "## The bubble screen is used to display dialogue to the player when using speech bubbles. The bubble screen takes the same parameters as the say screen, must create a displayable with the id of \"what\", and can create displayables with the \"namebox\", \"who\", and \"window\" ids."
new "## Le screen des bulles est utilisé pour afficher des dialogues en utilisant des bulles de dialogue. Ce screen prend les mêmes paramètres que le screen say, doit prévoir un displayable avec l'id \"what\", et peut créer des displayables avec les ids \"namebox\", \"who\", et \"window\"."
# gui/game/screens.rpy:1417
old "## https://www.renpy.org/doc/html/bubble.html#bubble-screen"
new "## https://www.renpy.org/doc/html/bubble.html#bubble-screen"
# gui/game/screens.rpy:676
old "Upload Sync"
new "Uploader Sync"
# gui/game/screens.rpy:680
old "Download Sync"
new "Télécharger Sync"
-3
View File
@@ -1,3 +0,0 @@
translate french python:
gui.FONT_SCALE = .9
+713 -56
View File
@@ -3,71 +3,71 @@ translate german strings:
# 00action_file.rpy:26
old "{#weekday}Monday"
new "{#weekday}Monday"
new "{#weekday}Montag"
# 00action_file.rpy:26
old "{#weekday}Tuesday"
new "{#weekday}Tuesday"
new "{#weekday}Dienstag"
# 00action_file.rpy:26
old "{#weekday}Wednesday"
new "{#weekday}Wednesday"
new "{#weekday}Mittwoch"
# 00action_file.rpy:26
old "{#weekday}Thursday"
new "{#weekday}Thursday"
new "{#weekday}Donnerstag"
# 00action_file.rpy:26
old "{#weekday}Friday"
new "{#weekday}Friday"
new "{#weekday}Freitag"
# 00action_file.rpy:26
old "{#weekday}Saturday"
new "{#weekday}Saturday"
new "{#weekday}Samstag"
# 00action_file.rpy:26
old "{#weekday}Sunday"
new "{#weekday}Sunday"
new "{#weekday}Sonntag"
# 00action_file.rpy:37
old "{#weekday_short}Mon"
new "{#weekday_short}Mon"
new "{#weekday_short}Mo"
# 00action_file.rpy:37
old "{#weekday_short}Tue"
new "{#weekday_short}Tue"
new "{#weekday_short}Di"
# 00action_file.rpy:37
old "{#weekday_short}Wed"
new "{#weekday_short}Wed"
new "{#weekday_short}Mi"
# 00action_file.rpy:37
old "{#weekday_short}Thu"
new "{#weekday_short}Thu"
new "{#weekday_short}Do"
# 00action_file.rpy:37
old "{#weekday_short}Fri"
new "{#weekday_short}Fri"
new "{#weekday_short}Fr"
# 00action_file.rpy:37
old "{#weekday_short}Sat"
new "{#weekday_short}Sat"
new "{#weekday_short}Sa"
# 00action_file.rpy:37
old "{#weekday_short}Sun"
new "{#weekday_short}Sun"
new "{#weekday_short}So"
# 00action_file.rpy:47
old "{#month}January"
new "{#month}January"
new "{#month}Januar"
# 00action_file.rpy:47
old "{#month}February"
new "{#month}February"
new "{#month}Februar"
# 00action_file.rpy:47
old "{#month}March"
new "{#month}March"
new "{#month}März"
# 00action_file.rpy:47
old "{#month}April"
@@ -75,15 +75,15 @@ translate german strings:
# 00action_file.rpy:47
old "{#month}May"
new "{#month}May"
new "{#month}Mai"
# 00action_file.rpy:47
old "{#month}June"
new "{#month}June"
new "{#month}Juni"
# 00action_file.rpy:47
old "{#month}July"
new "{#month}July"
new "{#month}Juli"
# 00action_file.rpy:47
old "{#month}August"
@@ -95,7 +95,7 @@ translate german strings:
# 00action_file.rpy:47
old "{#month}October"
new "{#month}October"
new "{#month}Oktober"
# 00action_file.rpy:47
old "{#month}November"
@@ -103,7 +103,7 @@ translate german strings:
# 00action_file.rpy:47
old "{#month}December"
new "{#month}December"
new "{#month}Dezember"
# 00action_file.rpy:63
old "{#month_short}Jan"
@@ -115,7 +115,7 @@ translate german strings:
# 00action_file.rpy:63
old "{#month_short}Mar"
new "{#month_short}Mar"
new "{#month_short}Mär"
# 00action_file.rpy:63
old "{#month_short}Apr"
@@ -123,7 +123,7 @@ translate german strings:
# 00action_file.rpy:63
old "{#month_short}May"
new "{#month_short}May"
new "{#month_short}Mai"
# 00action_file.rpy:63
old "{#month_short}Jun"
@@ -143,7 +143,7 @@ translate german strings:
# 00action_file.rpy:63
old "{#month_short}Oct"
new "{#month_short}Oct"
new "{#month_short}Okt"
# 00action_file.rpy:63
old "{#month_short}Nov"
@@ -151,7 +151,7 @@ translate german strings:
# 00action_file.rpy:63
old "{#month_short}Dec"
new "{#month_short}Dec"
new "{#month_short}Dez"
# 00action_file.rpy:235
old "%b %d, %H:%M"
@@ -187,19 +187,19 @@ translate german strings:
# 00gui.rpy:233
old "Are you sure you want to end the replay?"
new "Are you sure you want to end the replay?"
new "Sind Sie sicher, dass sie die Szenen-Wiederholung beenden möchten?"
# 00gui.rpy:234
old "Are you sure you want to begin skipping?"
new "Sind Sie sicher, dass Sie vorspulen möchten?"
new "Sind Sie sicher, dass Sie Text überspringen möchten?"
# 00gui.rpy:235
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?"
new "Sind Sie sicher, dass Sie zur nächsten Auswahl springen möchten?"
# 00gui.rpy:236
old "Are you sure you want to skip unseen dialogue to the next choice?"
new "Are you sure you want to skip unseen dialogue to the next choice?"
new "Sind Sie sicher, dass sie ungesehenen Dialog bis zur nächsten Entscheidung überspringen möchten?"
# 00keymap.rpy:250
old "Saved screenshot as %s."
@@ -207,75 +207,78 @@ translate german strings:
# 00library.rpy:142
old "Self-voicing disabled."
new "Self-voicing disabled."
new "Sprachausgabe deaktiviert."
# 00library.rpy:143
old "Clipboard voicing enabled. "
new "Clipboard voicing enabled. "
# Automatic translation.
new "Zwischenablage-Voicing aktiviert. "
# 00library.rpy:144
old "Self-voicing enabled. "
new "Self-voicing enabled. "
new "Sprachausgabe aktiviert. "
# 00library.rpy:179
old "Skip Mode"
new "Vorspulen"
new "Skip-Modus"
# 00library.rpy:262
old "This program contains free software under a number of licenses, including the MIT License and GNU Lesser General Public License. A complete list of software, including links to full source code, can be found {a=https://www.renpy.org/l/license}here{/a}."
new "This program contains free software under a number of licenses, including the MIT License and GNU Lesser General Public License. A complete list of software, including links to full source code, can be found {a=https://www.renpy.org/l/license}here{/a}."
new "Dieses Programm enthält kostenlose Software unter einer Reihe von Lizenzen, einschließlich der MIT License und der GNU Lesser General Public License. Eine vollständige Liste aller Software, inklusive Links zum vollständigen Quellcode, kann {a=https://www.renpy.org/l/license}hier{/a} gefunden werden."
# 00preferences.rpy:422
old "Clipboard voicing enabled. Press 'shift+C' to disable."
new "Clipboard voicing enabled. Press 'shift+C' to disable."
# Automatic translation.
new "Zwischenablage-Voicing aktiviert. Drücken Sie 'Umschalt+C' zum Deaktivieren."
# 00preferences.rpy:424
old "Self-voicing would say \"[renpy.display.tts.last]\". Press 'alt+shift+V' to disable."
new "Self-voicing would say \"[renpy.display.tts.last]\". Press 'alt+shift+V' to disable."
new "Sprachausgabe würde \"[renpy.display.tts.last]\" sagen. Zum deaktivieren 'alt+shift+V' drücken."
# 00preferences.rpy:426
old "Self-voicing enabled. Press 'v' to disable."
new "Self-voicing enabled. Press 'v' to disable."
new "Sprachausgabe aktiviert. Zum deaktivieren 'v' drücken."
# 00iap.rpy:217
old "Contacting App Store\nPlease Wait..."
new "Contacting App Store\nPlease Wait..."
new "Kontaktiert App Store\nBitte warten..."
# 00updater.rpy:367
old "The Ren'Py Updater is not supported on mobile devices."
new "The Ren'Py Updater is not supported on mobile devices."
new "Der Ren'Py Updater wird auf Mobilgeräten nicht unterstützt."
# 00updater.rpy:486
old "An error is being simulated."
new "An error is being simulated."
new "Ein Error wird simuliert."
# 00updater.rpy:662
old "Either this project does not support updating, or the update status file was deleted."
new "Either this project does not support updating, or the update status file was deleted."
new "Entweder unterstützt dieses Projekt keine Updates, oder die Update-Status-Datei wurde gelöscht."
# 00updater.rpy:676
old "This account does not have permission to perform an update."
new "This account does not have permission to perform an update."
new "Dieser Account hat keine Erlaubnis, Updates durchzuführen."
# 00updater.rpy:679
old "This account does not have permission to write the update log."
new "This account does not have permission to write the update log."
new "Dieser Account hat keine Erlaubnis, Update-Logs zu schreiben."
# 00updater.rpy:704
old "Could not verify update signature."
new "Could not verify update signature."
new "Konnte die Update-Signatur nicht verifizieren."
# 00updater.rpy:975
old "The update file was not downloaded."
new "The update file was not downloaded."
new "Die Update-Datei wurde nicht heruntergeladen."
# 00updater.rpy:993
old "The update file does not have the correct digest - it may have been corrupted."
new "The update file does not have the correct digest - it may have been corrupted."
new "Die Update-Datei hat nicht das richtige Format - sie wurde möglicherweise beschädigt."
# 00updater.rpy:1049
old "While unpacking {}, unknown type {}."
new "While unpacking {}, unknown type {}."
# Automatic translation.
new "Beim Auspacken {}, unbekannter Typ {}."
# 00updater.rpy:1393
old "Updater"
@@ -283,7 +286,7 @@ translate german strings:
# 00updater.rpy:1404
old "This program is up to date."
new "Dieses Programm ist aktuell."
new "Dieses Programm ist auf dem neuesten Stand."
# 00updater.rpy:1406
old "[u.version] is available. Do you want to install it?"
@@ -291,27 +294,27 @@ translate german strings:
# 00updater.rpy:1408
old "Preparing to download the updates."
new "Vorbereiten, um die Aktualisierungen herunterzuladen."
new "Bereitet das Herunterladen der Updates vor."
# 00updater.rpy:1410
old "Downloading the updates."
new "Aktualisierungen werden heruntergeladen."
new "Updates werden heruntergeladen."
# 00updater.rpy:1412
old "Unpacking the updates."
new "Aktualisierungen werden entpackt."
new "Updates werden entpackt."
# 00updater.rpy:1416
old "The updates have been installed. The program will restart."
new "Die Aktualisierungen wurden installiert. Das Programm wird nun neustarten."
new "Die Updates wurden installiert. Das Programm wird nun neu gestartet."
# 00updater.rpy:1418
old "The updates have been installed."
new "Die Aktualisierungen wurden installiert."
new "Die Updates wurden installiert."
# 00updater.rpy:1420
old "The updates were cancelled."
new "Die Aktualisierungen wurden abgebrochen."
new "Die Updates wurden abgebrochen."
# 00gallery.rpy:563
old "Image [index] of [count] locked."
@@ -327,9 +330,663 @@ translate german strings:
# 00gallery.rpy:585
old "slideshow"
new "slideshow"
# Automatic translation.
new "Diashow"
# 00gallery.rpy:586
old "return"
new "zurück"
translate german strings:
# renpy/common/00accessibility.rpy:32
old "bar"
new "bar"
# renpy/common/00accessibility.rpy:33
old "selected"
# Automatic translation.
new "ausgewählt"
# renpy/common/00accessibility.rpy:34
old "viewport"
# Automatic translation.
new "Ansichtsfenster"
# renpy/common/00accessibility.rpy:35
old "horizontal scroll"
# Automatic translation.
new "Horizontales Blättern"
# renpy/common/00accessibility.rpy:36
old "vertical scroll"
# Automatic translation.
new "vertikaler Bildlauf"
# renpy/common/00accessibility.rpy:37
old "activate"
# Automatic translation.
new "aktivieren."
# renpy/common/00accessibility.rpy:38
old "deactivate"
# Automatic translation.
new "deaktivieren"
# renpy/common/00accessibility.rpy:39
old "increase"
# Automatic translation.
new "erhöhen."
# renpy/common/00accessibility.rpy:40
old "decrease"
# Automatic translation.
new "verringern"
# renpy/common/00accessibility.rpy:138
old "Font Override"
# Automatic translation.
new "Schriftart überschreiben"
# renpy/common/00accessibility.rpy:142
old "Default"
# Automatic translation.
new "Standard"
# renpy/common/00accessibility.rpy:146
old "DejaVu Sans"
new "DejaVu Sans"
# renpy/common/00accessibility.rpy:150
old "Opendyslexic"
new "Opendyslexic"
# renpy/common/00accessibility.rpy:156
old "Text Size Scaling"
# Automatic translation.
new "Skalierung der Textgröße"
# renpy/common/00accessibility.rpy:162
old "Reset"
# Automatic translation.
new "Zurücksetzen"
# renpy/common/00accessibility.rpy:168
old "Line Spacing Scaling"
# Automatic translation.
new "Zeilenabstand Skalierung"
# renpy/common/00accessibility.rpy:180
old "High Contrast Text"
# Automatic translation.
new "Hochkontrastiger Text"
# renpy/common/00accessibility.rpy:193
old "Self-Voicing"
# Automatic translation.
new "Selbstanzeige"
# renpy/common/00accessibility.rpy:197
old "Off"
# Automatic translation.
new "Aus"
# renpy/common/00accessibility.rpy:201
old "Text-to-speech"
# Automatic translation.
new "Text-in-Sprache"
# renpy/common/00accessibility.rpy:205
old "Clipboard"
# Automatic translation.
new "Zwischenablage"
# renpy/common/00accessibility.rpy:209
old "Debug"
# Automatic translation.
new "Debuggen"
# renpy/common/00accessibility.rpy:223
old "Self-Voicing Volume Drop"
# Automatic translation.
new "Selbstlautstärkeabfall"
# renpy/common/00accessibility.rpy:234
old "The options on this menu are intended to improve accessibility. They may not work with all games, and some combinations of options may render the game unplayable. This is not an issue with the game or engine. For the best results when changing fonts, try to keep the text size the same as it originally was."
# Automatic translation.
new "Die Optionen in diesem Menü dienen der Verbesserung der Zugänglichkeit. Sie funktionieren möglicherweise nicht mit allen Spielen, und einige Kombinationen von Optionen können das Spiel unspielbar machen. Dies ist kein Problem mit dem Spiel oder der Engine. Die besten Ergebnisse beim Ändern von Schriftarten erzielen Sie, wenn Sie die ursprüngliche Textgröße beibehalten."
# renpy/common/00action_file.rpy:378
old "Save slot %s: [text]"
# Automatic translation.
new "Steckplatz %s speichern: [text]"
# renpy/common/00action_file.rpy:461
old "Load slot %s: [text]"
# Automatic translation.
new "Steckplatz %s laden: [text]"
# renpy/common/00action_file.rpy:514
old "Delete slot [text]"
# Automatic translation.
new "Steckplatz löschen [text]"
# renpy/common/00action_file.rpy:593
old "File page auto"
# Automatic translation.
new "Datei Seite auto"
# renpy/common/00action_file.rpy:595
old "File page quick"
# Automatic translation.
new "Datei Seite schnell"
# renpy/common/00action_file.rpy:597
old "File page [text]"
# Automatic translation.
new "Datei-Seite [text]"
# renpy/common/00action_file.rpy:796
old "Next file page."
# Automatic translation.
new "Nächste Dateiseite."
# renpy/common/00action_file.rpy:868
old "Previous file page."
# Automatic translation.
new "Vorherige Dateiseite."
# renpy/common/00action_file.rpy:944
old "Quick save."
# Automatic translation.
new "Schnell speichern."
# renpy/common/00action_file.rpy:963
old "Quick load."
# Automatic translation.
new "Schnell laden."
# renpy/common/00action_other.rpy:381
old "Language [text]"
# Automatic translation.
new "Sprache [text]"
# renpy/common/00director.rpy:705
old "The interactive director is not enabled here."
# Automatic translation.
new "Der interaktive Regisseur ist hier nicht aktiviert."
# renpy/common/00director.rpy:1504
old "⬆"
new "⬆"
# renpy/common/00director.rpy:1510
old "⬇"
new "⬇"
# renpy/common/00director.rpy:1574
old "Done"
# Automatic translation.
new "Erledigt"
# renpy/common/00director.rpy:1584
old "(statement)"
# Automatic translation.
new "(Erklärung)"
# renpy/common/00director.rpy:1585
old "(tag)"
# Automatic translation.
new "(Tag)"
# renpy/common/00director.rpy:1586
old "(attributes)"
# Automatic translation.
new "(Attribute)"
# renpy/common/00director.rpy:1587
old "(transform)"
new "(transform)"
# renpy/common/00director.rpy:1612
old "(transition)"
new "(transition)"
# renpy/common/00director.rpy:1624
old "(channel)"
# Automatic translation.
new "(Kanal)"
# renpy/common/00director.rpy:1625
old "(filename)"
# Automatic translation.
new "(Dateiname)"
# renpy/common/00director.rpy:1654
old "Change"
# Automatic translation.
new "Ändern Sie"
# renpy/common/00director.rpy:1656
old "Add"
# Automatic translation.
new "hinzufügen"
# renpy/common/00director.rpy:1662
old "Remove"
# Automatic translation.
new "entfernen"
# renpy/common/00director.rpy:1697
old "Statement:"
# Automatic translation.
new "Erklärung:"
# renpy/common/00director.rpy:1718
old "Tag:"
new "Tag:"
# renpy/common/00director.rpy:1734
old "Attributes:"
# Automatic translation.
new "Attribute:"
# renpy/common/00director.rpy:1745
old "Click to toggle attribute, right click to toggle negative attribute."
# Automatic translation.
new "Klicken Sie auf das Attribut, um es einzuschalten, klicken Sie mit der rechten Maustaste, um das negative Attribut einzuschalten."
# renpy/common/00director.rpy:1757
old "Transforms:"
# Automatic translation.
new "Verwandeln:"
# renpy/common/00director.rpy:1768
old "Click to set transform, right click to add to transform list."
# Automatic translation.
new "Klicken Sie, um die Transformation festzulegen, und klicken Sie mit der rechten Maustaste, um sie zur Transformationsliste hinzuzufügen."
# renpy/common/00director.rpy:1780
old "Behind:"
# Automatic translation.
new "Hinter:"
# renpy/common/00director.rpy:1789
old "Click to set, right click to add to behind list."
# Automatic translation.
new "Zum Einstellen klicken, zum Hinzufügen zur Liste mit der rechten Maustaste klicken."
# renpy/common/00director.rpy:1801
old "Transition:"
# Automatic translation.
new "Überleitung:"
# renpy/common/00director.rpy:1819
old "Channel:"
# Automatic translation.
new "Kanal:"
# renpy/common/00director.rpy:1837
old "Audio Filename:"
# Automatic translation.
new "Audio Dateiname:"
# renpy/common/00gui.rpy:456
old "This save was created on a different device. Maliciously constructed save files can harm your computer. Do you trust this save's creator and everyone who could have changed the file?"
# Automatic translation.
new "Dieser Spielstand wurde auf einem anderen Gerät erstellt. Böswillig erstellte Speicherdateien können Ihrem Computer schaden. Vertrauen Sie dem Ersteller dieses Spielstands und allen, die die Datei geändert haben könnten?"
# renpy/common/00gui.rpy:457
old "Do you trust the device the save was created on? You should only choose yes if you are the device's sole user."
# Automatic translation.
new "Vertrauen Sie dem Gerät, auf dem die Sicherung erstellt wurde? Sie sollten nur dann Ja wählen, wenn Sie der einzige Benutzer des Geräts sind."
# renpy/common/00keymap.rpy:322
old "Failed to save screenshot as %s."
# Automatic translation.
new "Bildschirmfoto konnte nicht als %s gespeichert werden."
# renpy/common/00preferences.rpy:271
old "display"
# Automatic translation.
new "Anzeige"
# renpy/common/00preferences.rpy:283
old "transitions"
# Automatic translation.
new "Übergänge"
# renpy/common/00preferences.rpy:292
old "skip transitions"
# Automatic translation.
new "Übergänge überspringen"
# renpy/common/00preferences.rpy:294
old "video sprites"
# Automatic translation.
new "Video-Sprites"
# renpy/common/00preferences.rpy:303
old "show empty window"
# Automatic translation.
new "leeres Fenster anzeigen"
# renpy/common/00preferences.rpy:312
old "text speed"
# Automatic translation.
new "Textgeschwindigkeit"
# renpy/common/00preferences.rpy:320
old "joystick"
# Automatic translation.
new "Joystick"
# renpy/common/00preferences.rpy:320
old "joystick..."
# Automatic translation.
new "Joystick..."
# renpy/common/00preferences.rpy:327
old "skip"
# Automatic translation.
new "überspringen"
# renpy/common/00preferences.rpy:330
old "skip unseen [text]"
# Automatic translation.
new "unbesehen überspringen [text]"
# renpy/common/00preferences.rpy:335
old "skip unseen text"
# Automatic translation.
new "ungesehenen Text übergehen"
# renpy/common/00preferences.rpy:337
old "begin skipping"
# Automatic translation.
new "mit dem Springen beginnen"
# renpy/common/00preferences.rpy:341
old "after choices"
# Automatic translation.
new "nach der Wahl"
# renpy/common/00preferences.rpy:348
old "skip after choices"
# Automatic translation.
new "nach Auswahlen überspringen"
# renpy/common/00preferences.rpy:350
old "auto-forward time"
# Automatic translation.
new "automatische Vorlaufzeit"
# renpy/common/00preferences.rpy:364
old "auto-forward"
# Automatic translation.
new "automatisches Weiterleiten"
# renpy/common/00preferences.rpy:371
old "Auto forward"
# Automatic translation.
new "Automatisch vorwärts"
# renpy/common/00preferences.rpy:374
old "auto-forward after click"
# Automatic translation.
new "automatisches Weiterleiten nach Klick"
# renpy/common/00preferences.rpy:383
old "automatic move"
# Automatic translation.
new "automatischer Umzug"
# renpy/common/00preferences.rpy:392
old "wait for voice"
# Automatic translation.
new "auf Stimme warten"
# renpy/common/00preferences.rpy:401
old "voice sustain"
# Automatic translation.
new "Stimmhaltung"
# renpy/common/00preferences.rpy:410
old "self voicing"
# Automatic translation.
new "selbststimmend"
# renpy/common/00preferences.rpy:419
old "self voicing volume drop"
# Automatic translation.
new "Selbststimmende Lautstärkeabnahme"
# renpy/common/00preferences.rpy:427
old "clipboard voicing"
# Automatic translation.
new "Clipboard-Intonation"
# renpy/common/00preferences.rpy:436
old "debug voicing"
# Automatic translation.
new "Intonation debuggen"
# renpy/common/00preferences.rpy:445
old "emphasize audio"
# Automatic translation.
new "Audio hervorheben"
# renpy/common/00preferences.rpy:454
old "rollback side"
# Automatic translation.
new "Rollback-Seite"
# renpy/common/00preferences.rpy:464
old "gl powersave"
new "gl powersave"
# renpy/common/00preferences.rpy:470
old "gl framerate"
# Automatic translation.
new "Gl-Framerate"
# renpy/common/00preferences.rpy:473
old "gl tearing"
new "gl tearing"
# renpy/common/00preferences.rpy:476
old "font transform"
# Automatic translation.
new "Schriftart umwandeln"
# renpy/common/00preferences.rpy:479
old "font size"
# Automatic translation.
new "Schriftgröße"
# renpy/common/00preferences.rpy:487
old "font line spacing"
# Automatic translation.
new "Zeilenabstand der Schrift"
# renpy/common/00preferences.rpy:495
old "system cursor"
# Automatic translation.
new "System-Cursor"
# renpy/common/00preferences.rpy:504
old "renderer menu"
# Automatic translation.
new "Renderer-Menü"
# renpy/common/00preferences.rpy:507
old "accessibility menu"
# Automatic translation.
new "Menü Barrierefreiheit"
# renpy/common/00preferences.rpy:510
old "high contrast text"
# Automatic translation.
new "Text mit hohem Kontrast"
# renpy/common/00preferences.rpy:519
old "audio when minimized"
# Automatic translation.
new "Audio im minimierten Zustand"
# renpy/common/00preferences.rpy:528
old "audio when unfocused"
# Automatic translation.
new "Audio bei Unschärfe"
# renpy/common/00preferences.rpy:537
old "web cache preload"
# Automatic translation.
new "Web-Cache vorladen"
# renpy/common/00preferences.rpy:552
old "voice after game menu"
# Automatic translation.
new "Stimme nach dem Spielmenü"
# renpy/common/00preferences.rpy:571
old "main volume"
# Automatic translation.
new "Hauptvolumen"
# renpy/common/00preferences.rpy:572
old "music volume"
# Automatic translation.
new "Musiklautstärke"
# renpy/common/00preferences.rpy:573
old "sound volume"
# Automatic translation.
new "Lautstärke"
# renpy/common/00preferences.rpy:574
old "voice volume"
# Automatic translation.
new "Sprachlautstärke"
# renpy/common/00preferences.rpy:575
old "mute main"
# Automatic translation.
new "Hauptstummschaltung"
# renpy/common/00preferences.rpy:576
old "mute music"
# Automatic translation.
new "Musik stummschalten"
# renpy/common/00preferences.rpy:577
old "mute sound"
# Automatic translation.
new "Ton stummschalten"
# renpy/common/00preferences.rpy:578
old "mute voice"
# Automatic translation.
new "stumme Stimme"
# renpy/common/00preferences.rpy:579
old "mute all"
# Automatic translation.
new "alle stumm schalten"
# renpy/common/00speechbubble.rpy:344
old "Speech Bubble Editor"
# Automatic translation.
new "Sprechblasen-Editor"
# renpy/common/00speechbubble.rpy:349
old "(hide)"
# Automatic translation.
new "(ausblenden)"
# renpy/common/00sync.rpy:70
old "Sync downloaded."
# Automatic translation.
new "Sync heruntergeladen."
# renpy/common/00sync.rpy:190
old "Could not connect to the Ren'Py Sync server."
# Automatic translation.
new "Es konnte keine Verbindung zum Ren'Py Sync Server hergestellt werden."
# renpy/common/00sync.rpy:192
old "The Ren'Py Sync server timed out."
# Automatic translation.
new "Der Ren'Py Sync-Server hat eine Zeitüberschreitung."
# renpy/common/00sync.rpy:194
old "An unknown error occurred while connecting to the Ren'Py Sync server."
# Automatic translation.
new "Bei der Verbindung mit dem Ren'Py Sync-Server ist ein unbekannter Fehler aufgetreten."
# renpy/common/00sync.rpy:267
old "The Ren'Py Sync server does not have a copy of this sync. The sync ID may be invalid, or it may have timed out."
# Automatic translation.
new "Der Ren'Py Sync-Server verfügt nicht über eine Kopie dieser Synchronisierung. Die Sync-ID ist möglicherweise ungültig, oder es wurde eine Zeitüberschreitung festgestellt."
# renpy/common/00sync.rpy:409
old "Please enter the sync ID you generated.\nNever enter a sync ID you didn't create yourself."
# Automatic translation.
new "Bitte geben Sie die von Ihnen erstellte Sync-ID ein.\nGeben Sie niemals eine Sync-ID ein, die Sie nicht selbst erstellt haben."
# renpy/common/00sync.rpy:428
old "The sync ID is not in the correct format."
# Automatic translation.
new "Die Sync-ID hat nicht das richtige Format."
# renpy/common/00sync.rpy:448
old "The sync could not be decrypted."
# Automatic translation.
new "Die Synchronisierung konnte nicht entschlüsselt werden."
# renpy/common/00sync.rpy:471
old "The sync belongs to a different game."
# Automatic translation.
new "Die Synchronisation gehört zu einem anderen Spiel."
# renpy/common/00sync.rpy:476
old "The sync contains a file with an invalid name."
# Automatic translation.
new "Die Synchronisierung enthält eine Datei mit einem ungültigen Namen."
# renpy/common/00sync.rpy:529
old "This will upload your saves to the {a=https://sync.renpy.org}Ren'Py Sync Server{/a}.\nDo you want to continue?"
# Automatic translation.
new "Dadurch werden Ihre Spielstände auf den {a=https://sync.renpy.org}Ren'Py Sync Server{/a} hochgeladen.\nMöchten Sie fortfahren?"
# renpy/common/00sync.rpy:558
old "Enter Sync ID"
# Automatic translation.
new "Sync-ID eingeben"
# renpy/common/00sync.rpy:569
old "This will contact the {a=https://sync.renpy.org}Ren'Py Sync Server{/a}."
# Automatic translation.
new "Dadurch wird der {a=https://sync.renpy.org}Ren'Py Sync Server{/a} kontaktiert."
# renpy/common/00sync.rpy:596
old "Sync Success"
# Automatic translation.
new "Sync-Erfolg"
# renpy/common/00sync.rpy:599
old "The Sync ID is:"
# Automatic translation.
new "Die Sync-ID lautet:"
# renpy/common/00sync.rpy:605
old "You can use this ID to download your save on another device.\nThis sync will expire in an hour.\nRen'Py Sync is supported by {a=https://www.renpy.org/sponsors.html}Ren'Py's Sponsors{/a}."
# Automatic translation.
new "Sie können diese ID verwenden, um Ihren Spielstand auf ein anderes Gerät herunterzuladen.\nDiese Synchronisierung läuft in einer Stunde ab.\nRen'Py Sync wird unterstützt von {a=https://www.renpy.org/sponsors.html}Ren'Py's Sponsors{/a}."
# renpy/common/00sync.rpy:631
old "Sync Error"
# Automatic translation.
new "Sync-Fehler"
+115 -4
View File
@@ -59,11 +59,13 @@ translate german strings:
# _developer/developer.rpym:412
old "Rectangle copied to clipboard."
new "Rectangle copied to clipboard."
# Automatic translation.
new "Rechteck in die Zwischenablage kopiert."
# _developer/developer.rpym:415
old "Position copied to clipboard."
new "Position copied to clipboard."
# Automatic translation.
new "Position in die Zwischenablage kopiert."
# _developer/developer.rpym:524
old "✔ "
@@ -75,7 +77,8 @@ translate german strings:
# _developer/developer.rpym:532
old "\n{color=#cfc}✔ predicted image (good){/color}\n{color=#fcc}✘ unpredicted image (bad){/color}\n{color=#fff}Drag to move.{/color}"
new "\n{color=#cfc}✔ predicted image (good){/color}\n{color=#fcc}✘ unpredicted image (bad){/color}\n{color=#fff}Drag to move.{/color}"
# Automatic translation.
new "\n{color=#cfc}✔ vorhergesagtes Bild (gut){/color}\n{color=#fcc}✘ unvorhergesehenes Bild (schlecht){/color}\n{color=#fff}Zum Verschieben ziehen.{/color}"
# _developer/inspector.rpym:38
old "Displayable Inspector"
@@ -91,7 +94,8 @@ translate german strings:
# _developer/inspector.rpym:71
old "Location"
new "Location"
# Automatic translation.
new "Standort"
# _developer/inspector.rpym:122
old "Inspecting Styles of [displayable_name!q]"
@@ -177,3 +181,110 @@ translate german strings:
old "jump <label>: jumps to label"
new "jump <label>: springt zum Label"
translate german strings:
# renpy/common/_developer/developer.rpym:43
old "Interactive Director (D)"
# Automatic translation.
new "Interaktiver Direktor (D)"
# renpy/common/_developer/developer.rpym:51
old "Persistent Viewer"
# Automatic translation.
new "Dauerhafter Betrachter"
# renpy/common/_developer/developer.rpym:59
old "Show Image Load Log (F4)"
# Automatic translation.
new "Bildladeprotokoll anzeigen (F4)"
# renpy/common/_developer/developer.rpym:62
old "Hide Image Load Log (F4)"
# Automatic translation.
new "Bildladeprotokoll ausblenden (F4)"
# renpy/common/_developer/developer.rpym:65
old "Image Attributes"
# Automatic translation.
new "Bild-Attribute"
# renpy/common/_developer/developer.rpym:70
old "Speech Bubble Editor (Shift+B)"
# Automatic translation.
new "Sprechblasen-Editor (Umschalt+B)"
# renpy/common/_developer/developer.rpym:97
old "[name] [attributes] (hidden)"
# Automatic translation.
new "[name] [attributes] (versteckt)"
# renpy/common/_developer/developer.rpym:101
old "[name] [attributes]"
new "[name] [attributes]"
# renpy/common/_developer/developer.rpym:162
old "Hide deleted"
# Automatic translation.
new "Ausblenden gelöscht"
# renpy/common/_developer/developer.rpym:162
old "Show deleted"
# Automatic translation.
new "Anzeigen gelöscht"
# renpy/common/_developer/developer.rpym:389
old "Type to filter: "
# Automatic translation.
new "Typ zum Filtern: "
# renpy/common/_developer/developer.rpym:507
old "Textures: [tex_count] ([tex_size_mb:.1f] MB)"
# Automatic translation.
new "Texturen: [tex_count] ([tex_size_mb:.1f] MB)"
# renpy/common/_developer/developer.rpym:511
old "Image cache: [cache_pct:.1f]% ([cache_size_mb:.1f] MB)"
# Automatic translation.
new "Bild-Cache: [cache_pct:.1f]% ([cache_size_mb:.1f] MB)"
# renpy/common/00console.rpy:789
old "help: show this help\n help <expr>: show signature and documentation of <expr>"
# Automatic translation.
new "help: diese Hilfe anzeigen\n help <expr>: Signatur und Dokumentation von <expr> anzeigen"
# renpy/common/00console.rpy:813
old "Help may display undocumented functions. Please check that the function or\nclass you want to use is documented.\n\n"
# Automatic translation.
new "Die Hilfe kann undokumentierte Funktionen anzeigen. Bitte prüfen Sie, ob die Funktion oder\nKlasse, die Sie verwenden möchten, dokumentiert ist.\n\n"
# renpy/common/00console.rpy:854
old "stack: print the return stack"
# Automatic translation.
new "stack: den Rückgabestapel drucken"
# renpy/common/00console.rpy:908
old "watch <expression>: watch a python expression\n watch short: makes the representation of traced expressions short (default)\n watch long: makes the representation of traced expressions as is"
# Automatic translation.
new "watch <expression>: einen Python-Ausdruck beobachten\n watch short: macht die Darstellung der nachverfolgten Ausdrücke kurz (Standard)\n watch long: macht die Darstellung von verfolgten Ausdrücken wie folgt"
# renpy/common/00console.rpy:1028
old "short: Shorten the representation of objects on the console (default)."
# Automatic translation.
new "short: Verkürzt die Darstellung von Objekten auf der Konsole (Standard)."
# renpy/common/00console.rpy:1032
old "long: Print the full representation of objects on the console."
# Automatic translation.
new "long: Gibt die vollständige Darstellung der Objekte auf der Konsole aus."
# renpy/common/00console.rpy:1036
old "escape: Enables escaping of unicode symbols in unicode strings."
# Automatic translation.
new "escape: Ermöglicht das Escaping von Unicode-Symbolen in Unicode-Strings."
# renpy/common/00console.rpy:1040
old "unescape: Disables escaping of unicode symbols in unicode strings and print it as is (default)."
# Automatic translation.
new "unescape: Deaktiviert das Escaping von Unicode-Symbolen in Unicode-Zeichenfolgen und druckt sie so, wie sie sind (Voreinstellung)."
+150 -10
View File
@@ -23,7 +23,8 @@ translate german strings:
# 00gltest.rpy:93
old "Enable"
new "Enable"
# Automatic translation.
new "Aktivieren Sie"
# 00gltest.rpy:109
old "Changes will take effect the next time this program is run."
@@ -91,27 +92,33 @@ translate german strings:
# 00gamepad.rpy:32
old "Select Gamepad to Calibrate"
new "Select Gamepad to Calibrate"
# Automatic translation.
new "Gamepad zum Kalibrieren auswählen"
# 00gamepad.rpy:35
old "No Gamepads Available"
new "No Gamepads Available"
# Automatic translation.
new "Keine Gamepads verfügbar"
# 00gamepad.rpy:54
old "Calibrating [name] ([i]/[total])"
new "Calibrating [name] ([i]/[total])"
# Automatic translation.
new "Kalibrierung von [name] ([i]/[total])"
# 00gamepad.rpy:58
old "Press or move the [control!s] [kind]."
new "Press or move the [control!s] [kind]."
# Automatic translation.
new "Drücken Sie oder bewegen Sie die [control!s] [kind] ."
# 00gamepad.rpy:66
old "Skip (A)"
new "Skip (A)"
# Automatic translation.
new "Überspringen (A)"
# 00gamepad.rpy:69
old "Back (B)"
new "Back (B)"
# Automatic translation.
new "Rücken (B)"
# _errorhandling.rpym:495
old "Open Traceback"
@@ -123,11 +130,13 @@ translate german strings:
# _errorhandling.rpym:499
old "Copy to Clipboard"
new "Copy to Clipboard"
# Automatic translation.
new "In die Zwischenablage kopieren"
# _errorhandling.rpym:501
old "Copies the traceback.txt file to the clipboard."
new "Copies the traceback.txt file to the clipboard."
# Automatic translation.
new "Kopiert die Datei traceback.txt in die Zwischenablage."
# _errorhandling.rpym:519
old "An exception has occurred."
@@ -175,5 +184,136 @@ translate german strings:
# _errorhandling.rpym:612
old "Copies the errors.txt file to the clipboard."
new "Copies the errors.txt file to the clipboard."
# Automatic translation.
new "Kopiert die Datei errors.txt in die Zwischenablage."
translate german strings:
# renpy/common/00gltest.rpy:89
old "Renderer"
new "Renderer"
# renpy/common/00gltest.rpy:100
old "Force GL Renderer"
new "Force GL Renderer"
# renpy/common/00gltest.rpy:105
old "Force ANGLE Renderer"
new "Force ANGLE Renderer"
# renpy/common/00gltest.rpy:110
old "Force GLES Renderer"
# Automatic translation.
new "GLES-Renderer erzwingen"
# renpy/common/00gltest.rpy:116
old "Force GL2 Renderer"
# Automatic translation.
new "GL2-Renderer erzwingen"
# renpy/common/00gltest.rpy:121
old "Force ANGLE2 Renderer"
# Automatic translation.
new "ANGLE2-Renderer erzwingen"
# renpy/common/00gltest.rpy:126
old "Force GLES2 Renderer"
# Automatic translation.
new "GLES2-Renderer erzwingen"
# renpy/common/00gltest.rpy:136
old "Enable (No Blocklist)"
# Automatic translation.
new "Aktivieren (keine Sperrliste)"
# renpy/common/00gltest.rpy:159
old "Powersave"
new "Powersave"
# renpy/common/00gltest.rpy:173
old "Framerate"
new "Framerate"
# renpy/common/00gltest.rpy:177
old "Screen"
# Automatic translation.
new "Bildschirm"
# renpy/common/00gltest.rpy:181
old "60"
new "60"
# renpy/common/00gltest.rpy:185
old "30"
new "30"
# renpy/common/00gltest.rpy:191
old "Tearing"
new "Tearing"
# renpy/common/00gltest.rpy:249
old "This game requires use of GL2 that can't be initialised."
# Automatic translation.
new "Dieses Spiel erfordert die Verwendung von GL2, das nicht initialisiert werden kann."
# renpy/common/00gltest.rpy:259
old "The {a=edit:1:log.txt}log.txt{/a} file may contain information to help you determine what is wrong with your computer."
# Automatic translation.
new "Die Datei {a=edit:1:log.txt}log.txt{/a} kann Informationen enthalten, die Ihnen helfen, das Problem mit Ihrem Computer zu lösen."
# renpy/common/00gltest.rpy:264
old "More details on how to fix this can be found in the {a=[url]}documentation{/a}."
# Automatic translation.
new "Weitere Einzelheiten zur Behebung dieses Problems finden Sie in der Dokumentation {a=[url]}{/a} ."
# renpy/common/00gltest.rpy:281
old "Change render options"
# Automatic translation.
new "Renderoptionen ändern"
# renpy/common/00gamepad.rpy:58
old "Press or move the '[control!s]' [kind]."
# Automatic translation.
new "Drücken Sie oder bewegen Sie die Taste '[control!s]' [kind]."
# renpy/common/_errorhandling.rpym:555
old "Open"
# Automatic translation.
new "Öffnen Sie"
# renpy/common/_errorhandling.rpym:559
old "Copy BBCode"
# Automatic translation.
new "BBCode kopieren"
# renpy/common/_errorhandling.rpym:561
old "Copies the traceback.txt file to the clipboard as BBcode for forums like https://lemmasoft.renai.us/."
# Automatic translation.
new "Kopiert die Datei traceback.txt in die Zwischenablage als BBcode für Foren wie https://lemmasoft.renai.us/."
# renpy/common/_errorhandling.rpym:563
old "Copy Markdown"
# Automatic translation.
new "Markdown kopieren"
# renpy/common/_errorhandling.rpym:565
old "Copies the traceback.txt file to the clipboard as Markdown for Discord."
# Automatic translation.
new "Kopiert die Datei traceback.txt in die Zwischenablage als Markdown für Discord."
# renpy/common/_errorhandling.rpym:626
old "Ignores the exception, allowing you to continue."
# Automatic translation.
new "Ignoriert die Ausnahme, so dass Sie fortfahren können."
# renpy/common/_errorhandling.rpym:637
old "Console"
# Automatic translation.
new "Konsole"
# renpy/common/_errorhandling.rpym:639
old "Opens a console to allow debugging the problem."
# Automatic translation.
new "Öffnet eine Konsole, um das Problem zu beheben."
+267 -100
View File
@@ -3,267 +3,333 @@ translate german strings:
# gui.rpy:2
old "## Initialization"
new "## Initialization"
# Automatic translation.
new "## Initialisierung"
# gui.rpy:5
old "## The init offset statement causes the init code in this file to run before init code in any other file."
new "## The init offset statement causes the init code in this file to run before init code in any other file."
# Automatic translation.
new "## Die Anweisung init offset bewirkt, dass der init-Code in dieser Datei vor dem init-Code in jeder anderen Datei ausgeführt wird."
# gui.rpy:9
old "## Calling gui.init resets the styles to sensible default values, and sets the width and height of the game."
new "## Calling gui.init resets the styles to sensible default values, and sets the width and height of the game."
# Automatic translation.
new "## Der Aufruf von gui.init setzt die Stile auf sinnvolle Standardwerte zurück und setzt die Breite und Höhe des Spiels."
# gui.rpy:21
old "## Colors"
new "## Colors"
# Automatic translation.
new "## Farben"
# gui.rpy:23
old "## The colors of text in the interface."
new "## The colors of text in the interface."
# Automatic translation.
new "## Die Farben des Textes in der Schnittstelle."
# gui.rpy:25
old "## An accent color used throughout the interface to label and highlight text."
new "## An accent color used throughout the interface to label and highlight text."
# Automatic translation.
new "## Eine Akzentfarbe, die in der gesamten Benutzeroberfläche zur Beschriftung und Hervorhebung von Text verwendet wird."
# gui.rpy:29
old "## The color used for a text button when it is neither selected nor hovered."
new "## The color used for a text button when it is neither selected nor hovered."
# Automatic translation.
new "## Die Farbe, die für eine Textschaltfläche verwendet wird, wenn sie weder ausgewählt ist noch mit dem Mauszeiger bewegt wird."
# gui.rpy:32
old "## The small color is used for small text, which needs to be brighter/darker to achieve the same effect."
new "## The small color is used for small text, which needs to be brighter/darker to achieve the same effect."
# Automatic translation.
new "## Die kleine Farbe wird für kleinen Text verwendet, der heller/dunkler sein muss, um den gleichen Effekt zu erzielen."
# gui.rpy:36
old "## The color that is used for buttons and bars that are hovered."
new "## The color that is used for buttons and bars that are hovered."
# Automatic translation.
new "## Die Farbe, die für Schaltflächen und Balken verwendet wird, die mit dem Mauszeiger bewegt werden."
# gui.rpy:39
old "## The color used for a text button when it is selected but not focused. A button is selected if it is the current screen or preference value."
new "## The color used for a text button when it is selected but not focused. A button is selected if it is the current screen or preference value."
# Automatic translation.
new "## Die Farbe, die für eine Textschaltfläche verwendet wird, wenn sie ausgewählt, aber nicht fokussiert ist. Eine Schaltfläche ist ausgewählt, wenn sie der aktuelle Bildschirm oder Einstellungswert ist."
# gui.rpy:43
old "## The color used for a text button when it cannot be selected."
new "## The color used for a text button when it cannot be selected."
# Automatic translation.
new "## Die Farbe, die für eine Textschaltfläche verwendet wird, wenn sie nicht ausgewählt werden kann."
# gui.rpy:46
old "## Colors used for the portions of bars that are not filled in. These are not used directly, but are used when re-generating bar image files."
new "## Colors used for the portions of bars that are not filled in. These are not used directly, but are used when re-generating bar image files."
# Automatic translation.
new "## Farben für die Teile der Balken, die nicht ausgefüllt sind. Diese Farben werden nicht direkt verwendet, aber bei der Neuerstellung von Balkenbilddateien eingesetzt."
# gui.rpy:51
old "## The colors used for dialogue and menu choice text."
new "## The colors used for dialogue and menu choice text."
# Automatic translation.
new "## Die Farben, die für Dialog- und Menüauswahltext verwendet werden."
# gui.rpy:56
old "## Fonts and Font Sizes"
new "## Fonts and Font Sizes"
# Automatic translation.
new "## Schriftarten und Schriftgrößen"
# gui.rpy:58
old "## The font used for in-game text."
new "## The font used for in-game text."
# Automatic translation.
new "## Die für den Text im Spiel verwendete Schriftart."
# gui.rpy:61
old "## The font used for character names."
new "## The font used for character names."
# Automatic translation.
new "## Die für Zeichennamen verwendete Schriftart."
# gui.rpy:64
old "## The font used for out-of-game text."
new "## The font used for out-of-game text."
# Automatic translation.
new "## Die Schriftart, die für den Text außerhalb des Spiels verwendet wird."
# gui.rpy:67
old "## The size of normal dialogue text."
new "## The size of normal dialogue text."
# Automatic translation.
new "## Die Größe des normalen Dialogtextes."
# gui.rpy:70
old "## The size of character names."
new "## The size of character names."
# Automatic translation.
new "## Die Größe der Zeichennamen."
# gui.rpy:73
old "## The size of text in the game's user interface."
new "## The size of text in the game's user interface."
# Automatic translation.
new "## Die Größe des Textes in der Benutzeroberfläche des Spiels."
# gui.rpy:76
old "## The size of labels in the game's user interface."
new "## The size of labels in the game's user interface."
# Automatic translation.
new "## Die Größe der Beschriftungen in der Benutzeroberfläche des Spiels."
# gui.rpy:79
old "## The size of text on the notify screen."
new "## The size of text on the notify screen."
# Automatic translation.
new "## Die Größe des Textes auf dem Benachrichtigungsbildschirm."
# gui.rpy:82
old "## The size of the game's title."
new "## The size of the game's title."
# Automatic translation.
new "## Die Größe des Titels des Spiels."
# gui.rpy:86
old "## Main and Game Menus"
new "## Main and Game Menus"
# Automatic translation.
new "## Haupt- und Spielmenü"
# gui.rpy:88
old "## The images used for the main and game menus."
new "## The images used for the main and game menus."
# Automatic translation.
new "## Die Bilder, die für das Haupt- und das Spielmenü verwendet werden."
# gui.rpy:92
old "## Should we show the name and version of the game?"
new "## Should we show the name and version of the game?"
# Automatic translation.
new "## Sollten wir den Namen und die Version des Spiels anzeigen?"
# gui.rpy:96
old "## Dialogue"
new "## Dialogue"
# Automatic translation.
new "## Dialog"
# gui.rpy:98
old "## These variables control how dialogue is displayed on the screen one line at a time."
new "## These variables control how dialogue is displayed on the screen one line at a time."
# Automatic translation.
new "## Diese Variablen steuern, wie der Dialog zeilenweise auf dem Bildschirm angezeigt wird."
# gui.rpy:101
old "## The height of the textbox containing dialogue."
new "## The height of the textbox containing dialogue."
# Automatic translation.
new "## Die Höhe des Textfeldes, das den Dialog enthält."
# gui.rpy:104
old "## The placement of the textbox vertically on the screen. 0.0 is the top, 0.5 is center, and 1.0 is the bottom."
new "## The placement of the textbox vertically on the screen. 0.0 is the top, 0.5 is center, and 1.0 is the bottom."
# Automatic translation.
new "## Die Platzierung des Textfeldes vertikal auf dem Bildschirm. 0.0 ist der obere Rand, 0.5 ist die Mitte und 1.0 ist der untere Rand."
# gui.rpy:109
old "## The placement of the speaking character's name, relative to the textbox. These can be a whole number of pixels from the left or top, or 0.5 to center."
new "## The placement of the speaking character's name, relative to the textbox. These can be a whole number of pixels from the left or top, or 0.5 to center."
# Automatic translation.
new "## Die Platzierung des Namens des sprechenden Charakters, relativ zum Textfeld. Dies kann eine ganze Anzahl von Pixeln von links oder oben sein, oder 0,5 bis zur Mitte."
# gui.rpy:114
old "## The horizontal alignment of the character's name. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
new "## The horizontal alignment of the character's name. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
# Automatic translation.
new "## Die horizontale Ausrichtung des Namens des Zeichens. Dies kann 0.0 für linksbündig, 0.5 für zentriert und 1.0 für rechtsbündig sein."
# gui.rpy:118
old "## The width, height, and borders of the box containing the character's name, or None to automatically size it."
new "## The width, height, and borders of the box containing the character's name, or None to automatically size it."
# Automatic translation.
new "## Die Breite, die Höhe und die Ränder des Feldes, das den Namen des Zeichens enthält, oder None, um es automatisch zu vergrößern."
# gui.rpy:123
old "## The borders of the box containing the character's name, in left, top, right, bottom order."
new "## The borders of the box containing the character's name, in left, top, right, bottom order."
# Automatic translation.
new "## Die Ränder des Feldes, das den Namen des Zeichens enthält, in der Reihenfolge links, oben, rechts, unten."
# gui.rpy:127
old "## If True, the background of the namebox will be tiled, if False, the background of the namebox will be scaled."
new "## If True, the background of the namebox will be tiled, if False, the background of the namebox will be scaled."
# Automatic translation.
new "## Wenn True, wird der Hintergrund des Namensfeldes gekachelt, wenn False, wird der Hintergrund des Namensfeldes skaliert."
# gui.rpy:132
old "## The placement of dialogue relative to the textbox. These can be a whole number of pixels relative to the left or top side of the textbox, or 0.5 to center."
new "## The placement of dialogue relative to the textbox. These can be a whole number of pixels relative to the left or top side of the textbox, or 0.5 to center."
# Automatic translation.
new "## Die Platzierung des Dialogs relativ zum Textfeld. Dies kann eine ganze Anzahl von Pixeln relativ zur linken oder oberen Seite des Textfeldes oder 0,5 zur Mitte sein."
# gui.rpy:138
old "## The maximum width of dialogue text, in pixels."
new "## The maximum width of dialogue text, in pixels."
# Automatic translation.
new "## Die maximale Breite des Dialogtextes, in Pixeln."
# gui.rpy:141
old "## The horizontal alignment of the dialogue text. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
new "## The horizontal alignment of the dialogue text. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
# Automatic translation.
new "## Die horizontale Ausrichtung des Dialogtextes. Dies kann 0.0 für linksbündig, 0.5 für zentriert und 1.0 für rechtsbündig sein."
# gui.rpy:146
old "## Buttons"
new "## Buttons"
# Automatic translation.
new "## Schaltflächen"
# gui.rpy:148
old "## These variables, along with the image files in gui/button, control aspects of how buttons are displayed."
new "## These variables, along with the image files in gui/button, control aspects of how buttons are displayed."
# Automatic translation.
new "## Diese Variablen, zusammen mit den Bilddateien in gui/button, steuern Aspekte der Darstellung von Schaltflächen."
# gui.rpy:151
old "## The width and height of a button, in pixels. If None, Ren'Py computes a size."
new "## The width and height of a button, in pixels. If None, Ren'Py computes a size."
# Automatic translation.
new "## Die Breite und Höhe einer Schaltfläche, in Pixeln. Falls keine, berechnet Ren'Py eine Größe."
# gui.rpy:155
old "## The borders on each side of the button, in left, top, right, bottom order."
new "## The borders on each side of the button, in left, top, right, bottom order."
# Automatic translation.
new "## Die Ränder auf jeder Seite der Schaltfläche, in der Reihenfolge links, oben, rechts, unten."
# gui.rpy:158
old "## If True, the background image will be tiled. If False, the background image will be linearly scaled."
new "## If True, the background image will be tiled. If False, the background image will be linearly scaled."
# Automatic translation.
new "## Wenn True, wird das Hintergrundbild gekachelt. Wenn False, wird das Hintergrundbild linear skaliert."
# gui.rpy:162
old "## The font used by the button."
new "## The font used by the button."
# Automatic translation.
new "## Die von der Schaltfläche verwendete Schriftart."
# gui.rpy:165
old "## The size of the text used by the button."
new "## The size of the text used by the button."
# Automatic translation.
new "## Die Größe des von der Schaltfläche verwendeten Textes."
# gui.rpy:179
old "## These variables override settings for different kinds of buttons. Please see the gui documentation for the kinds of buttons available, and what each is used for."
new "## These variables override settings for different kinds of buttons. Please see the gui documentation for the kinds of buttons available, and what each is used for."
# Automatic translation.
new "## Diese Variablen überschreiben die Einstellungen für verschiedene Arten von Schaltflächen. Bitte lesen Sie in der Gui-Dokumentation nach, welche Arten von Schaltflächen verfügbar sind und wofür sie jeweils verwendet werden."
# gui.rpy:183
old "## These customizations are used by the default interface:"
new "## These customizations are used by the default interface:"
# Automatic translation.
new "## Diese Anpassungen werden von der Standardschnittstelle verwendet:"
# gui.rpy:198
old "## You can also add your own customizations, by adding properly-named variables. For example, you can uncomment the following line to set the width of a navigation button."
new "## You can also add your own customizations, by adding properly-named variables. For example, you can uncomment the following line to set the width of a navigation button."
# Automatic translation.
new "## Sie können auch Ihre eigenen Anpassungen hinzufügen, indem Sie Variablen mit den richtigen Namen hinzufügen. Zum Beispiel können Sie die folgende Zeile auskommentieren, um die Breite einer Navigationsschaltfläche festzulegen."
# gui.rpy:205
old "## Choice Buttons"
new "## Choice Buttons"
# Automatic translation.
new "## Auswahltasten"
# gui.rpy:207
old "## Choice buttons are used in the in-game menus."
new "## Choice buttons are used in the in-game menus."
# Automatic translation.
new "## Wahltasten werden in den Menüs im Spiel verwendet."
# gui.rpy:220
old "## File Slot Buttons"
new "## File Slot Buttons"
# Automatic translation.
new "## Datei Slot Schaltflächen"
# gui.rpy:222
old "## A file slot button is a special kind of button. It contains a thumbnail image, and text describing the contents of the save slot. A save slot uses image files in gui/button, like the other kinds of buttons."
new "## A file slot button is a special kind of button. It contains a thumbnail image, and text describing the contents of the save slot. A save slot uses image files in gui/button, like the other kinds of buttons."
# Automatic translation.
new "## Eine Dateislot-Schaltfläche ist eine besondere Art von Schaltfläche. Er enthält ein Miniaturbild und einen Text, der den Inhalt des Speicherplatzes beschreibt. Ein Speicherslot verwendet Bilddateien in gui/button, wie die anderen Arten von Schaltflächen."
# gui.rpy:226
old "## The save slot button."
new "## The save slot button."
# Automatic translation.
new "## Die Schaltfläche \"Slot speichern\"."
# gui.rpy:234
old "## The width and height of thumbnails used by the save slots."
new "## The width and height of thumbnails used by the save slots."
# Automatic translation.
new "## Die Breite und Höhe der Miniaturbilder, die von den Speicherplätzen verwendet werden."
# gui.rpy:238
old "## The number of columns and rows in the grid of save slots."
new "## The number of columns and rows in the grid of save slots."
# Automatic translation.
new "## Die Anzahl der Spalten und Zeilen im Raster der Speicherplätze."
# gui.rpy:243
old "## Positioning and Spacing"
new "## Positioning and Spacing"
# Automatic translation.
new "## Positionierung und Abstände"
# gui.rpy:245
old "## These variables control the positioning and spacing of various user interface elements."
new "## These variables control the positioning and spacing of various user interface elements."
# Automatic translation.
new "## Diese Variablen steuern die Positionierung und den Abstand der verschiedenen Elemente der Benutzeroberfläche."
# gui.rpy:248
old "## The position of the left side of the navigation buttons, relative to the left side of the screen."
new "## The position of the left side of the navigation buttons, relative to the left side of the screen."
# Automatic translation.
new "## Die Position der linken Seite der Navigationstasten, relativ zur linken Seite des Bildschirms."
# gui.rpy:252
old "## The vertical position of the skip indicator."
new "## The vertical position of the skip indicator."
# Automatic translation.
new "## Die vertikale Position des Überspringungsanzeigers."
# gui.rpy:255
old "## The vertical position of the notify screen."
new "## The vertical position of the notify screen."
# Automatic translation.
new "## Die vertikale Position des Benachrichtigungsbildschirms."
# gui.rpy:258
old "## The spacing between menu choices."
new "## The spacing between menu choices."
# Automatic translation.
new "## Die Abstände zwischen den Menüoptionen."
# gui.rpy:261
old "## Buttons in the navigation section of the main and game menus."
new "## Buttons in the navigation section of the main and game menus."
# Automatic translation.
new "## Schaltflächen im Navigationsbereich des Haupt- und Spielmenüs."
# gui.rpy:264
old "## Controls the amount of spacing between preferences."
new "## Controls the amount of spacing between preferences."
# Automatic translation.
new "## Steuert den Abstand zwischen den Einstellungen."
# gui.rpy:267
old "## Controls the amount of spacing between preference buttons."
new "## Controls the amount of spacing between preference buttons."
# Automatic translation.
new "## Steuert den Abstand zwischen den Einstellungsschaltflächen."
# gui.rpy:270
old "## The spacing between file page buttons."
new "## The spacing between file page buttons."
# Automatic translation.
new "## Der Abstand zwischen den Schaltflächen der Dateiseite."
# gui.rpy:273
old "## The spacing between file slots."
new "## The spacing between file slots."
# Automatic translation.
new "## Der Abstand zwischen den Dateislots."
# gui.rpy:277
old "## Frames"
@@ -271,141 +337,242 @@ translate german strings:
# gui.rpy:279
old "## These variables control the look of frames that can contain user interface components when an overlay or window is not present."
new "## These variables control the look of frames that can contain user interface components when an overlay or window is not present."
# Automatic translation.
new "## Diese Variablen steuern das Aussehen von Frames, die Komponenten der Benutzeroberfläche enthalten können, wenn kein Overlay oder Fenster vorhanden ist."
# gui.rpy:282
old "## Generic frames that are introduced by player code."
new "## Generic frames that are introduced by player code."
# Automatic translation.
new "## Generische Frames, die vom Player-Code eingeführt werden."
# gui.rpy:285
old "## The frame that is used as part of the confirm screen."
new "## The frame that is used as part of the confirm screen."
# Automatic translation.
new "## Der Rahmen, der als Teil des Bestätigungsbildschirms verwendet wird."
# gui.rpy:288
old "## The frame that is used as part of the skip screen."
new "## The frame that is used as part of the skip screen."
# Automatic translation.
new "## Der Rahmen, der als Teil des Überspringungsbildschirms verwendet wird."
# gui.rpy:291
old "## The frame that is used as part of the notify screen."
new "## The frame that is used as part of the notify screen."
# Automatic translation.
new "## Der Rahmen, der als Teil des Benachrichtigungsbildschirms verwendet wird."
# gui.rpy:294
old "## Should frame backgrounds be tiled?"
new "## Should frame backgrounds be tiled?"
# Automatic translation.
new "## Sollen Rahmenhintergründe gekachelt werden?"
# gui.rpy:298
old "## Bars, Scrollbars, and Sliders"
new "## Bars, Scrollbars, and Sliders"
# Automatic translation.
new "## Balken, Bildlaufleisten und Schieberegler"
# gui.rpy:300
old "## These control the look and size of bars, scrollbars, and sliders."
new "## These control the look and size of bars, scrollbars, and sliders."
# Automatic translation.
new "## Diese steuern das Aussehen und die Größe von Balken, Bildlaufleisten und Schiebereglern."
# gui.rpy:302
old "## The default GUI only uses sliders and vertical scrollbars. All of the other bars are only used in creator-written code."
new "## The default GUI only uses sliders and vertical scrollbars. All of the other bars are only used in creator-written code."
# Automatic translation.
new "## Die Standard-GUI verwendet nur Schieberegler und vertikale Bildlaufleisten. Alle anderen Leisten werden nur im vom Ersteller geschriebenen Code verwendet."
# gui.rpy:305
old "## The height of horizontal bars, scrollbars, and sliders. The width of vertical bars, scrollbars, and sliders."
new "## The height of horizontal bars, scrollbars, and sliders. The width of vertical bars, scrollbars, and sliders."
# Automatic translation.
new "## Die Höhe der horizontalen Balken, Bildlaufleisten und Schieberegler. Die Breite der vertikalen Balken, Rollbalken und Schieberegler."
# gui.rpy:311
old "## True if bar images should be tiled. False if they should be linearly scaled."
new "## True if bar images should be tiled. False if they should be linearly scaled."
# Automatic translation.
new "## True, wenn die Balkenbilder gekachelt werden sollen. False, wenn sie linear skaliert werden sollen."
# gui.rpy:316
old "## Horizontal borders."
new "## Horizontal borders."
# Automatic translation.
new "## Horizontale Grenzen."
# gui.rpy:321
old "## Vertical borders."
new "## Vertical borders."
# Automatic translation.
new "## Vertikale Ränder."
# gui.rpy:326
old "## What to do with unscrollable scrollbars in the gui. \"hide\" hides them, while None shows them."
new "## What to do with unscrollable scrollbars in the gui. \"hide\" hides them, while None shows them."
# Automatic translation.
new "## Was man mit nicht scrollbaren Bildlaufleisten in der Benutzeroberfläche macht. \"hide\" blendet sie aus, während \"None\" sie anzeigt."
# gui.rpy:331
old "## History"
new "## History"
# Automatic translation.
new "## Geschichte"
# gui.rpy:333
old "## The history screen displays dialogue that the player has already dismissed."
new "## The history screen displays dialogue that the player has already dismissed."
# Automatic translation.
new "## Der Verlaufsbildschirm zeigt Dialoge an, die der Spieler bereits verworfen hat."
# gui.rpy:335
old "## The number of blocks of dialogue history Ren'Py will keep."
new "## The number of blocks of dialogue history Ren'Py will keep."
# Automatic translation.
new "## Die Anzahl der Blöcke des Dialogverlaufs, die Ren'Py behält."
# gui.rpy:338
old "## The height of a history screen entry, or None to make the height variable at the cost of performance."
new "## The height of a history screen entry, or None to make the height variable at the cost of performance."
# Automatic translation.
new "## Die Höhe eines Eintrags im Verlaufsbildschirm, oder None, um die Höhe auf Kosten der Leistung variabel zu machen."
# gui.rpy:342
old "## The position, width, and alignment of the label giving the name of the speaking character."
new "## The position, width, and alignment of the label giving the name of the speaking character."
# Automatic translation.
new "## Die Position, Breite und Ausrichtung der Beschriftung, die den Namen des sprechenden Zeichens angibt."
# gui.rpy:349
old "## The position, width, and alignment of the dialogue text."
new "## The position, width, and alignment of the dialogue text."
# Automatic translation.
new "## Die Position, Breite und Ausrichtung des Dialogtextes."
# gui.rpy:356
old "## NVL-Mode"
new "## NVL-Mode"
# Automatic translation.
new "## NVL-Modus"
# gui.rpy:358
old "## The NVL-mode screen displays the dialogue spoken by NVL-mode characters."
new "## The NVL-mode screen displays the dialogue spoken by NVL-mode characters."
# Automatic translation.
new "## Der NVL-Modus-Bildschirm zeigt den Dialog an, der von den Charakteren im NVL-Modus gesprochen wird."
# gui.rpy:360
old "## The borders of the background of the NVL-mode background window."
new "## The borders of the background of the NVL-mode background window."
# Automatic translation.
new "## Die Grenzen des Hintergrunds des Hintergrundfensters im NVL-Modus."
# gui.rpy:363
old "## The height of an NVL-mode entry. Set this to None to have the entries dynamically adjust height."
new "## The height of an NVL-mode entry. Set this to None to have the entries dynamically adjust height."
# Automatic translation.
new "## Die Höhe eines Eintrags im NVL-Modus. Setzen Sie dies auf None, um die Höhe der Einträge dynamisch anzupassen."
# gui.rpy:367
old "## The spacing between NVL-mode entries when gui.nvl_height is None, and between NVL-mode entries and an NVL-mode menu."
new "## The spacing between NVL-mode entries when gui.nvl_height is None, and between NVL-mode entries and an NVL-mode menu."
# Automatic translation.
new "## Der Abstand zwischen NVL-Mode-Einträgen, wenn gui.nvl_height None ist, und zwischen NVL-Mode-Einträgen und einem NVL-Mode-Menü."
# gui.rpy:384
old "## The position, width, and alignment of nvl_thought text (the text said by the nvl_narrator character.)"
new "## The position, width, and alignment of nvl_thought text (the text said by the nvl_narrator character.)"
# Automatic translation.
new "## Die Position, Breite und Ausrichtung des nvl_thought-Textes (der Text, der vom nvl_narrator-Zeichen gesprochen wird)."
# gui.rpy:391
old "## The position of nvl menu_buttons."
new "## The position of nvl menu_buttons."
# Automatic translation.
new "## Die Position der nvl menu_buttons."
# gui.rpy:403
old "## This increases the size of the quick buttons to make them easier to touch on tablets and phones."
new "## This increases the size of the quick buttons to make them easier to touch on tablets and phones."
# Automatic translation.
new "## Dadurch werden die Schnellschaltflächen größer, damit sie auf Tablets und Handys leichter zu erreichen sind."
# gui.rpy:409
old "## This changes the size and spacing of various GUI elements to ensure they are easily visible on phones."
new "## This changes the size and spacing of various GUI elements to ensure they are easily visible on phones."
# Automatic translation.
new "## Dies ändert die Größe und die Abstände verschiedener GUI-Elemente, um sicherzustellen, dass sie auf Handys gut sichtbar sind."
# gui.rpy:413
old "## Font sizes."
new "## Font sizes."
# Automatic translation.
new "## Schriftgrößen."
# gui.rpy:421
old "## Adjust the location of the textbox."
new "## Adjust the location of the textbox."
# Automatic translation.
new "## Passen Sie die Position des Textfeldes an."
# gui.rpy:427
old "## Change the size and spacing of items in the game menu."
new "## Change the size and spacing of items in the game menu."
# Automatic translation.
new "## Ändern Sie die Größe und die Abstände der Elemente im Spielmenü."
# gui.rpy:436
old "## File button layout."
new "## File button layout."
# Automatic translation.
new "## Layout der Schaltfläche Datei."
# gui.rpy:440
old "## NVL-mode."
new "## NVL-mode."
# Automatic translation.
new "## NVL-Modus."
# gui.rpy:456
old "## Quick buttons."
new "## Quick buttons."
translate german strings:
# gui/game/gui.rpy:5
old "## The init offset statement causes the initialization statements in this file to run before init statements in any other file."
# Automatic translation.
new "## Die Anweisung init offset bewirkt, dass die Initialisierungsanweisungen in dieser Datei vor den init-Anweisungen in allen anderen Dateien ausgeführt werden."
# gui/game/gui.rpy:14
old "## Enable checks for invalid or unstable properties in screens or transforms"
# Automatic translation.
new "## Prüfungen auf ungültige oder instabile Eigenschaften in Bildschirmen oder Transformationen aktivieren"
# gui/game/gui.rpy:19
old "## GUI Configuration Variables"
# Automatic translation.
new "## GUI-Konfigurationsvariablen"
# gui/game/gui.rpy:167
old "## The color of button text in various states."
# Automatic translation.
new "## Die Farbe des Schaltflächentextes in verschiedenen Zuständen."
# gui/game/gui.rpy:173
old "## The horizontal alignment of the button text. (0.0 is left, 0.5 is center, 1.0 is right)."
# Automatic translation.
new "## Die horizontale Ausrichtung des Schaltflächentextes. (0.0 ist links, 0.5 ist mittig, 1.0 ist rechts)."
# gui/game/gui.rpy:278
old "## The position of the main menu text."
# Automatic translation.
new "## Die Position des Hauptmenütextes."
# gui/game/gui.rpy:287
old "## Generic frames."
# Automatic translation.
new "## Allgemeine Rahmen."
# gui/game/gui.rpy:307
old "## The default GUI only uses sliders and vertical scrollbars. All of the other bars are only used in creator-written screens."
# Automatic translation.
new "## Die Standard-GUI verwendet nur Schieberegler und vertikale Bildlaufleisten. Alle anderen Leisten werden nur in vom Ersteller geschriebenen Bildschirmen verwendet."
# gui/game/gui.rpy:368
old "## The maximum number of NVL-mode entries Ren'Py will display. When more entries than this are to be show, the oldest entry will be removed."
# Automatic translation.
new "## Die maximale Anzahl der Einträge im NVL-Modus, die Ren'Py anzeigt. Wenn mehr Einträge als diese Zahl angezeigt werden sollen, wird der älteste Eintrag entfernt."
# gui/game/gui.rpy:405
old "## Localization"
# Automatic translation.
new "## Lokalisierung"
# gui/game/gui.rpy:407
old "## This controls where a line break is permitted. The default is suitable for most languages. A list of available values can be found at https://www.renpy.org/doc/html/style_properties.html#style-property-language"
# Automatic translation.
new "## Dies steuert, wo ein Zeilenumbruch zulässig ist. Der Standardwert ist für die meisten Sprachen geeignet. Eine Liste der verfügbaren Werte finden Sie unter https://www.renpy.org/doc/html/style_properties.html#style-property-language."
# gui/game/gui.rpy:415
old "## Mobile devices"
# Automatic translation.
new "## Mobile Geräte"
# gui/game/gui.rpy:446
old "## Change the size and spacing of various things."
# Automatic translation.
new "## Ändern Sie die Größe und die Abstände verschiedener Dinge."
File diff suppressed because it is too large Load Diff
+109 -47
View File
@@ -3,119 +3,148 @@ translate german strings:
# options.rpy:1
old "## This file contains options that can be changed to customize your game."
new "## This file contains options that can be changed to customize your game."
# Automatic translation.
new "## Diese Datei enthält Optionen, die geändert werden können, um das Spiel anzupassen."
# options.rpy:4
old "## Lines beginning with two '#' marks are comments, and you shouldn't uncomment them. Lines beginning with a single '#' mark are commented-out code, and you may want to uncomment them when appropriate."
new "## Lines beginning with two '#' marks are comments, and you shouldn't uncomment them. Lines beginning with a single '#' mark are commented-out code, and you may want to uncomment them when appropriate."
# Automatic translation.
new "## Zeilen, die mit zwei '#' beginnen, sind Kommentare und sollten nicht auskommentiert werden. Zeilen, die mit einem einzelnen '#' beginnen, sind auskommentierter Code, den Sie ggf. auskommentieren sollten."
# options.rpy:10
old "## Basics"
new "## Basics"
# Automatic translation.
new "## Grundlagen"
# options.rpy:12
old "## A human-readable name of the game. This is used to set the default window title, and shows up in the interface and error reports."
new "## A human-readable name of the game. This is used to set the default window title, and shows up in the interface and error reports."
# Automatic translation.
new "## Ein für Menschen lesbarer Name des Spiels. Dieser wird verwendet, um den Standard-Fenstertitel festzulegen, und wird in der Benutzeroberfläche und in Fehlerberichten angezeigt."
# options.rpy:15
old "## The _() surrounding the string marks it as eligible for translation."
new "## The _() surrounding the string marks it as eligible for translation."
# Automatic translation.
new "## Das _(), das die Zeichenkette umgibt, kennzeichnet sie als übersetzbar."
# options.rpy:17
old "Ren'Py 7 Default GUI"
new "Ren'Py 7 Default GUI"
# Automatic translation.
new "Ren'Py 7 Standard-GUI"
# options.rpy:20
old "## Determines if the title given above is shown on the main menu screen. Set this to False to hide the title."
new "## Determines if the title given above is shown on the main menu screen. Set this to False to hide the title."
# Automatic translation.
new "## Bestimmt, ob der oben angegebene Titel auf dem Hauptmenübildschirm angezeigt wird. Setzen Sie dies auf False, um den Titel auszublenden."
# options.rpy:26
old "## The version of the game."
new "## The version of the game."
# Automatic translation.
new "## Die Version des Spiels."
# options.rpy:31
old "## Text that is placed on the game's about screen. To insert a blank line between paragraphs, write \\n\\n."
new "## Text that is placed on the game's about screen. To insert a blank line between paragraphs, write \\n\\n."
# Automatic translation.
new "## Text, der auf dem Info-Bildschirm des Spiels erscheint. Um eine Leerzeile zwischen Absätzen einzufügen, schreiben Sie \\n\\n."
# options.rpy:37
old "## A short name for the game used for executables and directories in the built distribution. This must be ASCII-only, and must not contain spaces, colons, or semicolons."
new "## A short name for the game used for executables and directories in the built distribution. This must be ASCII-only, and must not contain spaces, colons, or semicolons."
# Automatic translation.
new "## Ein kurzer Name für das Spiel, der für ausführbare Dateien und Verzeichnisse in der erstellten Distribution verwendet wird. Er darf nur ASCII sein und keine Leerzeichen, Doppelpunkte oder Semikolons enthalten."
# options.rpy:44
old "## Sounds and music"
new "## Sounds and music"
# Automatic translation.
new "## Klänge und Musik"
# options.rpy:46
old "## These three variables control which mixers are shown to the player by default. Setting one of these to False will hide the appropriate mixer."
new "## These three variables control which mixers are shown to the player by default. Setting one of these to False will hide the appropriate mixer."
# Automatic translation.
new "## Diese drei Variablen steuern, welche Mixer dem Spieler standardmäßig angezeigt werden. Wird eine dieser Variablen auf False gesetzt, wird der entsprechende Mischer ausgeblendet."
# options.rpy:55
old "## To allow the user to play a test sound on the sound or voice channel, uncomment a line below and use it to set a sample sound to play."
new "## To allow the user to play a test sound on the sound or voice channel, uncomment a line below and use it to set a sample sound to play."
# Automatic translation.
new "## Um dem Benutzer die Möglichkeit zu geben, einen Testton auf dem Ton- oder Sprachkanal abzuspielen, entfernen Sie die Kommentarzeichen in der Zeile unten und verwenden Sie sie, um einen Beispielton abzuspielen."
# options.rpy:62
old "## Uncomment the following line to set an audio file that will be played while the player is at the main menu. This file will continue playing into the game, until it is stopped or another file is played."
new "## Uncomment the following line to set an audio file that will be played while the player is at the main menu. This file will continue playing into the game, until it is stopped or another file is played."
# Automatic translation.
new "## Uncomment the following line to set an audio file that will be played while the player is at the main menu. Diese Datei wird im Spiel weiter abgespielt, bis sie gestoppt wird oder eine andere Datei abgespielt wird."
# options.rpy:69
old "## Transitions"
new "## Transitions"
# Automatic translation.
new "## Übergänge"
# options.rpy:71
old "## These variables set transitions that are used when certain events occur. Each variable should be set to a transition, or None to indicate that no transition should be used."
new "## These variables set transitions that are used when certain events occur. Each variable should be set to a transition, or None to indicate that no transition should be used."
# Automatic translation.
new "## Diese Variablen legen Übergänge fest, die bei bestimmten Ereignissen verwendet werden. Jede Variable sollte auf einen Übergang gesetzt werden, oder auf \"None\", um anzugeben, dass kein Übergang verwendet werden soll."
# options.rpy:75
old "## Entering or exiting the game menu."
new "## Entering or exiting the game menu."
# Automatic translation.
new "## Aufrufen oder Verlassen des Spielmenüs."
# options.rpy:81
old "## A transition that is used after a game has been loaded."
new "## A transition that is used after a game has been loaded."
# Automatic translation.
new "## Ein Übergang, der verwendet wird, nachdem ein Spiel geladen wurde."
# options.rpy:86
old "## Used when entering the main menu after the game has ended."
new "## Used when entering the main menu after the game has ended."
# Automatic translation.
new "## Wird verwendet, wenn das Hauptmenü nach Beendigung des Spiels aufgerufen wird."
# options.rpy:91
old "## A variable to set the transition used when the game starts does not exist. Instead, use a with statement after showing the initial scene."
new "## A variable to set the transition used when the game starts does not exist. Instead, use a with statement after showing the initial scene."
# Automatic translation.
new "## Eine Variable zum Festlegen des Übergangs, der beim Start des Spiels verwendet wird, existiert nicht. Verwenden Sie stattdessen eine with-Anweisung, nachdem Sie die Anfangsszene gezeigt haben."
# options.rpy:96
old "## Window management"
new "## Window management"
# Automatic translation.
new "## Fensterverwaltung"
# options.rpy:98
old "## This controls when the dialogue window is displayed. If \"show\", it is always displayed. If \"hide\", it is only displayed when dialogue is present. If \"auto\", the window is hidden before scene statements and shown again once dialogue is displayed."
new "## This controls when the dialogue window is displayed. If \"show\", it is always displayed. If \"hide\", it is only displayed when dialogue is present. If \"auto\", the window is hidden before scene statements and shown again once dialogue is displayed."
# Automatic translation.
new "## Dies steuert, wann das Dialogfenster angezeigt wird. Wenn \"show\", wird es immer angezeigt. Wenn \"hide\", wird es nur angezeigt, wenn ein Dialog vorhanden ist. Bei \"auto\" wird das Fenster vor Szenenanweisungen ausgeblendet und wieder eingeblendet, sobald der Dialog angezeigt wird."
# options.rpy:103
old "## After the game has started, this can be changed with the \"window show\", \"window hide\", and \"window auto\" statements."
new "## After the game has started, this can be changed with the \"window show\", \"window hide\", and \"window auto\" statements."
# Automatic translation.
new "## Nachdem das Spiel gestartet wurde, kann dies mit den Anweisungen \"window show\", \"window hide\" und \"window auto\" geändert werden."
# options.rpy:109
old "## Transitions used to show and hide the dialogue window"
new "## Transitions used to show and hide the dialogue window"
# Automatic translation.
new "## Übergänge zum Ein- und Ausblenden des Dialogfensters"
# options.rpy:115
old "## Preference defaults"
new "## Preference defaults"
# Automatic translation.
new "## Präferenzvorgaben"
# options.rpy:117
old "## Controls the default text speed. The default, 0, is infinite, while any other number is the number of characters per second to type out."
new "## Controls the default text speed. The default, 0, is infinite, while any other number is the number of characters per second to type out."
# Automatic translation.
new "## Steuert die Standard-Textgeschwindigkeit. Die Vorgabe 0 ist unendlich, während jede andere Zahl die Anzahl der zu tippenden Zeichen pro Sekunde angibt."
# options.rpy:123
old "## The default auto-forward delay. Larger numbers lead to longer waits, with 0 to 30 being the valid range."
new "## The default auto-forward delay. Larger numbers lead to longer waits, with 0 to 30 being the valid range."
# Automatic translation.
new "## Die Standardverzögerung für die automatische Weiterleitung. Größere Zahlen führen zu längeren Wartezeiten, wobei 0 bis 30 der gültige Bereich ist."
# options.rpy:129
old "## Save directory"
new "## Save directory"
# Automatic translation.
new "## Verzeichnis speichern"
# options.rpy:131
old "## Controls the platform-specific place Ren'Py will place the save files for this game. The save files will be placed in:"
new "## Controls the platform-specific place Ren'Py will place the save files for this game. The save files will be placed in:"
# Automatic translation.
new "## Legt den plattformspezifischen Ort fest, an dem Ren'Py die Speicherdateien für dieses Spiel ablegt. Die Speicherdateien werden in platziert:"
# options.rpy:134
old "## Windows: %APPDATA\\RenPy\\<config.save_directory>"
@@ -131,7 +160,8 @@ translate german strings:
# options.rpy:140
old "## This generally should not be changed, and if it is, should always be a literal string, not an expression."
new "## This generally should not be changed, and if it is, should always be a literal string, not an expression."
# Automatic translation.
new "## Dies sollte in der Regel nicht geändert werden, und wenn doch, dann sollte es sich immer um eine Zeichenkette und nicht um einen Ausdruck handeln."
# options.rpy:146
old "## Icon ########################################################################'"
@@ -139,57 +169,89 @@ translate german strings:
# options.rpy:148
old "## The icon displayed on the taskbar or dock."
new "## The icon displayed on the taskbar or dock."
# Automatic translation.
new "## Das Symbol, das in der Taskleiste oder im Dock angezeigt wird."
# options.rpy:153
old "## Build configuration"
new "## Build configuration"
# Automatic translation.
new "## Konfiguration erstellen"
# options.rpy:155
old "## This section controls how Ren'Py turns your project into distribution files."
new "## This section controls how Ren'Py turns your project into distribution files."
# Automatic translation.
new "## Dieser Abschnitt steuert, wie Ren'Py Ihr Projekt in Distributionsdateien umwandelt."
# options.rpy:160
old "## The following functions take file patterns. File patterns are case- insensitive, and matched against the path relative to the base directory, with and without a leading /. If multiple patterns match, the first is used."
new "## The following functions take file patterns. File patterns are case- insensitive, and matched against the path relative to the base directory, with and without a leading /. If multiple patterns match, the first is used."
# Automatic translation.
new "## Die folgenden Funktionen nehmen Dateimuster an. Die Dateimuster unterscheiden nicht zwischen Groß- und Kleinschreibung und werden mit dem Pfad relativ zum Basisverzeichnis abgeglichen, mit oder ohne führendem /. Wenn mehrere Muster übereinstimmen, wird das erste verwendet."
# options.rpy:165
old "## In a pattern:"
new "## In a pattern:"
# Automatic translation.
new "## In einem Muster:"
# options.rpy:167
old "## / is the directory separator."
new "## / is the directory separator."
# Automatic translation.
new "## / ist das Verzeichnis-Trennzeichen."
# options.rpy:169
old "## * matches all characters, except the directory separator."
new "## * matches all characters, except the directory separator."
# Automatic translation.
new "## * trifft auf alle Zeichen zu, außer auf das Verzeichnistrennzeichen."
# options.rpy:171
old "## ** matches all characters, including the directory separator."
new "## ** matches all characters, including the directory separator."
# options.rpy:173
old "## For example, \"*.txt\" matches txt files in the base directory, \"game/**.ogg\" matches ogg files in the game directory or any of its subdirectories, and \"**.psd\" matches psd files anywhere in the project."
new "## For example, \"*.txt\" matches txt files in the base directory, \"game/**.ogg\" matches ogg files in the game directory or any of its subdirectories, and \"**.psd\" matches psd files anywhere in the project."
# Automatic translation.
new "## ** passt auf alle Zeichen, auch auf das Verzeichnis-Trennzeichen."
# options.rpy:177
old "## Classify files as None to exclude them from the built distributions."
new "## Classify files as None to exclude them from the built distributions."
# Automatic translation.
new "## Klassifizieren Sie Dateien als None, um sie von den erstellten Distributionen auszuschließen."
# options.rpy:185
old "## To archive files, classify them as 'archive'."
new "## To archive files, classify them as 'archive'."
# Automatic translation.
new "## Um Dateien zu archivieren, klassifizieren Sie sie als \"Archiv\"."
# options.rpy:190
old "## Files matching documentation patterns are duplicated in a mac app build, so they appear in both the app and the zip file."
new "## Files matching documentation patterns are duplicated in a mac app build, so they appear in both the app and the zip file."
# Automatic translation.
new "## Dateien, die den Dokumentationsmustern entsprechen, werden in einem Mac-App-Build dupliziert, sodass sie sowohl in der App als auch in der Zip-Datei erscheinen."
# options.rpy:196
old "## A Google Play license key is required to download expansion files and perform in-app purchases. It can be found on the \"Services & APIs\" page of the Google Play developer console."
new "## A Google Play license key is required to download expansion files and perform in-app purchases. It can be found on the \"Services & APIs\" page of the Google Play developer console."
# Automatic translation.
new "## Ein Google Play-Lizenzschlüssel ist erforderlich, um Erweiterungsdateien herunterzuladen und In-App-Käufe durchzuführen. Sie finden ihn auf der Seite \"Services & APIs\" in der Google Play-Entwicklerkonsole."
# options.rpy:203
old "## The username and project name associated with an itch.io project, separated by a slash."
new "## The username and project name associated with an itch.io project, separated by a slash."
# Automatic translation.
new "## Der mit einem itch.io-Projekt verbundene Benutzername und Projektname, getrennt durch einen Schrägstrich."
# gui/game/options.rpy:31
old "## Text that is placed on the game's about screen. Place the text between the triple-quotes, and leave a blank line between paragraphs."
# Automatic translation.
new "## Text, der auf dem Info-Bildschirm des Spiels erscheint. Setzen Sie den Text zwischen die dreifachen Anführungszeichen und lassen Sie eine Leerzeile zwischen den Absätzen."
# gui/game/options.rpy:47
old "## These three variables control, among other things, which mixers are shown to the player by default. Setting one of these to False will hide the appropriate mixer."
# Automatic translation.
new "## Diese drei Variablen steuern unter anderem, welche Mixer dem Spieler standardmäßig angezeigt werden. Wird eine dieser Variablen auf False gesetzt, wird der entsprechende Mischer ausgeblendet."
# gui/game/options.rpy:82
old "## Between screens of the game menu."
# Automatic translation.
new "## Zwischen den Bildschirmen des Spielmenüs."
# gui/game/options.rpy:152
old "## Icon"
new "## Icon"
# gui/game/options.rpy:203
old "## A Google Play license key is required to perform in-app purchases. It can be found in the Google Play developer console, under \"Monetize\" > \"Monetization Setup\" > \"Licensing\"."
# Automatic translation.
new "## Für In-App-Käufe ist ein Google Play-Lizenzschlüssel erforderlich. Sie finden ihn in der Google Play-Entwicklerkonsole unter \"Monetize\" > \"Monetization Setup\" > \"Licensing\"."
+353 -116
View File
@@ -3,23 +3,28 @@ translate german strings:
# screens.rpy:9
old "## Styles"
new "## Styles"
# Automatic translation.
new "## Stile"
# screens.rpy:87
old "## In-game screens"
new "## In-game screens"
# Automatic translation.
new "## Bildschirme im Spiel"
# screens.rpy:91
old "## Say screen"
new "## Say screen"
# Automatic translation.
new "## Sagen Sie Bildschirm"
# screens.rpy:93
old "## The say screen is used to display dialogue to the player. It takes two parameters, who and what, which are the name of the speaking character and the text to be displayed, respectively. (The who parameter can be None if no name is given.)"
new "## The say screen is used to display dialogue to the player. It takes two parameters, who and what, which are the name of the speaking character and the text to be displayed, respectively. (The who parameter can be None if no name is given.)"
# Automatic translation.
new "## Der say-Bildschirm wird verwendet, um dem Spieler einen Dialog anzuzeigen. Er benötigt zwei Parameter, who und what, die den Namen des sprechenden Charakters bzw. den anzuzeigenden Text darstellen. (Der who-Parameter kann None sein, wenn kein Name angegeben wird.)"
# screens.rpy:98
old "## This screen must create a text displayable with id \"what\", as Ren'Py uses this to manage text display. It can also create displayables with id \"who\" and id \"window\" to apply style properties."
new "## This screen must create a text displayable with id \"what\", as Ren'Py uses this to manage text display. It can also create displayables with id \"who\" and id \"window\" to apply style properties."
# Automatic translation.
new "## Dieser Bildschirm muss ein Text-Displayable mit der id \"what\" erstellen, da Ren'Py dieses zur Verwaltung der Textanzeige verwendet. Es kann auch Displayables mit der id \"who\" und id \"window\" erstellen, um Stileigenschaften anzuwenden."
# screens.rpy:102
old "## https://www.renpy.org/doc/html/screen_special.html#say"
@@ -27,15 +32,18 @@ translate german strings:
# screens.rpy:169
old "## Input screen"
new "## Input screen"
# Automatic translation.
new "## Eingabebildschirm"
# screens.rpy:171
old "## This screen is used to display renpy.input. The prompt parameter is used to pass a text prompt in."
new "## This screen is used to display renpy.input. The prompt parameter is used to pass a text prompt in."
# Automatic translation.
new "## Dieser Bildschirm wird zur Anzeige von renpy.input verwendet. Der Prompt-Parameter wird verwendet, um eine Text-Eingabeaufforderung zu übergeben."
# screens.rpy:174
old "## This screen must create an input displayable with id \"input\" to accept the various input parameters."
new "## This screen must create an input displayable with id \"input\" to accept the various input parameters."
# Automatic translation.
new "## Dieser Bildschirm muss eine anzeigbare Eingabe mit der ID \"input\" erstellen, um die verschiedenen Eingabeparameter zu akzeptieren."
# screens.rpy:177
old "## http://www.renpy.org/doc/html/screen_special.html#input"
@@ -43,11 +51,13 @@ translate german strings:
# screens.rpy:205
old "## Choice screen"
new "## Choice screen"
# Automatic translation.
new "## Auswahlbildschirm"
# screens.rpy:207
old "## This screen is used to display the in-game choices presented by the menu statement. The one parameter, items, is a list of objects, each with caption and action fields."
new "## This screen is used to display the in-game choices presented by the menu statement. The one parameter, items, is a list of objects, each with caption and action fields."
# Automatic translation.
new "## Dieser Bildschirm wird verwendet, um die Auswahlmöglichkeiten im Spiel anzuzeigen, die von der Menüanweisung präsentiert werden. Der eine Parameter, items, ist eine Liste von Objekten, jedes mit Beschriftung und Aktionsfeldern."
# screens.rpy:211
old "## http://www.renpy.org/doc/html/screen_special.html#choice"
@@ -55,15 +65,18 @@ translate german strings:
# screens.rpy:221
old "## When this is true, menu captions will be spoken by the narrator. When false, menu captions will be displayed as empty buttons."
new "## When this is true, menu captions will be spoken by the narrator. When false, menu captions will be displayed as empty buttons."
# Automatic translation.
new "## Wenn dies wahr ist, werden die Menübeschriftungen vom Sprecher gesprochen. Bei \"false\" werden die Menübeschriftungen als leere Schaltflächen angezeigt."
# screens.rpy:244
old "## Quick Menu screen"
new "## Quick Menu screen"
# Automatic translation.
new "## Bildschirm Schnellmenü"
# screens.rpy:246
old "## The quick menu is displayed in-game to provide easy access to the out-of-game menus."
new "## The quick menu is displayed in-game to provide easy access to the out-of-game menus."
# Automatic translation.
new "## Das Schnellmenü wird im Spiel angezeigt, um einen einfachen Zugriff auf die Menüs außerhalb des Spiels zu ermöglichen."
# screens.rpy:261
old "Back"
@@ -71,7 +84,8 @@ translate german strings:
# screens.rpy:262
old "History"
new "History"
# Automatic translation.
new "Geschichte"
# screens.rpy:263
old "Skip"
@@ -99,15 +113,18 @@ translate german strings:
# screens.rpy:271
old "## This code ensures that the quick_menu screen is displayed in-game, whenever the player has not explicitly hidden the interface."
new "## This code ensures that the quick_menu screen is displayed in-game, whenever the player has not explicitly hidden the interface."
# Automatic translation.
new "## Dieser Code stellt sicher, dass der quick_menu-Bildschirm im Spiel angezeigt wird, wenn der Spieler die Benutzeroberfläche nicht explizit ausgeblendet hat."
# screens.rpy:291
old "## Navigation screen"
new "## Navigation screen"
# Automatic translation.
new "## Navigationsbildschirm"
# screens.rpy:293
old "## This screen is included in the main and game menus, and provides navigation to other menus, and to start the game."
new "## This screen is included in the main and game menus, and provides navigation to other menus, and to start the game."
# Automatic translation.
new "## Dieser Bildschirm ist im Haupt- und Spielmenü enthalten und ermöglicht die Navigation zu anderen Menüs und den Start des Spiels."
# screens.rpy:308
old "Start"
@@ -115,7 +132,8 @@ translate german strings:
# screens.rpy:316
old "Load"
new "Load"
# Automatic translation.
new "Laden Sie"
# screens.rpy:318
old "Preferences"
@@ -123,7 +141,8 @@ translate german strings:
# screens.rpy:322
old "End Replay"
new "End Replay"
# Automatic translation.
new "Wiederholung beenden"
# screens.rpy:326
old "Main Menu"
@@ -135,7 +154,8 @@ translate german strings:
# screens.rpy:332
old "## Help isn't necessary or relevant to mobile devices."
new "## Help isn't necessary or relevant to mobile devices."
# Automatic translation.
new "## Hilfe ist für mobile Geräte nicht notwendig oder relevant."
# screens.rpy:333
old "Help"
@@ -143,7 +163,8 @@ translate german strings:
# screens.rpy:335
old "## The quit button is banned on iOS and unnecessary on Android."
new "## The quit button is banned on iOS and unnecessary on Android."
# Automatic translation.
new "## Die Beenden-Schaltfläche ist auf iOS verboten und auf Android unnötig."
# screens.rpy:336
old "Quit"
@@ -151,11 +172,13 @@ translate german strings:
# screens.rpy:350
old "## Main Menu screen"
new "## Main Menu screen"
# Automatic translation.
new "## Hauptmenü-Bildschirm"
# screens.rpy:352
old "## Used to display the main menu when Ren'Py starts."
new "## Used to display the main menu when Ren'Py starts."
# Automatic translation.
new "## Wird verwendet, um das Hauptmenü beim Start von Ren'Py anzuzeigen."
# screens.rpy:354
old "## http://www.renpy.org/doc/html/screen_special.html#main-menu"
@@ -163,19 +186,18 @@ translate german strings:
# screens.rpy:369
old "## The use statement includes another screen inside this one. The actual contents of the main menu are in the navigation screen."
new "## The use statement includes another screen inside this one. The actual contents of the main menu are in the navigation screen."
# Automatic translation.
new "## Die Anweisung use enthält einen weiteren Bildschirm innerhalb dieses Bildschirms. Der eigentliche Inhalt des Hauptmenüs befindet sich auf dem Navigationsbildschirm."
# screens.rpy:413
old "## Game Menu screen"
new "## Game Menu screen"
# Automatic translation.
new "## Bildschirm Spielmenü"
# screens.rpy:415
old "## This lays out the basic common structure of a game menu screen. It's called with the screen title, and displays the background, title, and navigation."
new "## This lays out the basic common structure of a game menu screen. It's called with the screen title, and displays the background, title, and navigation."
# screens.rpy:418
old "## The scroll parameter can be None, or one of \"viewport\" or \"vpgrid\". When this screen is intended to be used with one or more children, which are transcluded (placed) inside it."
new "## The scroll parameter can be None, or one of \"viewport\" or \"vpgrid\". When this screen is intended to be used with one or more children, which are transcluded (placed) inside it."
# Automatic translation.
new "## Hier wird die allgemeine Grundstruktur eines Spielmenübildschirms festgelegt. Es wird mit dem Bildschirmtitel aufgerufen und zeigt den Hintergrund, den Titel und die Navigation an."
# screens.rpy:476
old "Return"
@@ -183,19 +205,23 @@ translate german strings:
# screens.rpy:539
old "## About screen"
new "## About screen"
# Automatic translation.
new "## Über den Bildschirm"
# screens.rpy:541
old "## This screen gives credit and copyright information about the game and Ren'Py."
new "## This screen gives credit and copyright information about the game and Ren'Py."
# Automatic translation.
new "## Dieser Bildschirm enthält Kredit- und Copyright-Informationen über das Spiel und Ren'Py."
# screens.rpy:544
old "## There's nothing special about this screen, and hence it also serves as an example of how to make a custom screen."
new "## There's nothing special about this screen, and hence it also serves as an example of how to make a custom screen."
# Automatic translation.
new "## Dieser Bildschirm ist nichts Besonderes und dient daher auch als Beispiel für die Erstellung eines benutzerdefinierten Bildschirms."
# screens.rpy:551
old "## This use statement includes the game_menu screen inside this one. The vbox child is then included inside the viewport inside the game_menu screen."
new "## This use statement includes the game_menu screen inside this one. The vbox child is then included inside the viewport inside the game_menu screen."
# Automatic translation.
new "## Diese Anweisung schließt den Bildschirm game_menu in diesen Bildschirm ein. Das vbox-Kind wird dann in das Viewport innerhalb des game_menu-Bildschirms aufgenommen."
# screens.rpy:561
old "Version [config.version!t]\n"
@@ -203,23 +229,28 @@ translate german strings:
# screens.rpy:563
old "## gui.about is usually set in options.rpy."
new "## gui.about is usually set in options.rpy."
# Automatic translation.
new "## gui.about wird normalerweise in options.rpy eingestellt."
# screens.rpy:567
old "Made with {a=https://www.renpy.org/}Ren'Py{/a} [renpy.version_only].\n\n[renpy.license!t]"
new "Made with {a=https://www.renpy.org/}Ren'Py{/a} [renpy.version_only].\n\n[renpy.license!t]"
# Automatic translation.
new "Hergestellt mit {a=https://www.renpy.org/}Ren'Py{/a} [renpy.version_only] .\n\n[renpy.license!t]"
# screens.rpy:570
old "## This is redefined in options.rpy to add text to the about screen."
new "## This is redefined in options.rpy to add text to the about screen."
# Automatic translation.
new "## Dies wird in options.rpy neu definiert, um dem Info-Bildschirm Text hinzuzufügen."
# screens.rpy:582
old "## Load and Save screens"
new "## Load and Save screens"
# Automatic translation.
new "## Bildschirme laden und speichern"
# screens.rpy:584
old "## These screens are responsible for letting the player save the game and load it again. Since they share nearly everything in common, both are implemented in terms of a third screen, file_slots."
new "## These screens are responsible for letting the player save the game and load it again. Since they share nearly everything in common, both are implemented in terms of a third screen, file_slots."
# Automatic translation.
new "## Diese Bildschirme sind dafür verantwortlich, dass der Spieler das Spiel speichern und wieder laden kann. Da sie fast alles gemeinsam haben, sind beide in Form eines dritten Bildschirms, file_slots, implementiert."
# screens.rpy:588
old "## https://www.renpy.org/doc/html/screen_special.html#save https://www.renpy.org/doc/html/screen_special.html#load"
@@ -227,23 +258,28 @@ translate german strings:
# screens.rpy:607
old "Page {}"
new "Page {}"
# Automatic translation.
new "Seite {}"
# screens.rpy:607
old "Automatic saves"
new "Automatic saves"
# Automatic translation.
new "Automatisch speichern"
# screens.rpy:607
old "Quick saves"
new "Quick saves"
# Automatic translation.
new "Schnelles Speichern"
# screens.rpy:613
old "## This ensures the input will get the enter event before any of the buttons do."
new "## This ensures the input will get the enter event before any of the buttons do."
# Automatic translation.
new "## Dies stellt sicher, dass die Eingabe das Enter-Ereignis erhält, bevor es eine der Schaltflächen tut."
# screens.rpy:629
old "## The grid of file slots."
new "## The grid of file slots."
# Automatic translation.
new "## Das Raster der Dateislots."
# screens.rpy:649
old "{#file_time}%A, %B %d %Y, %H:%M"
@@ -251,11 +287,13 @@ translate german strings:
# screens.rpy:649
old "empty slot"
new "empty slot"
# Automatic translation.
new "leerer Steckplatz"
# screens.rpy:657
old "## Buttons to access other pages."
new "## Buttons to access other pages."
# Automatic translation.
new "## Schaltflächen für den Zugriff auf andere Seiten."
# screens.rpy:666
old "<"
@@ -275,11 +313,13 @@ translate german strings:
# screens.rpy:711
old "## Preferences screen"
new "## Preferences screen"
# Automatic translation.
new "## Bildschirm Präferenzen"
# screens.rpy:713
old "## The preferences screen allows the player to configure the game to better suit themselves."
new "## The preferences screen allows the player to configure the game to better suit themselves."
# Automatic translation.
new "## Der Einstellungsbildschirm ermöglicht es dem Spieler, das Spiel so zu konfigurieren, dass es besser zu ihm passt."
# screens.rpy:716
old "## https://www.renpy.org/doc/html/screen_special.html#preferences"
@@ -299,23 +339,28 @@ translate german strings:
# screens.rpy:744
old "Rollback Side"
new "Rollback Side"
# Automatic translation.
new "Rollback Seite"
# screens.rpy:745
old "Disable"
new "Disable"
# Automatic translation.
new "Deaktivieren Sie"
# screens.rpy:746
old "Left"
new "Left"
# Automatic translation.
new "Links"
# screens.rpy:747
old "Right"
new "Right"
# Automatic translation.
new "Rechts"
# screens.rpy:752
old "Unseen Text"
new "Unseen Text"
# Automatic translation.
new "Unsichtbarer Text"
# screens.rpy:753
old "After Choices"
@@ -327,7 +372,8 @@ translate german strings:
# screens.rpy:756
old "## Additional vboxes of type \"radio_pref\" or \"check_pref\" can be added here, to add additional creator-defined preferences."
new "## Additional vboxes of type \"radio_pref\" or \"check_pref\" can be added here, to add additional creator-defined preferences."
# Automatic translation.
new "## Hier können zusätzliche vboxes vom Typ \"radio_pref\" oder \"check_pref\" hinzugefügt werden, um weitere vom Ersteller definierte Einstellungen hinzuzufügen."
# screens.rpy:767
old "Text Speed"
@@ -355,15 +401,18 @@ translate german strings:
# screens.rpy:806
old "Mute All"
new "Mute All"
# Automatic translation.
new "Alle stummschalten"
# screens.rpy:882
old "## History screen"
new "## History screen"
# Automatic translation.
new "## Bildschirm Geschichte"
# screens.rpy:884
old "## This is a screen that displays the dialogue history to the player. While there isn't anything special about this screen, it does have to access the dialogue history stored in _history_list."
new "## This is a screen that displays the dialogue history to the player. While there isn't anything special about this screen, it does have to access the dialogue history stored in _history_list."
# Automatic translation.
new "## Dies ist ein Bildschirm, der dem Spieler den Dialogverlauf anzeigt. Es gibt zwar nichts Besonderes an diesem Bildschirm, aber er muss auf den Dialogverlauf zugreifen, der in _history_list gespeichert ist."
# screens.rpy:888
old "## https://www.renpy.org/doc/html/history.html"
@@ -371,35 +420,43 @@ translate german strings:
# screens.rpy:894
old "## Avoid predicting this screen, as it can be very large."
new "## Avoid predicting this screen, as it can be very large."
# Automatic translation.
new "## Vermeiden Sie es, diesen Bildschirm vorherzusehen, da er sehr groß sein kann."
# screens.rpy:905
old "## This lays things out properly if history_height is None."
new "## This lays things out properly if history_height is None."
# Automatic translation.
new "## Dies legt die Dinge richtig aus, wenn history_height None ist."
# screens.rpy:914
old "## Take the color of the who text from the Character, if set."
new "## Take the color of the who text from the Character, if set."
# Automatic translation.
new "## Übernimmt die Farbe des Wer-Textes aus dem Zeichen, falls festgelegt."
# screens.rpy:921
old "The dialogue history is empty."
new "The dialogue history is empty."
# Automatic translation.
new "Der Dialogverlauf ist leer."
# screens.rpy:965
old "## Help screen"
new "## Help screen"
# Automatic translation.
new "## Hilfe-Bildschirm"
# screens.rpy:967
old "## A screen that gives information about key and mouse bindings. It uses other screens (keyboard_help, mouse_help, and gamepad_help) to display the actual help."
new "## A screen that gives information about key and mouse bindings. It uses other screens (keyboard_help, mouse_help, and gamepad_help) to display the actual help."
# Automatic translation.
new "## Ein Bildschirm, der Informationen über Tasten- und Mausbelegungen liefert. Er verwendet andere Bildschirme (keyboard_help, mouse_help und gamepad_help), um die eigentliche Hilfe anzuzeigen."
# screens.rpy:986
old "Keyboard"
new "Keyboard"
# Automatic translation.
new "Tastatur"
# screens.rpy:987
old "Mouse"
new "Mouse"
# Automatic translation.
new "Maus"
# screens.rpy:990
old "Gamepad"
@@ -407,43 +464,53 @@ translate german strings:
# screens.rpy:1003
old "Enter"
new "Enter"
# Automatic translation.
new "Eingabe"
# screens.rpy:1004
old "Advances dialogue and activates the interface."
new "Advances dialogue and activates the interface."
# Automatic translation.
new "Erweitert den Dialog und aktiviert die Schnittstelle."
# screens.rpy:1007
old "Space"
new "Space"
# Automatic translation.
new "Weltraum"
# screens.rpy:1008
old "Advances dialogue without selecting choices."
new "Advances dialogue without selecting choices."
# Automatic translation.
new "Bringt den Dialog voran, ohne eine Auswahl zu treffen."
# screens.rpy:1011
old "Arrow Keys"
new "Arrow Keys"
# Automatic translation.
new "Pfeil-Tasten"
# screens.rpy:1012
old "Navigate the interface."
new "Navigate the interface."
# Automatic translation.
new "Navigieren Sie durch die Schnittstelle."
# screens.rpy:1015
old "Escape"
new "Escape"
# Automatic translation.
new "Flucht"
# screens.rpy:1016
old "Accesses the game menu."
new "Accesses the game menu."
# Automatic translation.
new "Ruft das Spielmenü auf."
# screens.rpy:1019
old "Ctrl"
new "Ctrl"
# Automatic translation.
new "Strg"
# screens.rpy:1020
old "Skips dialogue while held down."
new "Skips dialogue while held down."
# Automatic translation.
new "Überspringt Dialoge, wenn Sie die Taste gedrückt halten."
# screens.rpy:1023
old "Tab"
@@ -451,75 +518,93 @@ translate german strings:
# screens.rpy:1024
old "Toggles dialogue skipping."
new "Toggles dialogue skipping."
# Automatic translation.
new "Schaltet das Überspringen von Dialogen ein."
# screens.rpy:1027
old "Page Up"
new "Page Up"
# Automatic translation.
new "Seite oben"
# screens.rpy:1028
old "Rolls back to earlier dialogue."
new "Rolls back to earlier dialogue."
# Automatic translation.
new "Kehrt zu einem früheren Dialog zurück."
# screens.rpy:1031
old "Page Down"
new "Page Down"
# Automatic translation.
new "Seite unten"
# screens.rpy:1032
old "Rolls forward to later dialogue."
new "Rolls forward to later dialogue."
# Automatic translation.
new "Weiter geht's mit einem späteren Dialog."
# screens.rpy:1036
old "Hides the user interface."
new "Hides the user interface."
# Automatic translation.
new "Blendet die Benutzeroberfläche aus."
# screens.rpy:1040
old "Takes a screenshot."
new "Takes a screenshot."
# Automatic translation.
new "Nimmt einen Screenshot auf."
# screens.rpy:1044
old "Toggles assistive {a=https://www.renpy.org/l/voicing}self-voicing{/a}."
new "Toggles assistive {a=https://www.renpy.org/l/voicing}self-voicing{/a}."
# Automatic translation.
new "Schaltet das Hilfsmittel {a=https://www.renpy.org/l/voicing}selbststimmend{/a} um."
# screens.rpy:1050
old "Left Click"
new "Left Click"
# Automatic translation.
new "Links klicken"
# screens.rpy:1054
old "Middle Click"
new "Middle Click"
# Automatic translation.
new "Mittlerer Klick"
# screens.rpy:1058
old "Right Click"
new "Right Click"
# Automatic translation.
new "Rechtsklick"
# screens.rpy:1062
old "Mouse Wheel Up\nClick Rollback Side"
new "Mouse Wheel Up\nClick Rollback Side"
# Automatic translation.
new "Mausrad nach oben\nKlicken Sie auf Rollback Seite"
# screens.rpy:1066
old "Mouse Wheel Down"
new "Mouse Wheel Down"
# Automatic translation.
new "Mausrad nach unten"
# screens.rpy:1073
old "Right Trigger\nA/Bottom Button"
new "Right Trigger\nA/Bottom Button"
# Automatic translation.
new "Rechter Auslöser\nA/Unterer Knopf"
# screens.rpy:1074
old "Advance dialogue and activates the interface."
new "Advance dialogue and activates the interface."
# Automatic translation.
new "Erweitert den Dialog und aktiviert die Schnittstelle."
# screens.rpy:1078
old "Roll back to earlier dialogue."
new "Roll back to earlier dialogue."
# Automatic translation.
new "Gehen Sie zu einem früheren Dialog zurück."
# screens.rpy:1081
old "Right Shoulder"
new "Right Shoulder"
# Automatic translation.
new "Rechte Schulter"
# screens.rpy:1082
old "Roll forward to later dialogue."
new "Roll forward to later dialogue."
# Automatic translation.
new "Spulen Sie vor zu einem späteren Dialog."
# screens.rpy:1085
old "D-Pad, Sticks"
@@ -527,31 +612,38 @@ translate german strings:
# screens.rpy:1089
old "Start, Guide"
new "Start, Guide"
# Automatic translation.
new "Start, Leitfaden"
# screens.rpy:1090
old "Access the game menu."
new "Access the game menu."
# Automatic translation.
new "Rufen Sie das Spielmenü auf."
# screens.rpy:1093
old "Y/Top Button"
new "Y/Top Button"
# Automatic translation.
new "Y/Top-Taste"
# screens.rpy:1096
old "Calibrate"
new "Calibrate"
# Automatic translation.
new "Kalibrieren Sie"
# screens.rpy:1124
old "## Additional screens"
new "## Additional screens"
# Automatic translation.
new "## Zusätzliche Bildschirme"
# screens.rpy:1128
old "## Confirm screen"
new "## Confirm screen"
# Automatic translation.
new "## Bildschirm bestätigen"
# screens.rpy:1130
old "## The confirm screen is called when Ren'Py wants to ask the player a yes or no question."
new "## The confirm screen is called when Ren'Py wants to ask the player a yes or no question."
# Automatic translation.
new "## Der Bestätigungsbildschirm wird aufgerufen, wenn Ren'Py dem Spieler eine Ja- oder Nein-Frage stellen will."
# screens.rpy:1133
old "## http://www.renpy.org/doc/html/screen_special.html#confirm"
@@ -559,7 +651,8 @@ translate german strings:
# screens.rpy:1137
old "## Ensure other screens do not get input while this screen is displayed."
new "## Ensure other screens do not get input while this screen is displayed."
# Automatic translation.
new "## Stellen Sie sicher, dass andere Bildschirme keine Eingaben erhalten, während dieser Bildschirm angezeigt wird."
# screens.rpy:1161
old "Yes"
@@ -571,15 +664,18 @@ translate german strings:
# screens.rpy:1164
old "## Right-click and escape answer \"no\"."
new "## Right-click and escape answer \"no\"."
# Automatic translation.
new "## Klicken Sie mit der rechten Maustaste und geben Sie die Antwort \"Nein\" ein."
# screens.rpy:1191
old "## Skip indicator screen"
new "## Skip indicator screen"
# Automatic translation.
new "## Indikatorbildschirm überspringen"
# screens.rpy:1193
old "## The skip_indicator screen is displayed to indicate that skipping is in progress."
new "## The skip_indicator screen is displayed to indicate that skipping is in progress."
# Automatic translation.
new "## Der Bildschirm skip_indicator wird angezeigt, um zu signalisieren, dass das Überspringen im Gange ist."
# screens.rpy:1196
old "## https://www.renpy.org/doc/html/screen_special.html#skip-indicator"
@@ -587,19 +683,23 @@ translate german strings:
# screens.rpy:1208
old "Skipping"
new "Skipping"
# Automatic translation.
new "Überspringen"
# screens.rpy:1215
old "## This transform is used to blink the arrows one after another."
new "## This transform is used to blink the arrows one after another."
# Automatic translation.
new "## Diese Transformation wird verwendet, um die Pfeile nacheinander zu blinken."
# screens.rpy:1247
old "## Notify screen"
new "## Notify screen"
# Automatic translation.
new "## Bildschirm benachrichtigen"
# screens.rpy:1249
old "## The notify screen is used to show the player a message. (For example, when the game is quicksaved or a screenshot has been taken.)"
new "## The notify screen is used to show the player a message. (For example, when the game is quicksaved or a screenshot has been taken.)"
# Automatic translation.
new "## Der Benachrichtigungsbildschirm wird verwendet, um dem Spieler eine Nachricht anzuzeigen. (Zum Beispiel, wenn das Spiel schnell gespeichert wird oder ein Screenshot gemacht wurde)."
# screens.rpy:1252
old "## https://www.renpy.org/doc/html/screen_special.html#notify-screen"
@@ -607,11 +707,13 @@ translate german strings:
# screens.rpy:1286
old "## NVL screen"
new "## NVL screen"
# Automatic translation.
new "## NVL-Bildschirm"
# screens.rpy:1288
old "## This screen is used for NVL-mode dialogue and menus."
new "## This screen is used for NVL-mode dialogue and menus."
# Automatic translation.
new "## Dieser Bildschirm wird für den Dialog und die Menüs im NVL-Modus verwendet."
# screens.rpy:1290
old "## http://www.renpy.org/doc/html/screen_special.html#nvl"
@@ -619,25 +721,160 @@ translate german strings:
# screens.rpy:1301
old "## Displays dialogue in either a vpgrid or the vbox."
new "## Displays dialogue in either a vpgrid or the vbox."
# Automatic translation.
new "## Zeigt den Dialog entweder in einem vpgrid oder in der vbox an."
# screens.rpy:1314
old "## Displays the menu, if given. The menu may be displayed incorrectly if config.narrator_menu is set to True, as it is above."
new "## Displays the menu, if given. The menu may be displayed incorrectly if config.narrator_menu is set to True, as it is above."
# Automatic translation.
new "## Zeigt das Menü an, falls vorhanden. Das Menü kann falsch angezeigt werden, wenn config.narrator_menu auf True gesetzt ist, wie es oben der Fall ist."
# screens.rpy:1344
old "## This controls the maximum number of NVL-mode entries that can be displayed at once."
new "## This controls the maximum number of NVL-mode entries that can be displayed at once."
# Automatic translation.
new "## Dies steuert die maximale Anzahl der Einträge im NVL-Modus, die gleichzeitig angezeigt werden können."
# screens.rpy:1406
old "## Mobile Variants"
new "## Mobile Variants"
# Automatic translation.
new "## Mobile Varianten"
# screens.rpy:1413
old "## Since a mouse may not be present, we replace the quick menu with a version that uses fewer and bigger buttons that are easier to touch."
new "## Since a mouse may not be present, we replace the quick menu with a version that uses fewer and bigger buttons that are easier to touch."
# Automatic translation.
new "## Da eine Maus möglicherweise nicht vorhanden ist, ersetzen wir das Schnellmenü durch eine Version mit weniger und größeren Tasten, die leichter zu berühren sind."
# screens.rpy:1429
old "Menu"
new "Menu"
# Automatic translation.
new "Menü"
translate german strings:
# gui/game/screens.rpy:114
old "## If there's a side image, display it above the text. Do not display on the phone variant - there's no room."
# Automatic translation.
new "## Wenn es ein Seitenbild gibt, zeigen Sie es über dem Text an. Nicht auf der Telefonvariante anzeigen - dort ist kein Platz."
# gui/game/screens.rpy:120
old "## Make the namebox available for styling through the Character object."
# Automatic translation.
new "## Machen Sie das Namensfeld für die Gestaltung durch das Character-Objekt verfügbar."
# gui/game/screens.rpy:173
old "## https://www.renpy.org/doc/html/screen_special.html#input"
new "## https://www.renpy.org/doc/html/screen_special.html#input"
# gui/game/screens.rpy:206
old "## https://www.renpy.org/doc/html/screen_special.html#choice"
new "## https://www.renpy.org/doc/html/screen_special.html#choice"
# gui/game/screens.rpy:241
old "## Ensure this appears on top of other screens."
# Automatic translation.
new "## Stellen Sie sicher, dass dies über den anderen Bildschirmen erscheint."
# gui/game/screens.rpy:280
old "## Main and Game Menu Screens"
# Automatic translation.
new "## Haupt- und Spielmenü-Bildschirme"
# gui/game/screens.rpy:329
old "## The quit button is banned on iOS and unnecessary on Android and Web."
# Automatic translation.
new "## Die Beenden-Schaltfläche ist auf iOS verboten und auf Android und Web unnötig."
# gui/game/screens.rpy:348
old "## https://www.renpy.org/doc/html/screen_special.html#main-menu"
new "## https://www.renpy.org/doc/html/screen_special.html#main-menu"
# gui/game/screens.rpy:352
old "## This ensures that any other menu screen is replaced."
# Automatic translation.
new "## Dadurch wird sichergestellt, dass jeder andere Menübildschirm ersetzt wird."
# gui/game/screens.rpy:357
old "## This empty frame darkens the main menu."
# Automatic translation.
new "## Dieser leere Rahmen verdunkelt das Hauptmenü."
# gui/game/screens.rpy:429
old "## Reserve space for the navigation section."
# Automatic translation.
new "## Reservieren Sie Platz für den Navigationsbereich."
# gui/game/screens.rpy:608
old "## The page name, which can be edited by clicking on a button."
# Automatic translation.
new "## Der Seitenname, der durch Klicken auf eine Schaltfläche bearbeitet werden kann."
# gui/game/screens.rpy:668
old "## range(1, 10) gives the numbers from 1 to 9."
# Automatic translation.
new "## bereich(1, 10) liefert die Zahlen von 1 bis 9."
# gui/game/screens.rpy:676
old "Upload Sync"
# Automatic translation.
new "Sync hochladen"
# gui/game/screens.rpy:680
old "Download Sync"
# Automatic translation.
new "Sync herunterladen"
# gui/game/screens.rpy:921
old "## This determines what tags are allowed to be displayed on the history screen."
# Automatic translation.
new "## Hier wird festgelegt, welche Tags auf dem Verlaufsbildschirm angezeigt werden dürfen."
# gui/game/screens.rpy:1049
old "Opens the accessibility menu."
# Automatic translation.
new "Öffnet das Menü Barrierefreiheit."
# gui/game/screens.rpy:1082
old "Left Trigger\nLeft Shoulder"
# Automatic translation.
new "Linker Auslöser\nLinke Schulter"
# gui/game/screens.rpy:1139
old "## https://www.renpy.org/doc/html/screen_special.html#confirm"
new "## https://www.renpy.org/doc/html/screen_special.html#confirm"
# gui/game/screens.rpy:1248
old "## We have to use a font that has the BLACK RIGHT-POINTING SMALL TRIANGLE glyph in it."
# Automatic translation.
new "## Wir müssen eine Schriftart verwenden, die die Glyphe BLACK RIGHT-POINTING SMALL TRIANGLE enthält."
# gui/game/screens.rpy:1296
old "## https://www.renpy.org/doc/html/screen_special.html#nvl"
new "## https://www.renpy.org/doc/html/screen_special.html#nvl"
# gui/game/screens.rpy:1320
old "## Displays the menu, if given. The menu may be displayed incorrectly if config.narrator_menu is set to True."
# Automatic translation.
new "## Zeigt das Menü an, falls vorhanden. Das Menü wird möglicherweise nicht korrekt angezeigt, wenn config.narrator_menu auf True gesetzt ist."
# gui/game/screens.rpy:1410
old "## Bubble screen"
# Automatic translation.
new "## Blasenbildschirm"
# gui/game/screens.rpy:1412
old "## The bubble screen is used to display dialogue to the player when using speech bubbles. The bubble screen takes the same parameters as the say screen, must create a displayable with the id of \"what\", and can create displayables with the \"namebox\", \"who\", and \"window\" ids."
# Automatic translation.
new "## Der Sprechblasenbildschirm wird verwendet, um dem Spieler einen Dialog anzuzeigen, wenn Sprechblasen verwendet werden. Der Sprechblasenbildschirm benötigt die gleichen Parameter wie der Sprechblasenbildschirm, muss ein Displayable mit der Id \"what\" erstellen und kann Displayables mit den Ids \"namebox\", \"who\" und \"window\" erstellen."
# gui/game/screens.rpy:1417
old "## https://www.renpy.org/doc/html/bubble.html#bubble-screen"
new "## https://www.renpy.org/doc/html/bubble.html#bubble-screen"
translate german strings:
# gui/game/screens.rpy:411
old "## The scroll parameter can be None, or one of \"viewport\" or \"vpgrid\". This screen is intended to be used with one or more children, which are transcluded (placed) inside it."
# Automatic translation.
new "## Der Parameter scroll kann None oder einer der Parameter \"viewport\" oder \"vpgrid\" sein. Dieser Bildschirm soll mit einem oder mehreren Kindern verwendet werden, die in ihn eingeschlossen (platziert) werden."
+654 -3
View File
@@ -199,7 +199,8 @@ translate greek strings:
# 00gui.rpy:236
old "Are you sure you want to skip unseen dialogue to the next choice?"
new "Are you sure you want to skip unseen dialogue to the next choice?"
# Automatic translation.
new "Είστε σίγουροι ότι θέλετε να παραλείψετε τον αθέατο διάλογο για την επόμενη επιλογή;"
# 00keymap.rpy:250
old "Saved screenshot as %s."
@@ -223,7 +224,8 @@ translate greek strings:
# 00library.rpy:262
old "This program contains free software under a number of licenses, including the MIT License and GNU Lesser General Public License. A complete list of software, including links to full source code, can be found {a=https://www.renpy.org/l/license}here{/a}."
new "This program contains free software under a number of licenses, including the MIT License and GNU Lesser General Public License. A complete list of software, including links to full source code, can be found {a=https://www.renpy.org/l/license}here{/a}."
# Automatic translation.
new "Αυτό το πρόγραμμα περιέχει ελεύθερο λογισμικό υπό διάφορες άδειες χρήσης, συμπεριλαμβανομένης της Άδειας MIT και της Άδειας GNU Lesser General Public License. Ένας πλήρης κατάλογος του λογισμικού, συμπεριλαμβανομένων των συνδέσμων προς τον πλήρη πηγαίο κώδικα, μπορεί να βρεθεί {a=https://www.renpy.org/l/license}εδώ{/a}."
# 00preferences.rpy:422
old "Clipboard voicing enabled. Press 'shift+C' to disable."
@@ -239,7 +241,8 @@ translate greek strings:
# 00iap.rpy:217
old "Contacting App Store\nPlease Wait..."
new "Contacting App Store\nPlease Wait..."
# Automatic translation.
new "Επικοινωνία με το App Store\nΠαρακαλώ περιμένετε..."
# 00updater.rpy:367
old "The Ren'Py Updater is not supported on mobile devices."
@@ -333,3 +336,651 @@ translate greek strings:
old "return"
new "επιστροφή"
translate greek strings:
# renpy/common/00accessibility.rpy:32
old "bar"
# Automatic translation.
new "μπαρ"
# renpy/common/00accessibility.rpy:33
old "selected"
# Automatic translation.
new "επιλεγμένο"
# renpy/common/00accessibility.rpy:34
old "viewport"
# Automatic translation.
new "παράθυρο προβολής"
# renpy/common/00accessibility.rpy:35
old "horizontal scroll"
# Automatic translation.
new "οριζόντια κύλιση"
# renpy/common/00accessibility.rpy:36
old "vertical scroll"
# Automatic translation.
new "κατακόρυφη κύλιση"
# renpy/common/00accessibility.rpy:37
old "activate"
# Automatic translation.
new "ενεργοποιήστε το"
# renpy/common/00accessibility.rpy:38
old "deactivate"
# Automatic translation.
new "απενεργοποίηση"
# renpy/common/00accessibility.rpy:39
old "increase"
# Automatic translation.
new "αύξηση"
# renpy/common/00accessibility.rpy:40
old "decrease"
# Automatic translation.
new "μείωση"
# renpy/common/00accessibility.rpy:138
old "Font Override"
# Automatic translation.
new "Παράκαμψη γραμματοσειράς"
# renpy/common/00accessibility.rpy:142
old "Default"
# Automatic translation.
new "Προεπιλογή"
# renpy/common/00accessibility.rpy:146
old "DejaVu Sans"
new "DejaVu Sans"
# renpy/common/00accessibility.rpy:150
old "Opendyslexic"
new "Opendyslexic"
# renpy/common/00accessibility.rpy:156
old "Text Size Scaling"
# Automatic translation.
new "Κλιμάκωση μεγέθους κειμένου"
# renpy/common/00accessibility.rpy:162
old "Reset"
# Automatic translation.
new "Επαναφορά"
# renpy/common/00accessibility.rpy:168
old "Line Spacing Scaling"
# Automatic translation.
new "Απόσταση γραμμής Κλιμάκωση"
# renpy/common/00accessibility.rpy:180
old "High Contrast Text"
# Automatic translation.
new "Κείμενο υψηλής αντίθεσης"
# renpy/common/00accessibility.rpy:193
old "Self-Voicing"
# Automatic translation.
new "Αυτο-ομιλία"
# renpy/common/00accessibility.rpy:197
old "Off"
new "Off"
# renpy/common/00accessibility.rpy:201
old "Text-to-speech"
# Automatic translation.
new "Μετατροπή κειμένου σε ομιλία"
# renpy/common/00accessibility.rpy:205
old "Clipboard"
# Automatic translation.
new "Πρόχειρο"
# renpy/common/00accessibility.rpy:209
old "Debug"
# Automatic translation.
new "Αποσφαλμάτωση"
# renpy/common/00accessibility.rpy:223
old "Self-Voicing Volume Drop"
# Automatic translation.
new "Πτώση όγκου αυτο-ομιλίας"
# renpy/common/00accessibility.rpy:234
old "The options on this menu are intended to improve accessibility. They may not work with all games, and some combinations of options may render the game unplayable. This is not an issue with the game or engine. For the best results when changing fonts, try to keep the text size the same as it originally was."
# Automatic translation.
new "Οι επιλογές σε αυτό το μενού αποσκοπούν στη βελτίωση της προσβασιμότητας. Ενδέχεται να μην λειτουργούν με όλα τα παιχνίδια και ορισμένοι συνδυασμοί επιλογών ενδέχεται να καταστήσουν το παιχνίδι μη αναπαραγώγιμο. Αυτό δεν αποτελεί πρόβλημα με το παιχνίδι ή τη μηχανή. Για καλύτερα αποτελέσματα κατά την αλλαγή των γραμματοσειρών, προσπαθήστε να διατηρήσετε το μέγεθος του κειμένου στο ίδιο μέγεθος με το αρχικό."
# renpy/common/00action_file.rpy:378
old "Save slot %s: [text]"
# Automatic translation.
new "Αποθήκευση υποδοχής %s: [text]"
# renpy/common/00action_file.rpy:461
old "Load slot %s: [text]"
# Automatic translation.
new "Φορτώστε την υποδοχή %s: [text]"
# renpy/common/00action_file.rpy:514
old "Delete slot [text]"
# Automatic translation.
new "Διαγραφή υποδοχής [text]"
# renpy/common/00action_file.rpy:593
old "File page auto"
# Automatic translation.
new "Αυτόματη σελίδα αρχείου"
# renpy/common/00action_file.rpy:595
old "File page quick"
# Automatic translation.
new "Σελίδα αρχείου γρήγορη"
# renpy/common/00action_file.rpy:597
old "File page [text]"
# Automatic translation.
new "Σελίδα αρχείου [text]"
# renpy/common/00action_file.rpy:796
old "Next file page."
# Automatic translation.
new "Επόμενη σελίδα αρχείου."
# renpy/common/00action_file.rpy:868
old "Previous file page."
# Automatic translation.
new "Προηγούμενη σελίδα αρχείου."
# renpy/common/00action_file.rpy:944
old "Quick save."
# Automatic translation.
new "Γρήγορη αποθήκευση."
# renpy/common/00action_file.rpy:963
old "Quick load."
# Automatic translation.
new "Γρήγορη φόρτωση."
# renpy/common/00action_other.rpy:381
old "Language [text]"
# Automatic translation.
new "Γλώσσα [text]"
# renpy/common/00director.rpy:705
old "The interactive director is not enabled here."
# Automatic translation.
new "Ο διαδραστικός σκηνοθέτης δεν είναι ενεργοποιημένος εδώ."
# renpy/common/00director.rpy:1504
old "⬆"
new "⬆"
# renpy/common/00director.rpy:1510
old "⬇"
new "⬇"
# renpy/common/00director.rpy:1574
old "Done"
# Automatic translation.
new "Έγινε"
# renpy/common/00director.rpy:1584
old "(statement)"
# Automatic translation.
new "(δήλωση)"
# renpy/common/00director.rpy:1585
old "(tag)"
# Automatic translation.
new "(ετικέτα)"
# renpy/common/00director.rpy:1586
old "(attributes)"
# Automatic translation.
new "(χαρακτηριστικά)"
# renpy/common/00director.rpy:1587
old "(transform)"
new "(transform)"
# renpy/common/00director.rpy:1612
old "(transition)"
new "(transition)"
# renpy/common/00director.rpy:1624
old "(channel)"
# Automatic translation.
new "(κανάλι)"
# renpy/common/00director.rpy:1625
old "(filename)"
# Automatic translation.
new "(όνομα αρχείου)"
# renpy/common/00director.rpy:1654
old "Change"
# Automatic translation.
new "Αλλαγή"
# renpy/common/00director.rpy:1656
old "Add"
# Automatic translation.
new "Προσθέστε"
# renpy/common/00director.rpy:1662
old "Remove"
# Automatic translation.
new "Αφαιρέστε το"
# renpy/common/00director.rpy:1697
old "Statement:"
# Automatic translation.
new "Δήλωση:"
# renpy/common/00director.rpy:1718
old "Tag:"
# Automatic translation.
new "Ετικέτα:"
# renpy/common/00director.rpy:1734
old "Attributes:"
# Automatic translation.
new "Χαρακτηριστικά:"
# renpy/common/00director.rpy:1745
old "Click to toggle attribute, right click to toggle negative attribute."
# Automatic translation.
new "Κάντε κλικ για εναλλαγή χαρακτηριστικών, δεξί κλικ για εναλλαγή αρνητικών χαρακτηριστικών."
# renpy/common/00director.rpy:1757
old "Transforms:"
# Automatic translation.
new "Μετασχηματισμοί:"
# renpy/common/00director.rpy:1768
old "Click to set transform, right click to add to transform list."
# Automatic translation.
new "Κάντε κλικ για να ορίσετε μετασχηματισμό, κάντε δεξί κλικ για να προσθέσετε στη λίστα μετασχηματισμών."
# renpy/common/00director.rpy:1780
old "Behind:"
# Automatic translation.
new "Πίσω:"
# renpy/common/00director.rpy:1789
old "Click to set, right click to add to behind list."
# Automatic translation.
new "Κάντε κλικ για να ορίσετε, κάντε δεξί κλικ για να προσθέσετε στη λίστα πίσω."
# renpy/common/00director.rpy:1801
old "Transition:"
# Automatic translation.
new "Μετάβαση:"
# renpy/common/00director.rpy:1819
old "Channel:"
# Automatic translation.
new "Κανάλι:"
# renpy/common/00director.rpy:1837
old "Audio Filename:"
# Automatic translation.
new "Όνομα αρχείου ήχου:"
# renpy/common/00gui.rpy:456
old "This save was created on a different device. Maliciously constructed save files can harm your computer. Do you trust this save's creator and everyone who could have changed the file?"
# Automatic translation.
new "Αυτή η αποθήκευση δημιουργήθηκε σε διαφορετική συσκευή. Τα κακόβουλα κατασκευασμένα αρχεία αποθήκευσης μπορούν να βλάψουν τον υπολογιστή σας. Εμπιστεύεστε τον δημιουργό αυτής της αποθήκευσης και όλους όσους θα μπορούσαν να έχουν αλλάξει το αρχείο;"
# renpy/common/00gui.rpy:457
old "Do you trust the device the save was created on? You should only choose yes if you are the device's sole user."
# Automatic translation.
new "Εμπιστεύεστε τη συσκευή στην οποία δημιουργήθηκε η αποθήκευση; Θα πρέπει να επιλέξετε ναι μόνο αν είστε ο μοναδικός χρήστης της συσκευής."
# renpy/common/00keymap.rpy:322
old "Failed to save screenshot as %s."
# Automatic translation.
new "Απέτυχε η αποθήκευση στιγμιότυπου οθόνης ως %s."
# renpy/common/00preferences.rpy:271
old "display"
# Automatic translation.
new "οθόνη"
# renpy/common/00preferences.rpy:283
old "transitions"
# Automatic translation.
new "μεταβάσεις"
# renpy/common/00preferences.rpy:292
old "skip transitions"
# Automatic translation.
new "παράλειψη μεταβάσεων"
# renpy/common/00preferences.rpy:294
old "video sprites"
# Automatic translation.
new "sprites βίντεο"
# renpy/common/00preferences.rpy:303
old "show empty window"
# Automatic translation.
new "Εμφάνιση κενού παραθύρου"
# renpy/common/00preferences.rpy:312
old "text speed"
# Automatic translation.
new "ταχύτητα κειμένου"
# renpy/common/00preferences.rpy:320
old "joystick"
new "joystick"
# renpy/common/00preferences.rpy:320
old "joystick..."
new "joystick..."
# renpy/common/00preferences.rpy:327
old "skip"
# Automatic translation.
new "παράλειψη"
# renpy/common/00preferences.rpy:330
old "skip unseen [text]"
new "skip unseen [text]"
# renpy/common/00preferences.rpy:335
old "skip unseen text"
# Automatic translation.
new "παράλειψη αθέατου κειμένου"
# renpy/common/00preferences.rpy:337
old "begin skipping"
# Automatic translation.
new "αρχίστε να παραλείπετε"
# renpy/common/00preferences.rpy:341
old "after choices"
# Automatic translation.
new "μετά από επιλογές"
# renpy/common/00preferences.rpy:348
old "skip after choices"
# Automatic translation.
new "skip μετά από επιλογές"
# renpy/common/00preferences.rpy:350
old "auto-forward time"
# Automatic translation.
new "χρόνος αυτόματης προώθησης"
# renpy/common/00preferences.rpy:364
old "auto-forward"
# Automatic translation.
new "αυτόματη προώθηση"
# renpy/common/00preferences.rpy:371
old "Auto forward"
# Automatic translation.
new "Αυτόματη προώθηση"
# renpy/common/00preferences.rpy:374
old "auto-forward after click"
# Automatic translation.
new "αυτόματη προώθηση μετά από κλικ"
# renpy/common/00preferences.rpy:383
old "automatic move"
# Automatic translation.
new "αυτόματη κίνηση"
# renpy/common/00preferences.rpy:392
old "wait for voice"
# Automatic translation.
new "περιμένετε τη φωνή"
# renpy/common/00preferences.rpy:401
old "voice sustain"
# Automatic translation.
new "διατήρηση της φωνής"
# renpy/common/00preferences.rpy:410
old "self voicing"
# Automatic translation.
new "αυτοφωνητική"
# renpy/common/00preferences.rpy:419
old "self voicing volume drop"
# Automatic translation.
new "πτώση όγκου αυτοφωνήματος"
# renpy/common/00preferences.rpy:427
old "clipboard voicing"
# Automatic translation.
new "εκφώνηση με πρόχειρο"
# renpy/common/00preferences.rpy:436
old "debug voicing"
new "debug voicing"
# renpy/common/00preferences.rpy:445
old "emphasize audio"
# Automatic translation.
new "δώστε έμφαση στον ήχο"
# renpy/common/00preferences.rpy:454
old "rollback side"
# Automatic translation.
new "πλευρά επαναφοράς"
# renpy/common/00preferences.rpy:464
old "gl powersave"
new "gl powersave"
# renpy/common/00preferences.rpy:470
old "gl framerate"
new "gl framerate"
# renpy/common/00preferences.rpy:473
old "gl tearing"
new "gl tearing"
# renpy/common/00preferences.rpy:476
old "font transform"
# Automatic translation.
new "μετασχηματισμός γραμματοσειράς"
# renpy/common/00preferences.rpy:479
old "font size"
# Automatic translation.
new "μέγεθος γραμματοσειράς"
# renpy/common/00preferences.rpy:487
old "font line spacing"
# Automatic translation.
new "απόσταση γραμμών γραμματοσειράς"
# renpy/common/00preferences.rpy:495
old "system cursor"
# Automatic translation.
new "δρομέας συστήματος"
# renpy/common/00preferences.rpy:504
old "renderer menu"
# Automatic translation.
new "μενού renderer"
# renpy/common/00preferences.rpy:507
old "accessibility menu"
# Automatic translation.
new "μενού προσβασιμότητας"
# renpy/common/00preferences.rpy:510
old "high contrast text"
# Automatic translation.
new "κείμενο υψηλής αντίθεσης"
# renpy/common/00preferences.rpy:519
old "audio when minimized"
# Automatic translation.
new "ήχος όταν ελαχιστοποιείται"
# renpy/common/00preferences.rpy:528
old "audio when unfocused"
# Automatic translation.
new "ήχος όταν δεν είναι εστιασμένος"
# renpy/common/00preferences.rpy:537
old "web cache preload"
# Automatic translation.
new "προφόρτωση της προσωρινής μνήμης web"
# renpy/common/00preferences.rpy:552
old "voice after game menu"
# Automatic translation.
new "φωνή μετά το μενού του παιχνιδιού"
# renpy/common/00preferences.rpy:571
old "main volume"
# Automatic translation.
new "κύριος όγκος"
# renpy/common/00preferences.rpy:572
old "music volume"
# Automatic translation.
new "ένταση της μουσικής"
# renpy/common/00preferences.rpy:573
old "sound volume"
# Automatic translation.
new "ένταση ήχου"
# renpy/common/00preferences.rpy:574
old "voice volume"
# Automatic translation.
new "ένταση φωνής"
# renpy/common/00preferences.rpy:575
old "mute main"
new "mute main"
# renpy/common/00preferences.rpy:576
old "mute music"
# Automatic translation.
new "σίγαση μουσικής"
# renpy/common/00preferences.rpy:577
old "mute sound"
# Automatic translation.
new "σίγαση ήχου"
# renpy/common/00preferences.rpy:578
old "mute voice"
# Automatic translation.
new "σίγαση φωνής"
# renpy/common/00preferences.rpy:579
old "mute all"
# Automatic translation.
new "σίγαση όλων"
# renpy/common/00speechbubble.rpy:344
old "Speech Bubble Editor"
# Automatic translation.
new "Επεξεργαστής φυσαλίδων ομιλίας"
# renpy/common/00speechbubble.rpy:349
old "(hide)"
# Automatic translation.
new "(απόκρυψη)"
# renpy/common/00sync.rpy:70
old "Sync downloaded."
# Automatic translation.
new "Συγχρονισμός κατεβάσει."
# renpy/common/00sync.rpy:190
old "Could not connect to the Ren'Py Sync server."
# Automatic translation.
new "Δεν ήταν δυνατή η σύνδεση με τον διακομιστή Ren'Py Sync."
# renpy/common/00sync.rpy:192
old "The Ren'Py Sync server timed out."
# Automatic translation.
new "Ο διακομιστής Ren'Py Sync έπαψε να λειτουργεί."
# renpy/common/00sync.rpy:194
old "An unknown error occurred while connecting to the Ren'Py Sync server."
# Automatic translation.
new "Προέκυψε άγνωστο σφάλμα κατά τη σύνδεση με τον διακομιστή Ren'Py Sync."
# renpy/common/00sync.rpy:267
old "The Ren'Py Sync server does not have a copy of this sync. The sync ID may be invalid, or it may have timed out."
# Automatic translation.
new "Ο διακομιστής Ren'Py Sync δεν έχει αντίγραφο αυτού του συγχρονισμού. Το αναγνωριστικό συγχρονισμού μπορεί να είναι άκυρο ή να έχει λήξει."
# renpy/common/00sync.rpy:409
old "Please enter the sync ID you generated.\nNever enter a sync ID you didn't create yourself."
# Automatic translation.
new "Εισάγετε το αναγνωριστικό συγχρονισμού που δημιουργήσατε.\nΠοτέ μην εισάγετε ένα αναγνωριστικό συγχρονισμού που δεν έχετε δημιουργήσει εσείς."
# renpy/common/00sync.rpy:428
old "The sync ID is not in the correct format."
# Automatic translation.
new "Το αναγνωριστικό συγχρονισμού δεν έχει τη σωστή μορφή."
# renpy/common/00sync.rpy:448
old "The sync could not be decrypted."
# Automatic translation.
new "Ο συγχρονισμός δεν μπόρεσε να αποκρυπτογραφηθεί."
# renpy/common/00sync.rpy:471
old "The sync belongs to a different game."
# Automatic translation.
new "Ο συγχρονισμός ανήκει σε διαφορετικό παιχνίδι."
# renpy/common/00sync.rpy:476
old "The sync contains a file with an invalid name."
# Automatic translation.
new "Ο συγχρονισμός περιέχει ένα αρχείο με μη έγκυρο όνομα."
# renpy/common/00sync.rpy:529
old "This will upload your saves to the {a=https://sync.renpy.org}Ren'Py Sync Server{/a}.\nDo you want to continue?"
# Automatic translation.
new "Αυτό θα μεταφορτώσει τις αποθηκεύσεις σας στον {a=https://sync.renpy.org}Ren'Py Sync Server{/a}.\nΘέλετε να συνεχίσετε;"
# renpy/common/00sync.rpy:558
old "Enter Sync ID"
# Automatic translation.
new "Εισάγετε το αναγνωριστικό συγχρονισμού"
# renpy/common/00sync.rpy:569
old "This will contact the {a=https://sync.renpy.org}Ren'Py Sync Server{/a}."
# Automatic translation.
new "Αυτό θα επικοινωνήσει με τον διακομιστή συγχρονισμού {a=https://sync.renpy.org}Ren'Py{/a}."
# renpy/common/00sync.rpy:596
old "Sync Success"
# Automatic translation.
new "Επιτυχία συγχρονισμού"
# renpy/common/00sync.rpy:599
old "The Sync ID is:"
# Automatic translation.
new "Το αναγνωριστικό συγχρονισμού είναι:"
# renpy/common/00sync.rpy:605
old "You can use this ID to download your save on another device.\nThis sync will expire in an hour.\nRen'Py Sync is supported by {a=https://www.renpy.org/sponsors.html}Ren'Py's Sponsors{/a}."
# Automatic translation.
new "Μπορείτε να χρησιμοποιήσετε αυτό το αναγνωριστικό για να κατεβάσετε την αποθήκευσή σας σε άλλη συσκευή.\nΑυτός ο συγχρονισμός θα λήξει σε μία ώρα.\nΤο Ren'Py Sync υποστηρίζεται από το {a=https://www.renpy.org/sponsors.html}Ren'Py's Sponsors{/a}."
# renpy/common/00sync.rpy:631
old "Sync Error"
# Automatic translation.
new "Σφάλμα συγχρονισμού"
+109 -1
View File
@@ -75,7 +75,8 @@ translate greek strings:
# _developer/developer.rpym:532
old "\n{color=#cfc}✔ predicted image (good){/color}\n{color=#fcc}✘ unpredicted image (bad){/color}\n{color=#fff}Drag to move.{/color}"
new "\n{color=#cfc}✔ predicted image (good){/color}\n{color=#fcc}✘ unpredicted image (bad){/color}\n{color=#fff}Drag to move.{/color}"
# Automatic translation.
new "\n{color=#cfc}✔ προβλεπόμενη εικόνα (καλή){/color}\n{color=#fcc}✘ απρόβλεπτη εικόνα (κακή){/color}\n{color=#fff}Σύρετε για να μετακινηθείτε.{/color}"
# _developer/inspector.rpym:38
old "Displayable Inspector"
@@ -177,3 +178,110 @@ translate greek strings:
old "jump <label>: jumps to label"
new "jump <label>: μεταπηδάει την εκτέλεση κώδικα στην ετικέτα label"
translate greek strings:
# renpy/common/_developer/developer.rpym:43
old "Interactive Director (D)"
# Automatic translation.
new "Διευθυντής διαδραστικότητας (D)"
# renpy/common/_developer/developer.rpym:51
old "Persistent Viewer"
# Automatic translation.
new "Επίμονη προβολή"
# renpy/common/_developer/developer.rpym:59
old "Show Image Load Log (F4)"
# Automatic translation.
new "Εμφάνιση αρχείου καταγραφής φόρτωσης εικόνας (F4)"
# renpy/common/_developer/developer.rpym:62
old "Hide Image Load Log (F4)"
# Automatic translation.
new "Απόκρυψη αρχείου καταγραφής φόρτωσης εικόνας (F4)"
# renpy/common/_developer/developer.rpym:65
old "Image Attributes"
# Automatic translation.
new "Χαρακτηριστικά εικόνας"
# renpy/common/_developer/developer.rpym:70
old "Speech Bubble Editor (Shift+B)"
# Automatic translation.
new "Επεξεργαστής φυσαλίδων ομιλίας (Shift+B)"
# renpy/common/_developer/developer.rpym:97
old "[name] [attributes] (hidden)"
# Automatic translation.
new "[name] [attributes] (κρυφό)"
# renpy/common/_developer/developer.rpym:101
old "[name] [attributes]"
new "[name] [attributes]"
# renpy/common/_developer/developer.rpym:162
old "Hide deleted"
# Automatic translation.
new "Απόκρυψη διαγράφεται"
# renpy/common/_developer/developer.rpym:162
old "Show deleted"
# Automatic translation.
new "Εμφάνιση διαγράφεται"
# renpy/common/_developer/developer.rpym:389
old "Type to filter: "
# Automatic translation.
new "Τύπος για φιλτράρισμα: "
# renpy/common/_developer/developer.rpym:507
old "Textures: [tex_count] ([tex_size_mb:.1f] MB)"
# Automatic translation.
new "Υφές: [tex_count] ([tex_size_mb:.1f] MB)"
# renpy/common/_developer/developer.rpym:511
old "Image cache: [cache_pct:.1f]% ([cache_size_mb:.1f] MB)"
# Automatic translation.
new "Κρυφή μνήμη εικόνων: [cache_pct:.1f]% ([cache_size_mb:.1f] MB)"
# renpy/common/00console.rpy:789
old "help: show this help\n help <expr>: show signature and documentation of <expr>"
# Automatic translation.
new "help: δείξτε αυτή τη βοήθεια\n help <expr>: Εμφάνιση της υπογραφής και της τεκμηρίωσης της <expr>"
# renpy/common/00console.rpy:813
old "Help may display undocumented functions. Please check that the function or\nclass you want to use is documented.\n\n"
# Automatic translation.
new "Η βοήθεια μπορεί να εμφανίζει μη τεκμηριωμένες λειτουργίες. Ελέγξτε ότι η λειτουργία ή η\nκλάση που θέλετε να χρησιμοποιήσετε είναι τεκμηριωμένη.\n\n"
# renpy/common/00console.rpy:854
old "stack: print the return stack"
# Automatic translation.
new "stack: εκτύπωση της στοίβας επιστροφής"
# renpy/common/00console.rpy:908
old "watch <expression>: watch a python expression\n watch short: makes the representation of traced expressions short (default)\n watch long: makes the representation of traced expressions as is"
# Automatic translation.
new "watch <expression>: παρακολουθήστε μια έκφραση python\n watch short: κάνει την αναπαράσταση των ανιχνευόμενων εκφράσεων σύντομη (προεπιλογή)\n watch long: κάνει την αναπαράσταση των ιχνηλατημένων εκφράσεων όπως είναι"
# renpy/common/00console.rpy:1028
old "short: Shorten the representation of objects on the console (default)."
# Automatic translation.
new "short: Συντομεύει την αναπαράσταση των αντικειμένων στην κονσόλα (προεπιλογή)."
# renpy/common/00console.rpy:1032
old "long: Print the full representation of objects on the console."
# Automatic translation.
new "long: Εκτύπωση της πλήρους αναπαράστασης των αντικειμένων στην κονσόλα."
# renpy/common/00console.rpy:1036
old "escape: Enables escaping of unicode symbols in unicode strings."
# Automatic translation.
new "escape: Ενεργοποιεί τη διαφυγή συμβόλων unicode σε συμβολοσειρές unicode."
# renpy/common/00console.rpy:1040
old "unescape: Disables escaping of unicode symbols in unicode strings and print it as is (default)."
# Automatic translation.
new "unescape: Απενεργοποιεί τη διαφυγή των συμβόλων unicode σε συμβολοσειρές unicode και την εκτύπωση ως έχει (προεπιλογή)."
+130
View File
@@ -177,3 +177,133 @@ translate greek strings:
old "Copies the errors.txt file to the clipboard."
new "Αντιγράφει το errors.txt στο clipboard."
translate greek strings:
# renpy/common/00gltest.rpy:89
old "Renderer"
new "Renderer"
# renpy/common/00gltest.rpy:100
old "Force GL Renderer"
new "Force GL Renderer"
# renpy/common/00gltest.rpy:105
old "Force ANGLE Renderer"
new "Force ANGLE Renderer"
# renpy/common/00gltest.rpy:110
old "Force GLES Renderer"
# Automatic translation.
new "Εξαναγκασμός GLES Renderer"
# renpy/common/00gltest.rpy:116
old "Force GL2 Renderer"
new "Force GL2 Renderer"
# renpy/common/00gltest.rpy:121
old "Force ANGLE2 Renderer"
# Automatic translation.
new "Δύναμη ANGLE2 Renderer"
# renpy/common/00gltest.rpy:126
old "Force GLES2 Renderer"
# Automatic translation.
new "Εξαναγκασμός GLES2 Renderer"
# renpy/common/00gltest.rpy:136
old "Enable (No Blocklist)"
# Automatic translation.
new "Ενεργοποίηση (Χωρίς λίστα αποκλεισμού)"
# renpy/common/00gltest.rpy:159
old "Powersave"
new "Powersave"
# renpy/common/00gltest.rpy:173
old "Framerate"
# Automatic translation.
new "Ταχύτητα καρέ"
# renpy/common/00gltest.rpy:177
old "Screen"
# Automatic translation.
new "Οθόνη"
# renpy/common/00gltest.rpy:181
old "60"
new "60"
# renpy/common/00gltest.rpy:185
old "30"
new "30"
# renpy/common/00gltest.rpy:191
old "Tearing"
new "Tearing"
# renpy/common/00gltest.rpy:249
old "This game requires use of GL2 that can't be initialised."
# Automatic translation.
new "Αυτό το παιχνίδι απαιτεί τη χρήση του GL2 που δεν μπορεί να αρχικοποιηθεί."
# renpy/common/00gltest.rpy:259
old "The {a=edit:1:log.txt}log.txt{/a} file may contain information to help you determine what is wrong with your computer."
# Automatic translation.
new "Το αρχείο {a=edit:1:log.txt}log.txt{/a} μπορεί να περιέχει πληροφορίες που θα σας βοηθήσουν να προσδιορίσετε τι συμβαίνει με τον υπολογιστή σας."
# renpy/common/00gltest.rpy:264
old "More details on how to fix this can be found in the {a=[url]}documentation{/a}."
# Automatic translation.
new "Περισσότερες λεπτομέρειες για το πώς να το διορθώσετε αυτό μπορείτε να βρείτε στην τεκμηρίωση {a=[url]}{/a} ."
# renpy/common/00gltest.rpy:281
old "Change render options"
# Automatic translation.
new "Αλλαγή επιλογών απόδοσης"
# renpy/common/00gamepad.rpy:58
old "Press or move the '[control!s]' [kind]."
# Automatic translation.
new "Πατήστε ή μετακινήστε το '[control!s]' [kind]."
# renpy/common/_errorhandling.rpym:555
old "Open"
# Automatic translation.
new "Ανοίξτε το"
# renpy/common/_errorhandling.rpym:559
old "Copy BBCode"
# Automatic translation.
new "Αντιγραφή κώδικα BBCode"
# renpy/common/_errorhandling.rpym:561
old "Copies the traceback.txt file to the clipboard as BBcode for forums like https://lemmasoft.renai.us/."
# Automatic translation.
new "Αντιγράφει το αρχείο traceback.txt στο πρόχειρο ως BBcode για φόρουμ όπως το https://lemmasoft.renai.us/."
# renpy/common/_errorhandling.rpym:563
old "Copy Markdown"
# Automatic translation.
new "Αντιγραφή Markdown"
# renpy/common/_errorhandling.rpym:565
old "Copies the traceback.txt file to the clipboard as Markdown for Discord."
# Automatic translation.
new "Αντιγράφει το αρχείο traceback.txt στο πρόχειρο ως Markdown για το Discord."
# renpy/common/_errorhandling.rpym:626
old "Ignores the exception, allowing you to continue."
# Automatic translation.
new "Αγνοεί την εξαίρεση, επιτρέποντάς σας να συνεχίσετε."
# renpy/common/_errorhandling.rpym:637
old "Console"
# Automatic translation.
new "Κονσόλα"
# renpy/common/_errorhandling.rpym:639
old "Opens a console to allow debugging the problem."
# Automatic translation.
new "Ανοίγει μια κονσόλα για να επιτρέψει την αποσφαλμάτωση του προβλήματος."
+268 -100
View File
@@ -3,267 +3,333 @@ translate greek strings:
# gui.rpy:2
old "## Initialization"
new "## Initialization"
# Automatic translation.
new "## Αρχικοποίηση"
# gui.rpy:5
old "## The init offset statement causes the init code in this file to run before init code in any other file."
new "## The init offset statement causes the init code in this file to run before init code in any other file."
# Automatic translation.
new "## Η εντολή offset init προκαλεί την εκτέλεση του κώδικα init αυτού του αρχείου πριν από τον κώδικα init οποιουδήποτε άλλου αρχείου."
# gui.rpy:9
old "## Calling gui.init resets the styles to sensible default values, and sets the width and height of the game."
new "## Calling gui.init resets the styles to sensible default values, and sets the width and height of the game."
# Automatic translation.
new "## Η κλήση του gui.init επαναφέρει τα στυλ στις λογικές προεπιλεγμένες τιμές και ορίζει το πλάτος και το ύψος του παιχνιδιού."
# gui.rpy:21
old "## Colors"
new "## Colors"
# Automatic translation.
new "## Χρώματα"
# gui.rpy:23
old "## The colors of text in the interface."
new "## The colors of text in the interface."
# Automatic translation.
new "## Τα χρώματα του κειμένου στη διεπαφή."
# gui.rpy:25
old "## An accent color used throughout the interface to label and highlight text."
new "## An accent color used throughout the interface to label and highlight text."
# Automatic translation.
new "## Ένα χρώμα έμφασης που χρησιμοποιείται σε όλη τη διασύνδεση για την επισήμανση και την υπογράμμιση του κειμένου."
# gui.rpy:29
old "## The color used for a text button when it is neither selected nor hovered."
new "## The color used for a text button when it is neither selected nor hovered."
# Automatic translation.
new "## Το χρώμα που χρησιμοποιείται για ένα κουμπί κειμένου όταν αυτό δεν είναι επιλεγμένο ούτε αιωρείται."
# gui.rpy:32
old "## The small color is used for small text, which needs to be brighter/darker to achieve the same effect."
new "## The small color is used for small text, which needs to be brighter/darker to achieve the same effect."
# Automatic translation.
new "## Το μικρό χρώμα χρησιμοποιείται για μικρό κείμενο, το οποίο πρέπει να είναι πιο φωτεινό/σκούρο για να επιτευχθεί το ίδιο αποτέλεσμα."
# gui.rpy:36
old "## The color that is used for buttons and bars that are hovered."
new "## The color that is used for buttons and bars that are hovered."
# Automatic translation.
new "## Το χρώμα που χρησιμοποιείται για τα κουμπιά και τις μπάρες που αιωρούνται."
# gui.rpy:39
old "## The color used for a text button when it is selected but not focused. A button is selected if it is the current screen or preference value."
new "## The color used for a text button when it is selected but not focused. A button is selected if it is the current screen or preference value."
# Automatic translation.
new "## Το χρώμα που χρησιμοποιείται για ένα κουμπί κειμένου όταν είναι επιλεγμένο αλλά όχι εστιασμένο. Ένα κουμπί είναι επιλεγμένο εάν είναι η τρέχουσα οθόνη ή η τιμή προτίμησης."
# gui.rpy:43
old "## The color used for a text button when it cannot be selected."
new "## The color used for a text button when it cannot be selected."
# Automatic translation.
new "## Το χρώμα που χρησιμοποιείται για ένα κουμπί κειμένου όταν αυτό δεν μπορεί να επιλεγεί."
# gui.rpy:46
old "## Colors used for the portions of bars that are not filled in. These are not used directly, but are used when re-generating bar image files."
new "## Colors used for the portions of bars that are not filled in. These are not used directly, but are used when re-generating bar image files."
# Automatic translation.
new "## Χρώματα που χρησιμοποιούνται για τα τμήματα των ράβδων που δεν είναι συμπληρωμένα. Αυτά δεν χρησιμοποιούνται άμεσα, αλλά χρησιμοποιούνται κατά την επαναδημιουργία αρχείων εικόνας ράβδων."
# gui.rpy:51
old "## The colors used for dialogue and menu choice text."
new "## The colors used for dialogue and menu choice text."
# Automatic translation.
new "## Τα χρώματα που χρησιμοποιούνται για το κείμενο των διαλόγων και των επιλογών μενού."
# gui.rpy:56
old "## Fonts and Font Sizes"
new "## Fonts and Font Sizes"
# Automatic translation.
new "## Γραμματοσειρές και μεγέθη γραμματοσειρών"
# gui.rpy:58
old "## The font used for in-game text."
new "## The font used for in-game text."
# Automatic translation.
new "## Η γραμματοσειρά που χρησιμοποιείται για το κείμενο στο παιχνίδι."
# gui.rpy:61
old "## The font used for character names."
new "## The font used for character names."
# Automatic translation.
new "## Η γραμματοσειρά που χρησιμοποιείται για τα ονόματα των χαρακτήρων."
# gui.rpy:64
old "## The font used for out-of-game text."
new "## The font used for out-of-game text."
# Automatic translation.
new "## Η γραμματοσειρά που χρησιμοποιείται για το κείμενο εκτός παιχνιδιού."
# gui.rpy:67
old "## The size of normal dialogue text."
new "## The size of normal dialogue text."
# Automatic translation.
new "## Το μέγεθος του κανονικού κειμένου διαλόγου."
# gui.rpy:70
old "## The size of character names."
new "## The size of character names."
# Automatic translation.
new "## Το μέγεθος των ονομάτων χαρακτήρων."
# gui.rpy:73
old "## The size of text in the game's user interface."
new "## The size of text in the game's user interface."
# Automatic translation.
new "## Το μέγεθος του κειμένου στη διεπαφή χρήστη του παιχνιδιού."
# gui.rpy:76
old "## The size of labels in the game's user interface."
new "## The size of labels in the game's user interface."
# Automatic translation.
new "## Το μέγεθος των ετικετών στη διεπαφή χρήστη του παιχνιδιού."
# gui.rpy:79
old "## The size of text on the notify screen."
new "## The size of text on the notify screen."
# Automatic translation.
new "## Το μέγεθος του κειμένου στην οθόνη ειδοποίησης."
# gui.rpy:82
old "## The size of the game's title."
new "## The size of the game's title."
# Automatic translation.
new "## Το μέγεθος του τίτλου του παιχνιδιού."
# gui.rpy:86
old "## Main and Game Menus"
new "## Main and Game Menus"
# Automatic translation.
new "## Κύριο μενού και μενού παιχνιδιού"
# gui.rpy:88
old "## The images used for the main and game menus."
new "## The images used for the main and game menus."
# Automatic translation.
new "## Οι εικόνες που χρησιμοποιούνται για το κύριο μενού και το μενού του παιχνιδιού."
# gui.rpy:92
old "## Should we show the name and version of the game?"
new "## Should we show the name and version of the game?"
# Automatic translation.
new "## Θα πρέπει να δείξουμε το όνομα και την έκδοση του παιχνιδιού;"
# gui.rpy:96
old "## Dialogue"
new "## Dialogue"
# Automatic translation.
new "## Διάλογος"
# gui.rpy:98
old "## These variables control how dialogue is displayed on the screen one line at a time."
new "## These variables control how dialogue is displayed on the screen one line at a time."
# Automatic translation.
new "## Αυτές οι μεταβλητές ελέγχουν τον τρόπο με τον οποίο ο διάλογος εμφανίζεται στην οθόνη μία γραμμή κάθε φορά."
# gui.rpy:101
old "## The height of the textbox containing dialogue."
new "## The height of the textbox containing dialogue."
# Automatic translation.
new "## Το ύψος του πλαισίου κειμένου που περιέχει το διάλογο."
# gui.rpy:104
old "## The placement of the textbox vertically on the screen. 0.0 is the top, 0.5 is center, and 1.0 is the bottom."
new "## The placement of the textbox vertically on the screen. 0.0 is the top, 0.5 is center, and 1.0 is the bottom."
# Automatic translation.
new "## Η τοποθέτηση του πλαισίου κειμένου κάθετα στην οθόνη. Το 0.0 είναι το πάνω μέρος, το 0.5 είναι το κέντρο και το 1.0 είναι το κάτω μέρος."
# gui.rpy:109
old "## The placement of the speaking character's name, relative to the textbox. These can be a whole number of pixels from the left or top, or 0.5 to center."
new "## The placement of the speaking character's name, relative to the textbox. These can be a whole number of pixels from the left or top, or 0.5 to center."
# Automatic translation.
new "## Η τοποθέτηση του ονόματος του χαρακτήρα που μιλάει, σε σχέση με το πλαίσιο κειμένου. Αυτά μπορεί να είναι ένας ακέραιος αριθμός εικονοστοιχείων από τα αριστερά ή την κορυφή ή 0,5 προς το κέντρο."
# gui.rpy:114
old "## The horizontal alignment of the character's name. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
new "## The horizontal alignment of the character's name. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
# Automatic translation.
new "## Η οριζόντια στοίχιση του ονόματος του χαρακτήρα. Αυτή μπορεί να είναι 0.0 για αριστερή στοίχιση, 0.5 για κεντραρισμένη και 1.0 για δεξιά στοίχιση."
# gui.rpy:118
old "## The width, height, and borders of the box containing the character's name, or None to automatically size it."
new "## The width, height, and borders of the box containing the character's name, or None to automatically size it."
# Automatic translation.
new "## Το πλάτος, το ύψος και τα περιθώρια του πλαισίου που περιέχει το όνομα του χαρακτήρα, ή Κανένα για αυτόματο μέγεθος."
# gui.rpy:123
old "## The borders of the box containing the character's name, in left, top, right, bottom order."
new "## The borders of the box containing the character's name, in left, top, right, bottom order."
# Automatic translation.
new "## Τα όρια του πλαισίου που περιέχει το όνομα του χαρακτήρα, με τη σειρά αριστερά, πάνω, δεξιά, κάτω."
# gui.rpy:127
old "## If True, the background of the namebox will be tiled, if False, the background of the namebox will be scaled."
new "## If True, the background of the namebox will be tiled, if False, the background of the namebox will be scaled."
# Automatic translation.
new "## Αν είναι True, το φόντο του πλαισίου ονόματος θα είναι τοποθετημένο σε πλακάκια, αν είναι False, το φόντο του πλαισίου ονόματος θα είναι κλιμακωτό."
# gui.rpy:132
old "## The placement of dialogue relative to the textbox. These can be a whole number of pixels relative to the left or top side of the textbox, or 0.5 to center."
new "## The placement of dialogue relative to the textbox. These can be a whole number of pixels relative to the left or top side of the textbox, or 0.5 to center."
# Automatic translation.
new "## Η τοποθέτηση του διαλόγου σε σχέση με το πλαίσιο κειμένου. Αυτά μπορεί να είναι ένας ακέραιος αριθμός εικονοστοιχείων σε σχέση με την αριστερή ή την επάνω πλευρά του πλαισίου κειμένου ή 0,5 στο κέντρο."
# gui.rpy:138
old "## The maximum width of dialogue text, in pixels."
new "## The maximum width of dialogue text, in pixels."
# Automatic translation.
new "## Το μέγιστο πλάτος του κειμένου διαλόγου, σε pixels."
# gui.rpy:141
old "## The horizontal alignment of the dialogue text. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
new "## The horizontal alignment of the dialogue text. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
# Automatic translation.
new "## Η οριζόντια στοίχιση του κειμένου διαλόγου. Μπορεί να είναι 0.0 για αριστερή στοίχιση, 0.5 για κεντραρισμένη και 1.0 για δεξιά στοίχιση."
# gui.rpy:146
old "## Buttons"
new "## Buttons"
# Automatic translation.
new "## Κουμπιά"
# gui.rpy:148
old "## These variables, along with the image files in gui/button, control aspects of how buttons are displayed."
new "## These variables, along with the image files in gui/button, control aspects of how buttons are displayed."
# Automatic translation.
new "## Αυτές οι μεταβλητές, μαζί με τα αρχεία εικόνας στο gui/button, ελέγχουν πτυχές του τρόπου εμφάνισης των κουμπιών."
# gui.rpy:151
old "## The width and height of a button, in pixels. If None, Ren'Py computes a size."
new "## The width and height of a button, in pixels. If None, Ren'Py computes a size."
# Automatic translation.
new "## Το πλάτος και το ύψος ενός κουμπιού, σε pixels. Αν δεν υπάρχει, η Ren'Py υπολογίζει ένα μέγεθος."
# gui.rpy:155
old "## The borders on each side of the button, in left, top, right, bottom order."
new "## The borders on each side of the button, in left, top, right, bottom order."
# Automatic translation.
new "## Τα περιθώρια σε κάθε πλευρά του κουμπιού, με τη σειρά αριστερά, πάνω, δεξιά, κάτω."
# gui.rpy:158
old "## If True, the background image will be tiled. If False, the background image will be linearly scaled."
new "## If True, the background image will be tiled. If False, the background image will be linearly scaled."
# Automatic translation.
new "## Αν είναι True, η εικόνα φόντου θα είναι σε μορφή πλακιδίων. Αν False, η εικόνα φόντου θα κλιμακώνεται γραμμικά."
# gui.rpy:162
old "## The font used by the button."
new "## The font used by the button."
# Automatic translation.
new "## Η γραμματοσειρά που χρησιμοποιείται από το κουμπί."
# gui.rpy:165
old "## The size of the text used by the button."
new "## The size of the text used by the button."
# Automatic translation.
new "## Το μέγεθος του κειμένου που χρησιμοποιείται από το κουμπί."
# gui.rpy:179
old "## These variables override settings for different kinds of buttons. Please see the gui documentation for the kinds of buttons available, and what each is used for."
new "## These variables override settings for different kinds of buttons. Please see the gui documentation for the kinds of buttons available, and what each is used for."
# Automatic translation.
new "## Αυτές οι μεταβλητές παρακάμπτουν τις ρυθμίσεις για διαφορετικά είδη κουμπιών. Ανατρέξτε στην τεκμηρίωση του gui για τα είδη των διαθέσιμων κουμπιών και για τι χρησιμοποιείται το καθένα."
# gui.rpy:183
old "## These customizations are used by the default interface:"
new "## These customizations are used by the default interface:"
# Automatic translation.
new "## Αυτές οι προσαρμογές χρησιμοποιούνται από την προεπιλεγμένη διασύνδεση:"
# gui.rpy:198
old "## You can also add your own customizations, by adding properly-named variables. For example, you can uncomment the following line to set the width of a navigation button."
new "## You can also add your own customizations, by adding properly-named variables. For example, you can uncomment the following line to set the width of a navigation button."
# Automatic translation.
new "## Μπορείτε επίσης να προσθέσετε τις δικές σας προσαρμογές, προσθέτοντας μεταβλητές με τα κατάλληλα ονόματα. Για παράδειγμα, μπορείτε να ξεσχολιάσετε την ακόλουθη γραμμή για να ορίσετε το πλάτος ενός κουμπιού πλοήγησης."
# gui.rpy:205
old "## Choice Buttons"
new "## Choice Buttons"
# Automatic translation.
new "## Κουμπιά επιλογής"
# gui.rpy:207
old "## Choice buttons are used in the in-game menus."
new "## Choice buttons are used in the in-game menus."
# Automatic translation.
new "## Τα κουμπιά επιλογής χρησιμοποιούνται στα μενού του παιχνιδιού."
# gui.rpy:220
old "## File Slot Buttons"
new "## File Slot Buttons"
# Automatic translation.
new "## Κουμπιά υποδοχής αρχείων"
# gui.rpy:222
old "## A file slot button is a special kind of button. It contains a thumbnail image, and text describing the contents of the save slot. A save slot uses image files in gui/button, like the other kinds of buttons."
new "## A file slot button is a special kind of button. It contains a thumbnail image, and text describing the contents of the save slot. A save slot uses image files in gui/button, like the other kinds of buttons."
# Automatic translation.
new "## Το κουμπί υποδοχής αρχείων είναι ένα ειδικό είδος κουμπιού. Περιέχει μια εικόνα μικρογραφίας και κείμενο που περιγράφει τα περιεχόμενα της θυρίδας αποθήκευσης. Ένα save slot χρησιμοποιεί αρχεία εικόνας στο gui/button, όπως και τα άλλα είδη κουμπιών."
# gui.rpy:226
old "## The save slot button."
new "## The save slot button."
# Automatic translation.
new "## Το κουμπί save slot."
# gui.rpy:234
old "## The width and height of thumbnails used by the save slots."
new "## The width and height of thumbnails used by the save slots."
# Automatic translation.
new "## Το πλάτος και το ύψος των μικρογραφιών που χρησιμοποιούνται από τις υποδοχές αποθήκευσης."
# gui.rpy:238
old "## The number of columns and rows in the grid of save slots."
new "## The number of columns and rows in the grid of save slots."
# Automatic translation.
new "## Ο αριθμός των στηλών και των γραμμών στο πλέγμα των θέσεων αποθήκευσης."
# gui.rpy:243
old "## Positioning and Spacing"
new "## Positioning and Spacing"
# Automatic translation.
new "## Τοποθέτηση και απόσταση"
# gui.rpy:245
old "## These variables control the positioning and spacing of various user interface elements."
new "## These variables control the positioning and spacing of various user interface elements."
# Automatic translation.
new "## Αυτές οι μεταβλητές ελέγχουν την τοποθέτηση και την απόσταση μεταξύ των διαφόρων στοιχείων διεπαφής χρήστη."
# gui.rpy:248
old "## The position of the left side of the navigation buttons, relative to the left side of the screen."
new "## The position of the left side of the navigation buttons, relative to the left side of the screen."
# Automatic translation.
new "## Η θέση της αριστερής πλευράς των κουμπιών πλοήγησης, σε σχέση με την αριστερή πλευρά της οθόνης."
# gui.rpy:252
old "## The vertical position of the skip indicator."
new "## The vertical position of the skip indicator."
# Automatic translation.
new "## Η κατακόρυφη θέση της ένδειξης παράλειψης."
# gui.rpy:255
old "## The vertical position of the notify screen."
new "## The vertical position of the notify screen."
# Automatic translation.
new "## Η κάθετη θέση της οθόνης ειδοποίησης."
# gui.rpy:258
old "## The spacing between menu choices."
new "## The spacing between menu choices."
# Automatic translation.
new "## Η απόσταση μεταξύ των επιλογών του μενού."
# gui.rpy:261
old "## Buttons in the navigation section of the main and game menus."
new "## Buttons in the navigation section of the main and game menus."
# Automatic translation.
new "## Κουμπιά στην ενότητα πλοήγησης του κύριου μενού και του μενού παιχνιδιού."
# gui.rpy:264
old "## Controls the amount of spacing between preferences."
new "## Controls the amount of spacing between preferences."
# Automatic translation.
new "## Ελέγχει την απόσταση μεταξύ των προτιμήσεων."
# gui.rpy:267
old "## Controls the amount of spacing between preference buttons."
new "## Controls the amount of spacing between preference buttons."
# Automatic translation.
new "## Ελέγχει την απόσταση μεταξύ των κουμπιών προτίμησης."
# gui.rpy:270
old "## The spacing between file page buttons."
new "## The spacing between file page buttons."
# Automatic translation.
new "## Η απόσταση μεταξύ των κουμπιών σελίδας αρχείων."
# gui.rpy:273
old "## The spacing between file slots."
new "## The spacing between file slots."
# Automatic translation.
new "## Η απόσταση μεταξύ των θυρίδων αρχείων."
# gui.rpy:277
old "## Frames"
@@ -271,135 +337,168 @@ translate greek strings:
# gui.rpy:279
old "## These variables control the look of frames that can contain user interface components when an overlay or window is not present."
new "## These variables control the look of frames that can contain user interface components when an overlay or window is not present."
# Automatic translation.
new "## Αυτές οι μεταβλητές ελέγχουν την εμφάνιση των πλαισίων που μπορούν να περιέχουν στοιχεία διεπαφής χρήστη όταν δεν υπάρχει επικάλυψη ή παράθυρο."
# gui.rpy:282
old "## Generic frames that are introduced by player code."
new "## Generic frames that are introduced by player code."
# Automatic translation.
new "## Γενικά πλαίσια που εισάγονται από τον κώδικα του παίκτη."
# gui.rpy:285
old "## The frame that is used as part of the confirm screen."
new "## The frame that is used as part of the confirm screen."
# Automatic translation.
new "## Το πλαίσιο που χρησιμοποιείται ως μέρος της οθόνης επιβεβαίωσης."
# gui.rpy:288
old "## The frame that is used as part of the skip screen."
new "## The frame that is used as part of the skip screen."
# Automatic translation.
new "## Το πλαίσιο που χρησιμοποιείται ως μέρος της οθόνης παράλειψης."
# gui.rpy:291
old "## The frame that is used as part of the notify screen."
new "## The frame that is used as part of the notify screen."
# Automatic translation.
new "## Το πλαίσιο που χρησιμοποιείται ως μέρος της οθόνης ειδοποίησης."
# gui.rpy:294
old "## Should frame backgrounds be tiled?"
new "## Should frame backgrounds be tiled?"
# Automatic translation.
new "## Θα πρέπει τα φόντα των πλαισίων να τοποθετούνται σε κεραμίδια;"
# gui.rpy:298
old "## Bars, Scrollbars, and Sliders"
new "## Bars, Scrollbars, and Sliders"
# Automatic translation.
new "## Μπάρες, μπάρες κύλισης και ρυθμιστικά"
# gui.rpy:300
old "## These control the look and size of bars, scrollbars, and sliders."
new "## These control the look and size of bars, scrollbars, and sliders."
# Automatic translation.
new "## Αυτές ελέγχουν την εμφάνιση και το μέγεθος των ράβδων, των ράβδων κύλισης και των ρυθμιστικών."
# gui.rpy:302
old "## The default GUI only uses sliders and vertical scrollbars. All of the other bars are only used in creator-written code."
new "## The default GUI only uses sliders and vertical scrollbars. All of the other bars are only used in creator-written code."
# Automatic translation.
new "## Το προεπιλεγμένο γραφικό περιβάλλον χρησιμοποιεί μόνο ρυθμιστικά και κάθετες γραμμές κύλισης. Όλες οι άλλες μπάρες χρησιμοποιούνται μόνο στον κώδικα που γράφει ο δημιουργός."
# gui.rpy:305
old "## The height of horizontal bars, scrollbars, and sliders. The width of vertical bars, scrollbars, and sliders."
new "## The height of horizontal bars, scrollbars, and sliders. The width of vertical bars, scrollbars, and sliders."
# Automatic translation.
new "## Το ύψος των οριζόντιων ράβδων, των ράβδων κύλισης και των ρυθμιστικών. Το πλάτος των κατακόρυφων ράβδων, των ράβδων κύλισης και των ρυθμιστικών."
# gui.rpy:311
old "## True if bar images should be tiled. False if they should be linearly scaled."
new "## True if bar images should be tiled. False if they should be linearly scaled."
# Automatic translation.
new "## True αν οι εικόνες της μπάρας θα πρέπει να είναι σε κεραμίδια. False αν πρέπει να κλιμακώνονται γραμμικά."
# gui.rpy:316
old "## Horizontal borders."
new "## Horizontal borders."
# Automatic translation.
new "## Οριζόντια όρια."
# gui.rpy:321
old "## Vertical borders."
new "## Vertical borders."
# Automatic translation.
new "## Κατακόρυφα σύνορα."
# gui.rpy:326
old "## What to do with unscrollable scrollbars in the gui. \"hide\" hides them, while None shows them."
new "## What to do with unscrollable scrollbars in the gui. \"hide\" hides them, while None shows them."
# Automatic translation.
new "## Τι να κάνετε με μη κυλιόμενες γραμμές κύλισης στο gui. Το \"hide\" τις κρύβει, ενώ το \"None\" τις εμφανίζει."
# gui.rpy:331
old "## History"
new "## History"
# Automatic translation.
new "## Ιστορία"
# gui.rpy:333
old "## The history screen displays dialogue that the player has already dismissed."
new "## The history screen displays dialogue that the player has already dismissed."
# Automatic translation.
new "## Η οθόνη ιστορικού εμφανίζει διαλόγους που ο παίκτης έχει ήδη απορρίψει."
# gui.rpy:335
old "## The number of blocks of dialogue history Ren'Py will keep."
new "## The number of blocks of dialogue history Ren'Py will keep."
# Automatic translation.
new "## Ο αριθμός των μπλοκ ιστορικού διαλόγου που θα κρατήσει η Ren'Py."
# gui.rpy:338
old "## The height of a history screen entry, or None to make the height variable at the cost of performance."
new "## The height of a history screen entry, or None to make the height variable at the cost of performance."
# Automatic translation.
new "## Το ύψος μιας καταχώρησης στην οθόνη ιστορικού, ή Κανένα για να κάνετε το ύψος μεταβλητό με κόστος την απόδοση."
# gui.rpy:342
old "## The position, width, and alignment of the label giving the name of the speaking character."
new "## The position, width, and alignment of the label giving the name of the speaking character."
# Automatic translation.
new "## Η θέση, το πλάτος και η στοίχιση της ετικέτας που δίνει το όνομα του χαρακτήρα που μιλάει."
# gui.rpy:349
old "## The position, width, and alignment of the dialogue text."
new "## The position, width, and alignment of the dialogue text."
# Automatic translation.
new "## Η θέση, το πλάτος και η στοίχιση του κειμένου διαλόγου."
# gui.rpy:356
old "## NVL-Mode"
new "## NVL-Mode"
# Automatic translation.
new "## Λειτουργία NVL"
# gui.rpy:358
old "## The NVL-mode screen displays the dialogue spoken by NVL-mode characters."
new "## The NVL-mode screen displays the dialogue spoken by NVL-mode characters."
# Automatic translation.
new "## Η οθόνη της λειτουργίας NVL εμφανίζει τον διάλογο που μιλούν οι χαρακτήρες της λειτουργίας NVL."
# gui.rpy:360
old "## The borders of the background of the NVL-mode background window."
new "## The borders of the background of the NVL-mode background window."
# Automatic translation.
new "## Τα όρια του φόντου του παραθύρου φόντου της λειτουργίας NVL."
# gui.rpy:363
old "## The height of an NVL-mode entry. Set this to None to have the entries dynamically adjust height."
new "## The height of an NVL-mode entry. Set this to None to have the entries dynamically adjust height."
# Automatic translation.
new "## Το ύψος μιας καταχώρησης σε κατάσταση λειτουργίας NVL. Ορίστε την τιμή None για να ρυθμίζετε δυναμικά το ύψος των καταχωρήσεων."
# gui.rpy:367
old "## The spacing between NVL-mode entries when gui.nvl_height is None, and between NVL-mode entries and an NVL-mode menu."
new "## The spacing between NVL-mode entries when gui.nvl_height is None, and between NVL-mode entries and an NVL-mode menu."
# Automatic translation.
new "## Η απόσταση μεταξύ των καταχωρήσεων της λειτουργίας NVL όταν το gui.nvl_height είναι None, καθώς και μεταξύ των καταχωρήσεων της λειτουργίας NVL και ενός μενού της λειτουργίας NVL."
# gui.rpy:384
old "## The position, width, and alignment of nvl_thought text (the text said by the nvl_narrator character.)"
new "## The position, width, and alignment of nvl_thought text (the text said by the nvl_narrator character.)"
# Automatic translation.
new "## Η θέση, το πλάτος και η στοίχιση του κειμένου nvl_thought (το κείμενο που λέει ο χαρακτήρας nvl_narrator)."
# gui.rpy:391
old "## The position of nvl menu_buttons."
new "## The position of nvl menu_buttons."
# Automatic translation.
new "## Η θέση των nvl menu_buttons."
# gui.rpy:403
old "## This increases the size of the quick buttons to make them easier to touch on tablets and phones."
new "## This increases the size of the quick buttons to make them easier to touch on tablets and phones."
# Automatic translation.
new "## Αυτό αυξάνει το μέγεθος των γρήγορων κουμπιών για να είναι πιο εύκολο να τα αγγίξετε σε tablet και τηλέφωνα."
# gui.rpy:409
old "## This changes the size and spacing of various GUI elements to ensure they are easily visible on phones."
new "## This changes the size and spacing of various GUI elements to ensure they are easily visible on phones."
# Automatic translation.
new "## Αυτό αλλάζει το μέγεθος και την απόσταση μεταξύ των διαφόρων στοιχείων του γραφικού περιβάλλοντος για να διασφαλίσει ότι είναι εύκολα ορατά στα τηλέφωνα."
# gui.rpy:413
old "## Font sizes."
new "## Font sizes."
# Automatic translation.
new "## Μεγέθη γραμματοσειράς."
# gui.rpy:421
old "## Adjust the location of the textbox."
new "## Adjust the location of the textbox."
# Automatic translation.
new "## Προσαρμόστε τη θέση του πλαισίου κειμένου."
# gui.rpy:427
old "## Change the size and spacing of items in the game menu."
new "## Change the size and spacing of items in the game menu."
# Automatic translation.
new "## Αλλαγή του μεγέθους και της απόστασης των στοιχείων στο μενού του παιχνιδιού."
# gui.rpy:436
old "## File button layout."
new "## File button layout."
# Automatic translation.
new "## Διάταξη κουμπιών αρχείων."
# gui.rpy:440
old "## NVL-mode."
@@ -407,5 +506,74 @@ translate greek strings:
# gui.rpy:456
old "## Quick buttons."
new "## Quick buttons."
# Automatic translation.
new "## Γρήγορα κουμπιά."
translate greek strings:
# gui/game/gui.rpy:5
old "## The init offset statement causes the initialization statements in this file to run before init statements in any other file."
# Automatic translation.
new "## Η εντολή init offset προκαλεί την εκτέλεση των εντολών αρχικοποίησης σε αυτό το αρχείο πριν από τις εντολές init σε οποιοδήποτε άλλο αρχείο."
# gui/game/gui.rpy:14
old "## Enable checks for invalid or unstable properties in screens or transforms"
# Automatic translation.
new "## Ενεργοποίηση ελέγχων για άκυρες ή ασταθείς ιδιότητες σε οθόνες ή μετασχηματισμούς"
# gui/game/gui.rpy:19
old "## GUI Configuration Variables"
# Automatic translation.
new "## Μεταβλητές παραμέτρων GUI"
# gui/game/gui.rpy:167
old "## The color of button text in various states."
# Automatic translation.
new "## Το χρώμα του κειμένου του κουμπιού σε διάφορες καταστάσεις."
# gui/game/gui.rpy:173
old "## The horizontal alignment of the button text. (0.0 is left, 0.5 is center, 1.0 is right)."
# Automatic translation.
new "## Η οριζόντια στοίχιση του κειμένου του κουμπιού. (0.0 είναι αριστερά, 0.5 είναι κέντρο, 1.0 είναι δεξιά)."
# gui/game/gui.rpy:278
old "## The position of the main menu text."
# Automatic translation.
new "## Η θέση του κειμένου του κύριου μενού."
# gui/game/gui.rpy:287
old "## Generic frames."
# Automatic translation.
new "## Γενικά πλαίσια."
# gui/game/gui.rpy:307
old "## The default GUI only uses sliders and vertical scrollbars. All of the other bars are only used in creator-written screens."
# Automatic translation.
new "## Το προεπιλεγμένο γραφικό περιβάλλον χρησιμοποιεί μόνο ρυθμιστικά και κάθετες γραμμές κύλισης. Όλες οι άλλες μπάρες χρησιμοποιούνται μόνο σε οθόνες που έχουν γραφτεί από τον δημιουργό."
# gui/game/gui.rpy:368
old "## The maximum number of NVL-mode entries Ren'Py will display. When more entries than this are to be show, the oldest entry will be removed."
# Automatic translation.
new "## Ο μέγιστος αριθμός καταχωρήσεων λειτουργίας NVL που θα εμφανίζει η Ren'Py. Όταν πρόκειται να εμφανιστούν περισσότερες εγγραφές από αυτό το όριο, η παλαιότερη εγγραφή θα αφαιρεθεί."
# gui/game/gui.rpy:405
old "## Localization"
# Automatic translation.
new "## Εντοπισμός"
# gui/game/gui.rpy:407
old "## This controls where a line break is permitted. The default is suitable for most languages. A list of available values can be found at https://www.renpy.org/doc/html/style_properties.html#style-property-language"
# Automatic translation.
new "## Αυτό ελέγχει πού επιτρέπεται η αλλαγή γραμμής. Η προεπιλογή είναι κατάλληλη για τις περισσότερες γλώσσες. Μια λίστα με τις διαθέσιμες τιμές μπορείτε να βρείτε στη διεύθυνση https://www.renpy.org/doc/html/style_properties.html#style-property-language."
# gui/game/gui.rpy:415
old "## Mobile devices"
# Automatic translation.
new "## Κινητές συσκευές"
# gui/game/gui.rpy:446
old "## Change the size and spacing of various things."
# Automatic translation.
new "## Αλλαγή του μεγέθους και του διαστήματος διαφόρων πραγμάτων."
File diff suppressed because it is too large Load Diff

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