Compare commits

...

743 Commits

Author SHA1 Message Date
Andy_kl 7f303a5fbf Revert some changes to make branch surface smaller. 2025-02-17 00:27:45 +04:00
Andy_kl 388cf6aac7 Fix -dash-attribute-names. 2025-02-16 13:37:34 +04:00
Andy_kl c7db343855 Fix tokenization of 1. floats. 2025-02-16 13:37:34 +04:00
Andy_kl 7a45ec3e0a Fix incorrect attribute name. 2025-02-16 13:37:34 +04:00
Andy_kl 976aeebf0b Remove lexer.Lexer and tokenizer.Tokenizer duplication. 2025-02-16 13:37:34 +04:00
Andy_kl 98e85f83be Do not litter renpy.lexer with tokenizer stuff. 2025-02-16 13:37:34 +04:00
Andy_kl 9273c41437 Fixes after review. 2025-02-16 13:37:34 +04:00
Andy_kl a590472f55 Update SyntaxError in tokenizer to ParseError. 2025-02-16 13:37:34 +04:00
Andy_kl 06e884ac70 Replace fake TokenKind class and constants with literals of token kinds. 2025-02-16 13:37:34 +04:00
Andy_kl fd5f97289b Fix line munging after rebase. 2025-02-16 13:37:34 +04:00
Andy_kl 8e2f926bc3 Move filename to PhysicalLocation named tuple. 2025-02-16 13:37:34 +04:00
Andy_kl 916a4b0f56 Strip \n at the end of logical line in Lexer.
It was that way before, it does not break things,
and people could rely on that.
2025-02-16 13:37:34 +04:00
Andy_kl 3191754e79 Make munging more robust. 2025-02-16 13:37:34 +04:00
Andy_kl 0770876b14 Make Lexer more backward compatible. 2025-02-16 13:37:34 +04:00
Andy_kl b4783374a8 Fix scriptedit and add_from. 2025-02-16 13:37:34 +04:00
Andy_kl 5c401c0406 Fix pre-7.3 CDS renpy.statements.parse function. 2025-02-16 13:37:34 +04:00
Andy_kl 4b39d4d0c4 Some cleanup. 2025-02-16 13:37:34 +04:00
Andy_kl 3860fc7d8d Rework it so it does not change Ren'Py syntax. 2025-02-16 13:37:34 +04:00
Andy_kl 50c70a8615 Revert "Delete lexersupport module."
This reverts commit e4be5a646bc39741e53f77c3aa63d046321ec904.
2025-02-16 13:37:34 +04:00
Andy_kl 70f0362b4a Fix tokenization of f-strings. 2025-02-16 13:37:33 +04:00
Andy_kl bd418d9541 Fix _ren.py to .rpy column offsets. 2025-02-16 13:37:33 +04:00
Andy_kl 95e764b411 Update tokenizer for Python 3.12 2025-02-16 13:37:33 +04:00
Andy_kl b173b7252d Fix ur"strings" parse. 2025-02-16 13:37:33 +04:00
Andy_kl 16fbd10e6f Change token kind from enum to plain string.
This is even 5% faster to init and compare.
2025-02-16 13:37:33 +04:00
Andy_kl feb9cd85ed Get rid of 2 separate enums and make it StrEnum back.
This is 15% faster accodring to cProfile.
2025-02-16 13:37:33 +04:00
Andy_kl 362f9d6c33 Some optimizations. 2025-02-16 13:37:33 +04:00
Andy_kl f2def9c148 Factor out token-based delimited python. 2025-02-16 13:37:33 +04:00
Andy_kl 1d994fa126 Change kind enums not to be string subclasses
so `TokenKind("name") != TokenExactKind("name")`.
2025-02-16 13:37:33 +04:00
Andy_kl 16685b6b9f Move munging from tokenizer to lexer. 2025-02-16 13:37:33 +04:00
Andy_kl fd5841d2d2 Delete lexersupport module. 2025-02-16 13:37:33 +04:00
Andy_kl 753776973e Move tokenizer code into separate file. 2025-02-16 13:37:33 +04:00
Andy_kl e546ac6c73 Fix performance 2025-02-16 13:37:33 +04:00
Andy_kl e67c91d176 Make Lexer token-based. 2025-02-16 13:37:33 +04:00
Andy_kl 6252945a47 Update Lexer class. 2025-02-16 13:37:33 +04:00
Andy_kl 819d3386d7 Some changes in Lexer. 2025-02-16 13:37:33 +04:00
Andy_kl 430d01aa13 Update from old tokenization. 2025-02-16 13:37:33 +04:00
Andy_kl ef8917e044 Finish Tokenizer class. 2025-02-16 13:37:33 +04:00
Andy_kl 4d1be9e610 Initial 2025-02-16 13:37:33 +04:00
Tom Rothamel e1b8de8512 assimp: Rename AssimpModel to GLTF model.
Assimp was contributing a lot of to the size of Ren'Py, so put it on a
diet and removed all the formats except for GLTF). This would also let
us switch toanother GLTF parser in the future.
2025-02-15 23:26:32 -05:00
Tom Rothamel e55856d177 Merge pull request #6154 from renpy/pep-657-munge
Fix incorrect column offsets of munged names.
2025-02-15 22:29:44 -05:00
Tom Rothamel fbe7cab9c6 Remove spurious backslash in README. 2025-02-15 20:05:42 -05:00
Tom Rothamel d6e3b4f492 Merge pull request #6157 from jsfehler/tyop_killer
Fix mimor typos
2025-02-15 17:55:35 -05:00
Joshua Fehler 7aac6fffb6 Fix mimor typos 2025-02-15 16:08:25 -05:00
Tom Rothamel 4e09103b09 Merge pull request #6155 from jsfehler/remove_unused_particle
Remove unused import
2025-02-14 20:05:28 -05:00
Joshua Fehler 3605298777 Remove unused import 2025-02-14 17:35:44 -05:00
Tom Rothamel 6b467eca81 Merge branch 'master' into pep-657-munge 2025-02-14 00:07:08 -05:00
Tom Rothamel 9e966702ac More precisely control mipmapping.
* For images used by Live2D and AssimpModel, it's enabled.
* Other images can opt-in on a per-image basis.
2025-02-13 23:48:07 -05:00
Tom Rothamel cc2486fa82 gl2: Disable mipmapping by default.
Despite Ren'Py supporting it, scaling images down (except when the
window is scaled) is somewhat rare. So instead of generating a lot of
mipmaps that will not be used, we only opt in automatically if the
window itself is scaled down, and otherwise leave the decision to
the creator.
2025-02-13 23:48:07 -05:00
Andy_kl 74cadd2b03 python: Raise original exception without chaining the same via cause for incorrect pythons. 2025-02-14 06:19:48 +04:00
Andy_kl caad552141 Update copyright year in lost files. 2025-02-14 05:25:38 +04:00
Andy_kl 3202e0eab2 Remove monkey-patch name from name_blacklist 2025-02-14 05:21:19 +04:00
Andy_kl 58434e2553 Fix 2025-02-14 03:48:18 +04:00
Andy_kl 78ff61dd08 Fix incorrect column offsets of munged names.
This moves munging to AST, so column offsets match source code.
2025-02-14 03:36:22 +04:00
Andy_kl 65edc55eb0 Add PyExpr.__new__ signature. 2025-02-13 18:04:55 +04:00
Andy_kl 5bf35c8c4f Remove linecache.updatecache monkeypatch.
That no longer needed after changes to `renpy.python.create_store`.
2025-02-13 17:59:11 +04:00
Tom Rothamel ef5777d6b6 Add PEP 657-style parse error handling. (#5881) 2025-02-13 00:02:28 -05:00
Tom Rothamel 033574e235 Merge branch 'fix' 2025-02-12 23:31:22 -05:00
Tom Rothamel 8a21aa55dc Wrap json loaded in revertible objects.
This is intended to improve compatibility with older games that might
use .iteritems and similar methods.
2025-02-12 23:21:48 -05:00
Tom Rothamel 6c948bf046 fonts: Allow deallocation and clear face cache.
So fonts can be reloaded when required. Fixes #6153.
2025-02-12 22:51:50 -05:00
Tom Rothamel 95074ff55d doc: Update keymap.
Fixes #6145.
2025-02-11 22:55:40 -05:00
Tom Rothamel d836316e90 Document the AssimpModel displayable. 2025-02-11 01:28:12 -05:00
Tom Rothamel 4804b04dcc assimp: Add zoom and flip operations. 2025-02-10 23:13:41 -05:00
Tom Rothamel 6d08132e58 assimp: Expose AssimpModel to the default store. 2025-02-09 23:35:47 -05:00
Tom Rothamel dfb6c7beb1 assimp: Handle _duplicate. 2025-02-09 21:25:09 -05:00
Tom Rothamel d2755faa5c Optimize caching of UnoptimizedTexture. 2025-02-09 14:49:20 -05:00
Tom Rothamel ef40de899c assimp: Preload AsssimpModels.
This prevents long loading times by preloading AssimpModel objects
from disk when required.

As part of this, the idea of a callback is dropped, and renders of
textures happen when the displayable is rendered. This creates all
Renders in the main thread, which makes Render mark-sweep reliable.
2025-02-09 14:05:04 -05:00
Tom Rothamel d81f8264ff Fix regression in renpy.get_all_labels.
Fixes #6130.
2025-02-08 22:30:19 -05:00
Ren'Py Bot 3b60afe8dc Merge branch 'fix' 2025-02-08 04:30:40 -05:00
Tom Rothamel 6783f22f3b When walking paths, replace \ with /. 2025-02-07 08:45:48 -05:00
Tom Rothamel 3c59cac254 Proxy SelectedIf and SensitiveIf lists into a single Action.
Fixes #6132.
2025-02-07 08:45:48 -05:00
Tom Rothamel 8de2bda1e6 Proxy SelectedIf and SensitiveIf lists into a single Action.
Fixes #6132.
2025-02-07 01:24:18 -05:00
Mal Graty 57f9a1e508 Remove disused import 2025-02-07 01:26:13 +00:00
Tom Rothamel e0ca2992ed Fix typos (#6142)
Fix typos
2025-02-06 20:17:35 -05:00
tinyboxvk 731cb8c53c Fix typos
Signed-off-by: tinyboxvk <13696594+tinyboxvk@users.noreply.github.com>
2025-02-06 18:18:43 -04:00
Tom Rothamel 37d7d71d2b Avoid renaming the filename stored in nodes.
When a .rpy is removed, and a .rpyc is given.
2025-02-06 00:33:28 -05:00
Tom Rothamel a672a6840a Redo statement names when a .rpyc file has been moved.
Fixes #6137.
2025-02-06 00:23:26 -05:00
Tom Rothamel 8603ca2cf1 assimp: Allow tangents and bitangents to be loaded. 2025-02-06 00:17:44 -05:00
Tom Rothamel 6793d7e5fa Document when mouse moves are unlikely to work.
Fixes #6126.
2025-02-05 23:40:47 -05:00
Tom Rothamel 24a8135657 Merge pull request #6138 from mal/optimised-file-scan
Optimise startup file scan
2025-02-05 20:54:37 -05:00
Tom Rothamel 1a945d9663 Merge pull request #6139 from Lezalith/master
Doc changes - Colormatrix, Audio, general cleanup
2025-02-05 20:52:34 -05:00
Lezalith 0196e6aa69 Merge branch 'colormatrix-docs' 2025-02-05 18:08:24 +01:00
Lezalith dbee728716 Doc: Audio Directory & Namespace rewrite
Directory mentioned before the Namespace.
Made more newbies friendly, and moved more to the top of the docs.

This is consistent with the Doc page on Displaying Images.
2025-02-05 17:52:37 +01:00
Mal Graty 86bb2b83c0 Find archive files during main directory scan 2025-02-05 16:26:59 +00:00
Mal Graty 9586b0f685 Minor improvements when loading extensions 2025-02-05 15:18:08 +00:00
Tom Rothamel 6aa0ee45bf doc: Matrix uniforms. 2025-02-05 01:18:16 -05:00
Tom Rothamel 54e567160c gl2: Improved missing uniform handling.
* Do a lookup and function call rather than a big if statement.
* Use the suffix to perform matrix computations.
2025-02-04 22:29:07 -05:00
Tom Rothamel 6c40f39930 gl2: Allow transforms to supply view and projection matrices.
And while at it, rename u_camera to u_projection, as the camera is
really both projection and view.
2025-02-04 02:18:10 -05:00
Tom Rothamel 9eefa84bf2 gl2: Rename the model matrix, and add u_cameraview.
This makes all the matrices we need available in uniforms. The reason
for u_transform and u_cameraview is both to make these available for
further processing in Program.missing.
2025-02-03 23:00:00 -05:00
Tom Rothamel 9d1f34995a gl2: Break out the different kinds of matrices. 2025-02-03 22:38:03 -05:00
Tom Rothamel 0883e74935 gl2: Default to highp floats on gl2es.
To prevent issues where mediump is rounded and causes problems.
2025-02-02 22:52:15 -05:00
Tom Rothamel f257dc1c41 assimp: Free the scene once import is done. 2025-02-01 16:59:26 -05:00
Tom Rothamel 1b079ef358 assimp: Route IO through Ren'Py. 2025-02-01 15:39:17 -05:00
Andrej Klychin 07b853f77f Merge pull request #6127 from dm1sh/handle_uninitialized_newest_mtime
Handle newest_mtime initialized as None while determining newest game save
2025-02-01 17:24:02 +02:00
dm1sh 8db8651eb0 Handle newest_mtime initialized as None while determining newest game save 2025-02-01 18:02:48 +03:00
Ren'Py Bot 3568c02c42 Merge branch 'fix' 2025-02-01 04:30:40 -05:00
Tom Rothamel 5e3b209ba2 Fix the name of config.dissolve_shrinks.
Fixes #6122.
2025-01-31 22:07:18 -05:00
Lezalith 4a097934de Doc: Config defaults updated. 2025-01-30 23:13:01 +01:00
Lezalith 159f6a94ce Doc: config.web_video_prompt commented out
Currently a to-do variable.
2025-01-30 23:12:49 +01:00
Lezalith c726573089 Doc: Typos. 2025-01-30 23:12:21 +01:00
Lezalith b2499105ec Doc: Recommend VSCode in Quickstart
Used to recommend Editra back when it was an option in the launcher itself.
2025-01-30 23:10:26 +01:00
Tom Rothamel 315b0a9118 The _reset style property shouldn't be exposed to sl. 2025-01-29 23:13:58 -05:00
Tom Rothamel cb6101eab4 Only clear focus when a displayable is not grabbed.
Fixes #6121.
2025-01-29 23:13:58 -05:00
Tom Rothamel 8773f1b0ed Update compat fixes for tokenizer changes in Python 3.12. (#6037) 2025-01-28 22:11:01 -05:00
Tom Rothamel ecf19de428 Merge branch 'master' into update-token-fixes 2025-01-28 22:10:31 -05:00
Tom Rothamel c182a7cc72 atl: Deal with a boolean becoming a tuple. 2025-01-27 23:17:26 -05:00
Tom Rothamel 3b5be04369 Add assimp as a dependency. 2025-01-27 01:31:38 -05:00
Tom Rothamel 38b91afaa1 assimp: Add to the build process. 2025-01-27 01:30:42 -05:00
Tom Rothamel cb382804c3 doc: Ubuntu version increase. 2025-01-27 01:30:42 -05:00
Tom Rothamel 364eef9392 assimp: Rename modelloader to assimp. 2025-01-27 01:30:42 -05:00
Tom Rothamel 773b428996 ml: Integrate modelloader with render memory management. 2025-01-27 01:30:42 -05:00
Tom Rothamel 043a7c142e Fix bad range conversion. 2025-01-27 01:30:42 -05:00
Tom Rothamel a312a6f77e ml: Move to callback-based model loading.
This allows a callback to go mesh-by-mesh, asking about textures
(and eventually, material properties) before making the render.
2025-01-27 01:30:42 -05:00
Tom Rothamel ccc502e8a6 Add the im.Null() image manipulator.
This allows the creation of a 1x1 clear pixel. The intent is to
use this when a texture is missing.
2025-01-27 01:30:42 -05:00
Tom Rothamel b2af375e0a Search for archive files in sub-directories of game/.
Per #6013.
2025-01-27 01:29:25 -05:00
Tom Rothamel 14c191cf7f ml: Texture access. 2025-01-27 01:26:36 -05:00
Tom Rothamel 3a47bea97f ml: Load embedded textures. 2025-01-27 01:26:36 -05:00
Tom Rothamel 373235c179 ml: Allow mat2 and mat3, compute the normal matrix. 2025-01-27 01:26:36 -05:00
Tom Rothamel b0765aaf3a ml: Allow Matrix to compute its transpose. 2025-01-27 01:26:36 -05:00
Tom Rothamel 8b7b17c5ac ml: Walk the node tree and handle matrix transformations. 2025-01-27 01:26:36 -05:00
Tom Rothamel 82d2384b09 cy3: Replace old for syntax with range syntax.
In older versions of Cython, the `for` loop syntax `for 0 <= i < n:`
was used. This has been replaced with the more Pythonic
`for i in range(n):` syntax, which the Cyright tool handles better.

Both syntaxes are optimized in modern Cython.
2025-01-27 01:26:36 -05:00
Tom Rothamel 37647ecfea ml: Load to the point where a model becomes visible. 2025-01-27 01:26:36 -05:00
Tom Rothamel 3dd9bff6ea ml: Get Asset Importer loading the model. 2025-01-27 01:26:36 -05:00
Lezalith 8e5445c6bf Doc: Fix quick maths
(There are 6 items in the list)
2025-01-26 18:16:35 +01:00
Lezalith a6142487c8 Doc: Clearer Premultiplied Alpha explanation
I felt like the discrepancy between "transparent pixel" and "transparent black" was confusing. This seems much clearer and hopefully technically correct.
2025-01-26 18:16:01 +01:00
Ren'Py Bot 2acbd61df4 Merge branch 'fix' 2025-01-25 04:30:40 -05:00
Tom Rothamel 2e45c3e609 doc: Fixes.
Fixes #6097.
2025-01-24 21:29:51 -05:00
Ren'Py Bot 87cc2c334d Merge branch 'fix' 2025-01-24 04:30:40 -05:00
Tom Rothamel 8c7a3b13bf Merge pull request #6105 from nullvoid8/docs_nearrect
Update `nearrect` documentation
2025-01-23 22:32:49 -05:00
Tom Rothamel 83c75d1a0f Merge pull request #6107 from Kassy2048/limit-cython-processes
Limit the number of cython processes ran in parallel
2025-01-23 22:15:11 -05:00
Kassy ac83e934a1 Limit the number of cython processes ran in parallel
Running all the cython tasks in parallel at once is a bit violent. On my Docker
container for instance, it makes some processes be killed before they complete
because of resources exhaustion.

Using a ThreadPoolExecutor instance to limit the number of parallel tasks
guarantees there will be at least as much processes at the number of CPU plus 4
(up to 32) so that should be as fast as before without risking to reach the
host resources limit.
2025-01-23 21:01:32 +01:00
Tom Rothamel 9ce1334039 Merge branch 'fix' 2025-01-22 22:31:54 -05:00
Tom Rothamel e8ece0a442 Implement creating rpa archives in subdirectories (#6103) 2025-01-22 22:22:01 -05:00
Tom Rothamel 4a0738f2aa Document build.version.
Fixes #6102.
2025-01-22 22:19:42 -05:00
nullvoid8 899eb6616f merge documentation of nearrect the class, and nearrect the statement 2025-01-23 02:46:14 +00:00
Gio 8cdc759126 Don't allow ./ path prefix in archive list 2025-01-22 18:32:04 -06:00
Gio d1af90f096 Keep track of archives' paths relative to game root 2025-01-22 18:23:38 -06:00
Gio e88db2678b Implement creating rpa archives in subdirectories 2025-01-21 22:06:06 -06:00
Tom Rothamel 125f3b81d1 Search for archive files in sub-directories of game/.
Per #6013.
2025-01-21 22:54:26 -05:00
Tom Rothamel dc4541553e Merge pull request #6084 from mal/drop-disused-winver-function
Remove disused internal function
2025-01-19 20:54:38 -05:00
Tom Rothamel 6c4e86ac13 Merge pull request #6096 from the66F95/nested-viewports
Update viewport.py
2025-01-19 20:54:20 -05:00
the66F95 a96174950f Update viewport.py
this should fix #6087 (dragging of nested viewports).
however, i don't see a way to fix scrolling of nested viewports via mousewheel also, now that a viewport is no longer focusable with a mouse/touch screen(rv.add_focus(self, renpy.display.render.Render.NO_MOUSE_FOCUS, 0, 0, width, height)).
on the other hand, i don't know if that would be very practical at all. so currently only the outer viewport makes use of the mouseweel property.
2025-01-19 10:14:20 +01:00
Tom Rothamel 536fce4a22 sl2: Add box properties to imagemap.
As documented. Fixes #6090.
2025-01-18 23:03:42 -05:00
Tom Rothamel 4957280f4c Merge pull request #6091 from Elckarow/rpe_in_libs
search for rpe files in /libs
2025-01-18 11:13:26 -05:00
Elckarow e9a0fdbbc7 doc 2025-01-18 08:41:34 +01:00
Elckarow 9c86961cd1 search /libs for rpe files 2025-01-18 08:36:04 +01:00
Tom Rothamel f3e1b12e61 doc: The addition of the as clause to use and custom screen language.
Closes #6041.
2025-01-16 19:18:19 -05:00
Tom Rothamel 805308d78a Address #6041 for custom SL statements. 2025-01-15 23:51:18 -05:00
Tom Rothamel d0fdf85658 Allow the SL use statement to take an as clause.
Per #6041
2025-01-15 21:36:29 -05:00
Mal Graty ebfcd1b153 doc: Small changes to last commit 2025-01-15 12:30:06 +00:00
Tom Rothamel 52ae19a185 doc: Transform reset changes. 2025-01-15 02:13:27 -05:00
Tom Rothamel 97f4b95969 Improve standard reset transform (#6085)
To reset all properties, and to have a reset argument to Transform.
2025-01-14 22:17:15 -05:00
Mal Graty 9af6d13c08 Improve standard reset transform
The built-in reset transform will now reset all transform properties
rather than only a small subset. This makes it more predictable (no more
guessing which properties it will reset) and also future proof as it no
longer requires being kept up to date as an explicit definition.
2025-01-14 17:45:01 +00:00
Mal Graty b4bbf4bd80 Remove disused internal function
This was previously used to make allowances for Windows 7 and below,
however those conditions have been dropped along with Windows 7 support
and so there's no need to keep this function around.
2025-01-14 14:59:09 +00:00
Tom Rothamel 698d391033 Allow a displayable with size to opt out of mouse focus.
And do that for viewports.

Fixes #6081.
2025-01-14 02:11:35 -05:00
Tom Rothamel d9ecde9a62 Make gles2 the default renderer on arm-linux.
As it's much faster on Raspberry Pi, and probably other arm-linux
devices.
2025-01-14 02:11:35 -05:00
Tom Rothamel ca9e2dfe47 Fix regexp. 2025-01-14 01:49:35 -05:00
Tom Rothamel 321434e95e Allow a displayable with size to opt out of mouse focus.
And do that for viewports.

Fixes #6081.
2025-01-14 01:44:45 -05:00
Tom Rothamel 33e633c1aa docs: Remove debug print and fix typos. 2025-01-13 22:43:24 -05:00
the66F95 41b6e689d3 fix some newline typos 2025-01-13 08:56:13 -05:00
Tom Rothamel cddda04e20 Merge pull request #6077 from the66F95/newline-typos
fix some newline typos
2025-01-13 08:55:21 -05:00
the66F95 1a8eed69ac fix some newline typos 2025-01-13 14:31:20 +01:00
Tom Rothamel 3bcc9c72b2 Changelog game/libs and game/mods.
Per #6049.
2025-01-12 22:54:17 -05:00
Tom Rothamel 4f1ee9e601 Make game/libs and game/mods special.
If flag files, game/libs/libs.txt and game/mods/mods.txt exist.

In both cases, the files in the directory load in unicode order by
filename, and not by full path. Files in game/libs load before other
files in game, while those in game/mods load after other files in
games.

The main reason for this is to support CDSes that are  distributed
in libraries. A CDS in game/libs/cds.rpy can be used in any file
in the main game.

Similarly, mods son't affect the parsing of the main game.

Per #6049.
2025-01-12 22:31:42 -05:00
Tom Rothamel 732ef3af11 Create libs/ and lib/libs.txt.
The latter is the flags file that will load the libs directory in
libs mode.
2025-01-12 15:25:28 -05:00
Tom Rothamel 0c3b419dad Add the libs and mods directories to the list in launcher. 2025-01-12 14:21:13 -05:00
Ren'Py Bot adf545a199 Merge branch 'fix' 2025-01-12 04:30:40 -05:00
Tom Rothamel 1a952fd87e py312: Remove import machinery from store modules.
If the import machinery is present, Python will try to use it when
loading lines for a traceback. This would lead to the wrong line
being shown in tracebacks.
2025-01-12 00:22:09 -05:00
Tom Rothamel 96825cb518 Changelog prefering gles2 on Raspberry Pi. 2025-01-11 22:48:55 -05:00
Tom Rothamel 7958f5445a Make gles2 the default renderer on arm-linux.
As it's much faster on Raspberry Pi, and probably other arm-linux
devices.
2025-01-11 22:36:46 -05:00
Gio efd4cc6b5e Document cb_args cb_ prefix behavior 2025-01-11 15:34:01 -05:00
Tom Rothamel c57b7748f5 Merge pull request #6062 from GiovanH/doc-callback
Document cb_args cb_ prefix behavior
2025-01-11 15:32:23 -05:00
Tom Rothamel acf1f8ae38 Merge branch 'fix' 2025-01-10 23:03:26 -05:00
Tom Rothamel 35c4ba4a41 Make all fields in gl2draw public.
Fixes #6060.
2025-01-10 22:56:34 -05:00
Tom Rothamel 13df1dc000 Merge branch 'fix' 2025-01-10 01:24:29 -05:00
Tom Rothamel 5361a8e9a5 Ignore text tag errors that happen after {done}. 2025-01-10 01:21:56 -05:00
Tom Rothamel ba76f970c5 Perform substitution when scrying extend text.
This prevents problems if the scryed text substitutes things.

Fixes #6071
2025-01-10 01:07:25 -05:00
Tom Rothamel a9b529b9fd Back out change from fix branch.
That was already made in this branch.
2025-01-09 22:46:32 -05:00
Tom Rothamel a4f4d49259 Merge branch 'fix' 2025-01-09 22:45:28 -05:00
Tom Rothamel 7d8d05107b Allow the fix branch to run on python 3.12. 2025-01-09 22:44:43 -05:00
Tom Rothamel dfb31d28f9 Load common files before game files. 2025-01-09 01:09:42 -05:00
Tom Rothamel 181eb8adab Do not reload with a nonexistent file comes into existence.
Fixes #6018.
2025-01-08 23:32:25 -05:00
Tom Rothamel f0feb9b33e Merge branch 'fix' 2025-01-08 09:38:30 -05:00
Tom Rothamel 2639028ce7 Document config.has_music, config.has_sound, and config.has_voice.
Also, slight correction on how a channel without a mixer works.

Fixes #6068.
2025-01-08 08:27:10 -05:00
Tom Rothamel 85e055a3dc Fix an unconverted use of split_filename. 2025-01-07 22:01:46 -05:00
Tom Rothamel cbc6986ae6 Merge pull request #6070 from mal/windows-platform-checks
Small clean up of Windows platform checks
2025-01-07 19:04:09 -05:00
Mal Graty c329714093 Remove check intended for Windows 7 and older only
Follow up to 919e22059b.
2025-01-07 18:48:13 +00:00
Mal Graty abdf045277 Skip redundant platform version check on Windows 2025-01-07 18:46:24 +00:00
Tom Rothamel 8df7c8605d cslots: Only allow objects of the same type to compare equal.
Fixes #6066, which was caused by the changes to store statement
names in the statement, changes that made an unnamed statement
equal None.
2025-01-07 02:14:28 -05:00
Tom Rothamel 919e22059b Do not use renpy.windows as a tuple.
Fixes #6067.
2025-01-06 22:49:59 -05:00
Tom Rothamel 10d04c1faf Allow Ren'Py to continue to operate if something corrupts the bytecode cache.
This fixed an issue reported to me via patreon, though I have no idea
why it's happening - seems to be one-off.
2025-01-06 22:35:58 -05:00
Tom Rothamel 0a1e694e02 Many changes to how Ren'Py deals with seen statements.
The biggest one is that once a translation has been seen, dialogue
statemments inside that translation are also marked as seen.

This change also changes the representation of seen translates and
nodes, to store a 64-bit hash of the identifier, which should take
up less memory and should be able to be pickled faster.
2025-01-05 23:04:19 -05:00
Tom Rothamel 0f6379a797 Properly cast numbers to ensure there isn't a python conversion. 2025-01-05 22:42:45 -05:00
Gio 9226d27605 Document cb_args cb_ prefix behavior 2025-01-05 18:18:07 +00:00
Tom Rothamel c2baefb2a1 Minor cleanups to the LibExecFinder. 2025-01-05 01:29:03 -05:00
Tom Rothamel 7aeef3bae9 Type corrections.
renpy.windows was aways meant to be bool like the other platform flags,
while store can just be an annotated assign.
2025-01-05 01:06:51 -05:00
Tom Rothamel 8d5dbe4f73 Merge pull request #6006 from renpy/modernize-init
Modernize `renpy.__init__`.
2025-01-05 00:56:25 -05:00
Tom Rothamel 04cd9fe223 Merge remote-tracking branch 'origin/fix' 2025-01-05 00:51:20 -05:00
Kassy beedbc0a22 Do not kill Renders that cache the last video frame on Web (#6057)
Fixes and issue where, when the next video frame is not ready, the previous one is returned by get_movie_texture_web(). Normally, this is just a GLTexture instance, but when using a mask, that frame is a Render instance instead. The problem is that Render instances get killed soon after they have been drawn, so get_movie_texture_web() returns a dead instance when re-using the previous frame which causes a crash because of missing uniforms when drawing the screen.

Fixes #6050.
2025-01-05 00:50:49 -05:00
Tom Rothamel 36c00a5e19 Rewrite the imports to use typing.TYPE_CHECKING. 2025-01-05 00:48:05 -05:00
Tom Rothamel cedcc36418 Update .gitignore and .vscode/settings.json when generating pyi files.
Also check in some missing pyis.
2025-01-04 23:33:41 -05:00
Tom Rothamel 6a828f6ade Revert "cslots: Avoid double store of IntegerSlot defaults"
This reverts commit 627c6c6a48.
2025-01-04 14:37:25 -05:00
Tom Rothamel 3df4aabba0 Fixes to astsupport. 2025-01-04 14:37:15 -05:00
Tom Rothamel ae20ebead0 Merge pull request #6058 from mal/cslots-suggestions
Suggestions for cslots
2025-01-04 14:36:55 -05:00
Tom Rothamel fc5ccc2f7b Rename hash functions, and make astsupport.pyi. 2025-01-04 12:16:34 -05:00
Mal Graty 9c31ee66bb cslots: Unify compressed behaviour of Slot classes 2025-01-04 11:09:24 +00:00
Mal Graty 627c6c6a48 cslots: Avoid double store of IntegerSlot defaults 2025-01-04 11:01:47 +00:00
Mal Graty 407f3ad859 cslots: Maintain experiment while in development 2025-01-04 11:00:32 +00:00
Tom Rothamel 2b63ccf21e cslots: Use the default values from the namespace. 2025-01-03 23:56:19 -05:00
Tom Rothamel 2993629f22 Allow a volume adjustment to be included in audio filenames.
Closes #6055.
2025-01-03 22:19:32 -05:00
Andrej Klychin 77aaeaa514 Merge pull request #6053 from mal/fix-lint-bytecode-check
Update lint to use py_compile function
2025-01-03 18:01:30 +02:00
Mal Graty 7baac98ecb Update lint to use py_compile function 2025-01-03 15:48:32 +00:00
Tom Rothamel ed155c4b43 cslots: Construct the class, then read the annotations dictionary.
This attempts to future-proof things when PEP 649 is out.
2025-01-03 02:06:06 -05:00
Tom Rothamel bfae063c3c Fix to _in_current_store behaviour for ATLTransform (#6043) 2025-01-02 20:07:41 -05:00
Tom Rothamel 2ee62542bb Update Ukrainian Translation (#6044) 2025-01-02 20:06:51 -05:00
Tom Rothamel 20f988a175 Update copyright for 2025. 2025-01-02 19:01:36 -05:00
Tom Rothamel 26c440f7a5 Merge branch 'fix' 2025-01-02 18:57:41 -05:00
Tom Rothamel b0e250d11e cy3: Fix an issue with coercion of the string. 2025-01-02 18:52:43 -05:00
Tom Rothamel 74157a4ad6 Update copyright for 2025. 2025-01-02 18:48:44 -05:00
Ruben Garcia 25b4a17d1a Fix typo 2025-01-02 18:47:03 -05:00
Tom Rothamel a2f0747294 Merge pull request #6005 from RubenGarcia/master
Fix typo in documentation for SaturationMatrix.
2025-01-02 18:41:52 -05:00
Tom Rothamel 7c8f6fc6b7 py3: Remove py2 compatibility. (#6052)
Remove various compatibility names that were only used for py2 to py3 compatibility purposes.
2025-01-02 18:40:54 -05:00
Andy_kl 6951397e17 Remove ast shenenegans, as it was fixed in Python 3.12. 2025-01-02 21:52:59 +04:00
Andy_kl e46ba6c0db Render multi-caret parse errors correctly. 2025-01-02 21:52:59 +04:00
Andy_kl 8737c5f2a7 Work around how Python tokenizer init SyntaxError. 2025-01-02 21:52:58 +04:00
Andy_kl 16855d59a8 Modernize ParserError and uses. 2025-01-02 21:52:58 +04:00
Andy_kl cba492a109 Add monkeypatch of linecache.updatecache.
This replaces `renpy.lexer.get_line_text` but also
allows other python modules to read renpy files,
namely `traceback` module.
2025-01-02 21:47:03 +04:00
Andy_kl 2d0c3a3929 Fixes after review. 2025-01-02 21:31:25 +04:00
Andy_kl 66fd602018 Revert some bytes handlers as it was never public at the first place. 2025-01-02 19:49:20 +04:00
Andy_kl 85eb29e25d Reraise exceptions without spurious frames. 2025-01-02 19:36:42 +04:00
Andy_kl cfa27c3295 Fix unintentional change of basestring in d3c827f 2025-01-02 18:34:40 +04:00
Andy_kl 3bd1fe0d0c Make one change cleaner after review. 2025-01-02 18:11:43 +04:00
Andy_kl ad68443ce9 Revert unrelated changes to displayable[_or_none]. 2025-01-02 18:09:54 +04:00
Andy_kl 29867c25da Audit other functions from renpy.compat. 2025-01-02 17:10:01 +04:00
Andy_kl 5aae0b2a4c Audit Python 2/Python 3 only comments and variables. 2025-01-02 16:52:33 +04:00
Andy_kl 02dee6d384 Audit uses of basestring in RenPy code base.
Most of times it already raised, but often deep in the RenPy.
In other cases, decode or use tuple of str and bytes.
2025-01-02 16:38:40 +04:00
Andy_kl bed1de4001 Update uses of reraise and exec_ with Python 3 counterparts. 2025-01-02 14:39:10 +04:00
Tom Rothamel 6fdb82a211 Allow an AST node to be used as its own name.
By doing this, it's no longer to keep the name tuples materialized
all the time. Instead, the AST store this information, which should
reduced memory usage (at the cost of some CPU time).
2025-01-02 00:30:19 -05:00
Tom Rothamel 4e97001e47 Store node names inside the node.
This prevents a 64 byte tuple and 28 byte integer from being
stored for every object. (At the cost of having to recompute these
when needed.)
2025-01-01 23:48:16 -05:00
Tom Rothamel 389eac79fe Startup times are now in ms. 2025-01-01 23:37:48 -05:00
Tom Rothamel 18558cca21 Reimplement PyExpr in Cython.
The motivation for this is to reduce the memory used by PyExprs
Previously, a PyExpr needed to point to an int object for the line
number (8 bytes for the pointer, 28 bytes for the int), and another for the
Python version. (8 bytes for the pointer.)

Now, the line number is stored in 4 bytes, and the Python version in
1. Even with 4 bytes for the hashcode, this drops from 44 to 12 bytes
of overhead.

There's also another 16 bytes saved by disabling cyclic gc.
2025-01-01 21:00:16 -05:00
Tom Rothamel 0e9198ae0f cy3: Build in -3 mode.
Now that we don't need to support Python 2, it's possible to build
in -3 mode. This should make the generated C more optimized.
2025-01-01 20:02:13 -05:00
Tom Rothamel eee91e5f9c cslots: Allow unknown fields to be handled by a descriptor. 2025-01-01 17:37:13 -05:00
Tom Rothamel 750fc33438 Remove import of renpy.location. 2025-01-01 09:23:33 -05:00
Tom Rothamel 545f4200e4 Rename pythonsupport to astsupport.
Both because it's used mostly by the ast module, and because PyExpr
will be moving here.
2025-01-01 09:09:56 -05:00
Tom Rothamel fe02e12192 Improve the bytecode cache.
Previously, the bytecode cache had a lot of duplication, with
PyCode and PyExpr blocks being treated differently. With this
change, the same cache is used for both.

By storing fnv1a hashcodes on both objects, looking up the bytecode
in the py_compile cache should be fast, and so the second path to
hash and cahe PyCodes isn't required.
2025-01-01 01:30:32 -05:00
Tom Rothamel 57b2ce638e Add a c-compiled fnv1a hash.
This is intended to replace the md5s overkill used when compiling
a script.
2024-12-31 23:30:49 -05:00
Tom Rothamel 05d0bff24e cslots: Decompress a compressed object on modification.
This allows things like scriptedit.py to work.
2024-12-31 22:29:16 -05:00
Tom Rothamel ee1a3cf44a cslots: Compress the script after chaning translates. 2024-12-31 09:22:24 -05:00
Tom Rothamel 5013b1f98f cslots: object.__getstate___ exists, we don't want it. 2024-12-30 08:46:52 -05:00
Tom Rothamel 850a9f9b37 cslots: Fix filename/linenumber. 2024-12-30 02:23:56 -05:00
Tom Rothamel 0b61e59d7f Remove the location class.
Now that cslots supersedes it.
2024-12-30 02:09:08 -05:00
Tom Rothamel b01928453c cslots: Compress and kill nodes.
The former should reduce memory usage, the latter is required to
break reference cycles when the script is unloaded.
2024-12-30 02:03:09 -05:00
Tom Rothamel 3af05dadf6 cslots: Migrate AST to cslots.
This required marking class variables with ClassVar.

Most __new__ methods have been eliminated, as they would duplicate
the default information now contained by cslots.
2024-12-30 01:00:18 -05:00
Tom Rothamel 2508785591 cslots: Add control on if line/column is included when pickling. 2024-12-30 00:59:26 -05:00
Tom Rothamel b8769d9800 cslots: Directly access meta-information. 2024-12-29 22:59:03 -05:00
veydzh3r 1febfd4306 Update gui.rpy 2024-12-29 22:43:57 +00:00
veydzh3r 260cf63292 Update developer.rpy 2024-12-29 22:43:20 +00:00
Mal Graty d95d734912 Avoid acting on a child about to be replaced
Calling an instance of ATLTransform acts on the child, which if none is
passed, is self.child. This isn't desired in cases where we're about to
inject a new child, so instead provide the child as a parameter.

Additionally we pre-emptively call _unique on the child to forestall any
_duplicate attempts during the construction of the transform.
2024-12-29 21:51:27 +00:00
Tom Rothamel c35dc9a02a cslots: Automatically define Slots for non-class variables.
And as a side-effect, make the annotations something I enjoy
looking at.
2024-12-29 11:33:15 -05:00
Tom Rothamel f99c8acd62 cslots: Use __getstate__ if defined. 2024-12-29 11:31:02 -05:00
Tom Rothamel fbf533a003 cslots: Remove auto-interning.
It wasn't being used a bit much, and it would be dangerous to
intern a pyexpr.
2024-12-29 10:37:07 -05:00
Tom Rothamel 03c31da5f0 cslots: Move PyCode over to Cslots. 2024-12-28 23:27:13 -05:00
Tom Rothamel a794ee3b00 cslots: Merge with Ren'Py. 2024-12-28 13:06:35 -05:00
Tom Rothamel c1afced29c Add a debug print when a .rpyc file can't be loaded.
This should never trigger for users, except during downgrade
scenarios.
2024-12-28 10:22:51 -05:00
Tom Rothamel 02156e6e47 Merge pull request #6023 from renpy/modernize-ast
Make `renpy.ast` more polymorphic.
2024-12-28 09:16:29 -05:00
Tom Rothamel 07b9a6da78 cslots: Pickle support.
Also some performance optimizations.
2024-12-28 00:57:41 -05:00
Tom Rothamel a77170508e cslots: Add IntegerSlot
This is a slot that's optimized to contain an integer, storing it
without needing to create a separate object.
2024-12-27 19:10:16 -05:00
Tom Rothamel 03cdfd091d cslots: Add the decompress method. 2024-12-27 17:06:19 -05:00
Tom Rothamel 2caf0adabb cslots: Fix and test getsizeof. 2024-12-27 15:18:07 -05:00
Tom Rothamel 423f544dc9 cslots: Objects with the metaclass also do not particpate in cyclic gc. 2024-12-27 15:16:53 -05:00
Tom Rothamel e207fdc435 cslots: Remove cyclic GC, replace with a ._kill() method.
Cyclic GC imposes a 16 byte overhead on each object. Instead of
cyclic GC, we have a ._kill() method that clears the references
from each object, and rely on Ren'Py to call it to break cycles
when it's time for the Script to be deallocated.
2024-12-27 14:45:15 -05:00
Tom Rothamel bfbc9b8b1f cslots: Use pymalloc. 2024-12-27 14:13:03 -05:00
Tom Rothamel ae04573e90 cslots: Add object compression. 2024-12-27 13:22:04 -05:00
Tom Rothamel 6c2baa1474 cslots: Allow slots to contain integers.
For now, just allow it the IntegerSlot class will come later.
2024-12-27 11:31:05 -05:00
Tom Rothamel ceb7dea7cc cslots: Renamings, error handing, compressed flag. 2024-12-27 01:10:07 -05:00
Tom Rothamel 2da5f4ae6a Support cyclic garbage collection. 2024-12-26 23:56:41 -05:00
Andy_kl 8bbb827d25 Update compat fixes for tokenizer changes in Python 3.12. 2024-12-27 01:35:57 +04:00
Tom Rothamel a535365da0 cslots: Uncompressed objects. 2024-12-26 00:21:22 -05:00
Tom Rothamel 2450dcbfa8 Remove align function.
It's not needed.
2024-12-26 00:21:22 -05:00
Tom Rothamel 439921baea cslots: Initial setup.
Cslots - short for compressed slots, will be an attempt to reduce
AST memory consumption by only including non-default slots in
objects.
2024-12-26 00:21:22 -05:00
Andy_kl ac450c8b1f Fix depricated use cases of python ast. 2024-12-26 06:22:52 +04:00
Tom Rothamel 4163c1396c Merge pull request #6035 from shawna-p/default-focus-fix2
Don't overrule focus override for max focus
2024-12-25 20:39:00 -05:00
shawna-p d6ab06dd1f Don't overrule focus override for max focus 2024-12-25 16:42:56 -05:00
Tichq 3db515db3c fix: function staticmethod of TransformMatrix 2024-12-25 07:29:53 -05:00
Tom Rothamel 99cb4c0975 Merge pull request #6032 from qTich/fix-matrixtransform-function
fix: function property of `TransformMatrix`
2024-12-25 07:28:18 -05:00
Tichq b120ea6303 fix: function staticmethod of TransformMatrix 2024-12-25 11:25:01 +03:00
Tom Rothamel cc654ebfeb atl: Distinguish between children and included transforms.
During prediction. Fixes #6014.
2024-12-25 00:04:04 -05:00
Tom Rothamel a8342ba40b Merge pull request #6031 from mal/fix-docstring-lint-warnings
Use raw strings for docstrings that contain unescaped slashes
2024-12-24 13:21:21 -05:00
Mal Graty 72535d881a Use raw str for docstrings that contain slashes 2024-12-24 15:06:23 +00:00
Tom Rothamel 41458e274e Better error if textshaders are used incorrectly. 2024-12-24 00:26:31 -05:00
Tom Rothamel 5f8382a9aa Use the correct condition for including i686.
Fixes #6028.
2024-12-24 00:26:31 -05:00
Tom Rothamel f389c13b29 Better error if textshaders are used incorrectly. 2024-12-24 00:23:35 -05:00
Tom Rothamel c57dbe7a9d Use the correct condition for including i686.
Fixes #6028.
2024-12-23 20:34:28 -05:00
Tom Rothamel fba051737f dist: Classify pxd files as source only. 2024-12-22 10:26:01 -05:00
Tom Rothamel 83c87011ad Updated keywords.py. 2024-12-22 10:15:15 -05:00
Tom Rothamel 9e9e9061e0 Distribute src/ and the new setup.py. 2024-12-22 10:08:18 -05:00
Tom Rothamel 3bef0a10b0 Remove the usue of future. 2024-12-22 09:44:33 -05:00
Tom Rothamel cedf98910f Python 311 bytecode is no longer needed for web builds. 2024-12-22 09:36:53 -05:00
Tom Rothamel ae08ac55c5 Only include the current libpython3.{x}.dll in builds. 2024-12-22 09:34:49 -05:00
Tom Rothamel e35fcb2e86 Only include the current libpython3.{x}.dll in builds. 2024-12-22 09:32:23 -05:00
Ren'Py Bot 6c8030ad99 Merge branch 'fix' 2024-12-22 04:30:55 -05:00
Tom Rothamel 820bd815ca Fix code-typo regarding tight playback.
Fixes #6019.
2024-12-22 01:34:27 -05:00
Tom Rothamel 38b505ba36 Fix code-typo regarding tight playback.
Fixes #6019.
2024-12-22 01:32:26 -05:00
Tom Rothamel 9de620953d doc: Changelog. 2024-12-22 01:31:14 -05:00
Tom Rothamel c5f54a6d72 rapt: Call non-static methods through mActivity.
This wasn't enforced by pyjnius, and now it is.
2024-12-22 01:25:30 -05:00
Andy_kl 9968387f89 Simplify Node.get_init method to always return init priority
of the node and make polymorphic `Node.execute_init` do the job.
2024-12-21 20:18:23 +04:00
Tom Rothamel 680fe45ec8 Merge pull request #6010 from AbdulGoodLooks/patch-6
Fix typo in style_properties.rst
2024-12-21 10:38:26 -05:00
Andy_kl 5c2258b970 Add Node.get_translation_strings, a polymorphic method to get
extra translation strings of the node.
2024-12-21 18:10:13 +04:00
Andy_kl 4d976330ec Make reacheability a polymorphic method on Node class. 2024-12-21 17:45:50 +04:00
Andy_kl d8096effe4 Add removed slots of TranslateSay as properties. 2024-12-21 17:23:09 +04:00
Andy_kl f04a303af0 Do not set get_init and early_execute to None.
It does not speed things up any way to notice.
2024-12-19 19:46:57 +04:00
Andy_kl 2fdcd690a9 Move non translation nodes before translations. 2024-12-19 19:37:57 +04:00
Andy_kl 52e309aa1b Add types for renpy.ast module. 2024-12-19 19:35:57 +04:00
Ren'Py Bot 293f0f5e5d Merge branch 'fix' 2024-12-19 04:30:54 -05:00
Tom Rothamel f132d49157 text: Handle events in virtual coordinates.
Fixes #6013.
2024-12-18 23:17:56 -05:00
Abdul 73333d16fc Fix typo in style_properties.rst 2024-12-17 21:46:42 +00:00
Tom Rothamel 6cf5e23f6a reorg: Change Setup to work with the new location of generated files. 2024-12-15 23:11:31 -05:00
Tom Rothamel e6b92d5a27 reorg: Give setup.py a main. 2024-12-15 20:39:22 -05:00
Tom Rothamel f2d3e0d20e reorg: Setup.py no longer probes for libraries and includes.
Previously, setup.py had been the main build process, and would
probe the system for dependencies. Now that all dependencies are
available on all platforms, and cross-compiling is done by renpy-build,
setup.py has been simplified by assuming everything is present.

(Optional probing is done using pkg-config.)

Various includes have been changed to be more canonical.
2024-12-15 20:27:42 -05:00
Tom Rothamel e41a4f85e9 reorg: Eliminate use of the module directory.
This directory contained a mix of both c/cython source code, scripts,
and build information. Now, source is in src, scripts are in scripts,
and setup.py is in the root.
2024-12-15 18:14:26 -05:00
Andy_kl 6b4e61f3b2 Remove uses of removed update_path 2024-12-16 02:44:11 +04:00
Andy_kl adfb70038b Modernize renpy.__init__. 2024-12-16 02:41:22 +04:00
Tom Rothamel 5146b83125 Document the two most important branches. 2024-12-15 11:02:18 -05:00
Ruben Garcia 5bc46900f6 Fix typo 2024-12-15 10:31:31 +01:00
Ren'Py Bot b23a0df6e8 Merge branch 'fix' 2024-12-15 04:30:54 -05:00
Tom Rothamel 86dbd0d299 Move statement_start from a property of ast.Node to ast.Menu.
This reduces memory, as it's only relevant for Menu nodes.
2024-12-15 02:41:04 -05:00
Tom Rothamel 13919e7f94 Store ast filename and line number in Location.
This should reduce the memory used by not requiring many integer
objects to be kept alive.
2024-12-15 02:36:08 -05:00
Tom Rothamel 63155fbc7e Ren'Py is now cython 3 compatible. 2024-12-14 23:54:24 -05:00
Tom Rothamel ba0bc218c2 cy3: Add noexcept annotations.
These allow Ren'Py to be compiled by cython 3.0.
2024-12-14 20:50:07 -05:00
Tom Rothamel 8a4a811a4c cy3: Add noexcept annotations.
These allow Ren'Py to be compiled by cython 3.0.
2024-12-14 19:59:04 -05:00
Tom Rothamel 643fd38510 Merge branch 'fix' 2024-12-14 01:08:40 -05:00
Tom Rothamel 8ea6482788 Add config.keep_screenshot_entering_menu.
Per discord discussion, this makes it possible to take a screenshot
before an in-game menu is shown, and use that screenshot when entering
the menu context.
2024-12-14 01:07:20 -05:00
Tom Rothamel 97331e2464 Fix to how SetCharacterVolume sets the volume.
Previously, it would try to adjust the volume. Now it treats it
the same way _CharacterVolumeValue does.

Fixes #6001.
2024-12-13 20:05:12 -05:00
Tom Rothamel 2ba27b5549 Add the location class.
This class stores a filename, linenumber, and a column. Storing the
data as C inside the object is intended to reduce the amount of
RAM used.
2024-12-12 22:54:59 -05:00
Ren'Py Bot 8c26b986a3 Merge branch 'fix' 2024-12-12 04:30:54 -05:00
Tom Rothamel 8d38a6ae4d Add no_launcher_links.txt.
If a file named ``no_launcher_links.txt`` exists in the Ren'Py base directory (the one with
renpy.exe, renpy.sh, and renpy.app in it), the launcher will disable links to renpy.org. While
not guaranteed, this is intended in educational and homeschool environments to prevent young
Ren'Py users from seeing adult sponsors.
2024-12-11 22:27:36 -05:00
Tom Rothamel bac6dbdba7 Add no_launcher_links.txt.
If a file named ``no_launcher_links.txt`` exists in the Ren'Py base directory (the one with
renpy.exe, renpy.sh, and renpy.app in it), the launcher will disable links to renpy.org. While
not guaranteed, this is intended in educational and homeschool environments to prevent young
Ren'Py users from seeing adult sponsors.
2024-12-11 21:59:35 -05:00
Tom Rothamel 346b34d5a0 Allow Gallery.get_Fraction to return the fraction for all buttons.
Fixes #5991.
2024-12-10 22:54:33 -05:00
Tom Rothamel 7d2a131995 Changelog #6000. 2024-12-09 23:32:28 -05:00
Tom Rothamel fd6eb01e5e Change thumb_offset, add thumb_align #6000
Updates thumb_offset to optionally take a tuple instead of an integer. If provided a tuple, the first number is used to offset the left/top of the bar, and the second number is used for the right/bottom. This is helpful for bars whose thumb is asymmetrical, such as a half-circle. In particular, it avoids issues with semi-transparent image overlap (in general or when using ATL or transitions). It is backwards-compatible with the regular integer value.

Adds a thumb_align property to bars. This solves an incredibly common issue which occurs when the bar's thumb is larger than the bar images. Most people want the center and thumb of the bar to be aligned. This provides a simple in-engine solution, rather than forcing players to adjust their bar images in an image editor.
2024-12-09 20:28:02 -05:00
shawna-p 81653b0daf New bar properties 2024-12-09 19:23:08 -05:00
Ren'Py Bot c97f8acadd Merge branch 'fix' 2024-12-09 04:30:54 -05:00
Tom Rothamel e3c4993487 Bump the fix version. 2024-12-08 23:48:49 -05:00
Ren'Py Bot 62810b94ab Merge branch 'fix' 2024-12-08 04:30:54 -05:00
Tom Rothamel d0270729c1 doc: Changelog. 2024-12-07 22:57:53 -05:00
Tom Rothamel 3bc3bf3e19 Avoid reporting string errors on triple-quoted strings.
Which tend to be much more intentional, and cause errors when
monologue mode exists.
2024-12-07 22:31:04 -05:00
Tom Rothamel 831fb59d49 Produce a better error for monologue mode with an id clause.
Fixes #5980.
2024-12-07 22:16:19 -05:00
Tom Rothamel 5db210473c Switch from MultipleDict to collections.ChainMap (#5983)
Switch from MultipleDict to collections.ChainMap
2024-12-07 00:24:22 -05:00
Tom Rothamel 0686c2621d Remove debug raise, again.
Fixes #5986.
2024-12-06 22:44:36 -05:00
Mal Graty 3fcf634c8b Switch from MultipleDict to collections.ChainMap 2024-12-06 03:20:20 +00:00
Tom Rothamel 9caf81c129 Merge remote-tracking branch 'origin/fix' 2024-12-05 22:07:35 -05:00
Tom Rothamel f5555d6f1a Merge pull request #5982 from mal/fix-5981
Prevent MultipleDict masking builtins during interpolation
2024-12-05 22:02:58 -05:00
Mal Graty e7eb0e135b Meet expectation to raise KeyError on missing keys
Fixes #5981
2024-12-06 00:15:14 +00:00
Ren'Py Bot 9d4fd5aef1 Merge branch 'fix' 2024-12-04 04:30:54 -05:00
Tom Rothamel 92514e4c1f imagemap: Remove caching.
This has been disabled for a long time, and doesn't make a lot of sense
in modern Ren'Py. So it's gone.
2024-12-04 00:36:12 -05:00
Tom Rothamel 40078a18f3 Offer config.screen_width, config.screen_height to imagemaps.
This shouldn't affect normal imagemaps that use images, but
should make using non-image displayables in imagemaps work better.

Fixes #5976.
2024-12-04 00:36:12 -05:00
Tom Rothamel 22153cb191 Use itch.zone instead of itch.ovh.
Per https://github.com/itchio/butler/commit/898b30bb2cadaaf561d91c4f7784aa1927c5cfb2

Fixes #5795.
2024-12-04 00:36:12 -05:00
Tom Rothamel bf9de85f75 Offer config.screen_width, config.screen_height to imagemaps.
This shouldn't affect normal imagemaps that use images, but
should make using non-image displayables in imagemaps work better.

Fixes #5976.
2024-12-03 23:28:01 -05:00
Tom Rothamel 6470a37b40 Use itch.zone instead of itch.ovh.
Per https://github.com/itchio/butler/commit/898b30bb2cadaaf561d91c4f7784aa1927c5cfb2

Fixes #5795.
2024-12-03 19:18:34 -05:00
Ren'Py Bot b6aa7e7139 Merge branch 'fix' 2024-12-03 04:30:54 -05:00
Tom Rothamel 99a5ac89db Remove style_prefix from the template say screen.
As it's not used.

Fixes #5973.
2024-12-03 00:34:17 -05:00
Tom Rothamel d594f15b23 Merge branch 'fix' 2024-12-02 23:47:45 -05:00
Tom Rothamel e46073b059 Allow renpy.register_style_preference to take a style by name.
Per the documentation.

Fixes #5972.
2024-12-02 21:57:17 -05:00
Mal Graty 88ddee9d5e doc: Missing version headers in changelog 2024-12-02 01:24:05 +00:00
Tom Rothamel d8283c958c doc: Changelog. 2024-12-01 20:17:41 -05:00
Tom Rothamel 31025cdadb doc: Credits, sponsors. 2024-12-01 19:27:10 -05:00
naughty road e66a9b8c6d Code cleanup: remove superfluous line 2024-12-01 19:10:20 -05:00
naughty road 2b5b9835b7 Fix order of attempting to load presplash images
Checks for foreground+background first, before falling back to the single presplash image, instead of the other way around, to match behavior in the documentation (https://www.renpy.org/doc/html/splashscreen_presplash.html#adding-a-progress-bar).
2024-12-01 19:10:08 -05:00
Tom Rothamel 43441524cd Merge pull request #5969 from NaughtyRoad/fix-order-of-presplash-image-checks-to-match-documentation
Fix order of attempting to load presplash images
2024-12-01 19:09:48 -05:00
the66F95 3f667e3ef1 Update dragdrop.py
should fix #5968 (not extensively tested)
2024-12-01 19:08:38 -05:00
Tom Rothamel f8cc239df6 Merge pull request #5970 from the66F95/drags
Update dragdrop.py
2024-12-01 19:08:16 -05:00
the66F95 3ece5ec173 Update dragdrop.py
should fix #5968 (not extensively tested)
2024-12-02 00:50:22 +01:00
Tom Rothamel 823e235a1c Remove debug raise.
Fixes #5966.
2024-12-01 17:09:27 -05:00
naughty road 2e2020be4a Code cleanup: remove superfluous line 2024-12-01 22:47:04 +01:00
naughty road 6666a285a7 Fix order of attempting to load presplash images
Checks for foreground+background first, before falling back to the single presplash image, instead of the other way around, to match behavior in the documentation (https://www.renpy.org/doc/html/splashscreen_presplash.html#adding-a-progress-bar).
2024-12-01 22:11:45 +01:00
Tom Rothamel 1df2c15b07 Stop movies that may have been restarted when returning to a channel.
Fixes #5960. (Replicated as bug5911.)
2024-12-01 00:20:18 -05:00
Tom Rothamel 4087f8de87 Use the correct variable name. 2024-11-30 22:22:18 -05:00
Tom Rothamel cde2db2ebf Avoid save scanning restarting the interaction.
The strategy chosen was to keep track of which slots have had
information by the rest of Ren'Py, and only restarting if one of
those slots is accessed.

This is motivated by a series of interaction restarts at choice menus,
caused by the autosaves that happen when a choice menu is reached.
2024-11-30 22:22:18 -05:00
Tom Rothamel c1f85b21d5 Remove the ATL "update" event.
This was rarely used, and caused problems, like #5926, with no
actual benefit.

Fixes #5956 by virtue of reverting #5927.
2024-11-30 22:22:18 -05:00
Tom Rothamel 2552c35581 Revert "Update screen.py"
This reverts commit cb10f2a21a.
2024-11-30 22:22:18 -05:00
Tom Rothamel 86294e34f2 Compat #4717.
Fixes #5954.
2024-11-30 22:21:40 -05:00
Tom Rothamel 5c5252a516 Use the correct variable name. 2024-11-30 08:25:11 -05:00
Tom Rothamel 70bb4208bc Avoid save scanning restarting the interaction.
The strategy chosen was to keep track of which slots have had
information by the rest of Ren'Py, and only restarting if one of
those slots is accessed.

This is motivated by a series of interaction restarts at choice menus,
caused by the autosaves that happen when a choice menu is reached.
2024-11-29 21:42:03 -05:00
Tom Rothamel 2e1c09dbbd Remove the ATL "update" event.
This was rarely used, and caused problems, like #5926, with no
actual benefit.

Fixes #5956 by virtue of reverting #5927.
2024-11-29 21:09:41 -05:00
Tom Rothamel fc5f8e0d3e Revert "Update screen.py"
This reverts commit cb10f2a21a.
2024-11-29 20:23:41 -05:00
Tom Rothamel 81198df4c5 Add the arrowkeys property to input.
This controls if the arrow keys apply to the input, or can be
used for focus.

Fixes #5959.
2024-11-29 15:09:45 -05:00
Tom Rothamel 9deaddbbd4 Fix where nvl_hide sets store._window.
So that _window is False before the empty window is shown.
2024-11-29 14:53:23 -05:00
Tom Rothamel 4dbddc88ed Add renpy.get_statement_name.
To make available the statement name.
2024-11-29 14:53:23 -05:00
Tom Rothamel 17e574866b Handle non-keyboard focusable displayables.
Specifically, before doing any sort of keyboard focus, check
that the current focus supports the keyboard, and drop it if
it does.

Per #5936. Keeps the fix for #5173.
2024-11-29 14:51:59 -05:00
Tom Rothamel c59e787262 Compat #4717.
Fixes #5954.
2024-11-29 14:51:59 -05:00
Tom Rothamel 5f77306cba Fix keyboard focus of viewports.
Based on #5936, fixes #5934.
2024-11-29 14:51:41 -05:00
Tom Rothamel 28ae4a7c0c Fix where nvl_hide sets store._window.
So that _window is False before the empty window is shown.
2024-11-29 14:36:51 -05:00
Tom Rothamel ec5738c6e0 Add renpy.get_statement_name.
To make available the statement name.
2024-11-29 14:30:40 -05:00
Tom Rothamel 2da8beecd7 Handle non-keyboard focusable displayables.
Specifically, before doing any sort of keyboard focus, check
that the current focus supports the keyboard, and drop it if
it does.

Per #5936. Keeps the fix for #5173.
2024-11-29 13:07:57 -05:00
Tom Rothamel e0062cbebc Compat #4717.
Fixes #5954.
2024-11-28 22:31:14 -05:00
Tom Rothamel 9b290e07f5 Fix keyboard focus of viewports.
Based on #5936, fixes #5934.
2024-11-28 21:53:27 -05:00
Tom Rothamel c0051f49b3 Merge pull request #5953 from 0x0ade/fix-persistent-clear-doc
docs: Update persistent._clear with current behavior
2024-11-27 08:28:11 -05:00
Jade Macho f64c74ac78 docs: Update persistent._clear with current behavior 2024-11-27 14:19:22 +01:00
Tom Rothamel 5d217f6527 Merge pull request #5901 from the66F95/android-open-editor
Android open editor
2024-11-26 22:46:40 -05:00
Tom Rothamel e63efb05de Merge branch 'master' into android-open-editor 2024-11-26 22:46:33 -05:00
Tom Rothamel 48ef5c89b3 Make quick menu locatioon configurable through a style.
As requested in #5948.

Thought was given to doing something similar with file_slots, but
that would require multiple new styles, and it's generally a bigger
lift when it comes to customization.
2024-11-25 23:01:02 -05:00
Ren'Py Bot 2145516173 Merge branch 'fix' 2024-11-24 22:11:26 -05:00
Tom Rothamel 864feaba02 Indentation fix from #5947. 2024-11-24 11:48:50 -05:00
Tom Rothamel 76b068c6dc Take the CaretBlink change from #5947. 2024-11-24 11:45:22 -05:00
Tom Rothamel ebc6e66433 Add a ZWSP to pad out an empty line.
This fixes the same thing seen in #5947, in a different way.
2024-11-24 11:11:00 -05:00
Ren'Py Bot 9ee1562ff3 Merge branch 'fix' 2024-11-24 04:30:12 -05:00
Tom Rothamel f25dcea3cb Take the remaining fix from #5931.
Fixes #5929.
2024-11-23 22:35:03 -05:00
ヽ◕◡◕✿ノ 78899cfef3 Live2D.blend_opacity wasn't usable 2024-11-23 22:28:51 -05:00
Tom Rothamel 442c4fdc7a Merge pull request #5942 from farzher/master
Live2D.blend_opacity wasn't usable
2024-11-23 22:27:56 -05:00
Tom Rothamel 339c7357dc Update and modernize SpriteManager.
Fixes #5939

* Make SpriteManager pickleable.
* Update the idea of a fast render to take gl2 into account.
2024-11-23 22:15:35 -05:00
Tom Rothamel 4a1182cdd5 Ensure inputs are at least 1px wide.
Fixes #5944 while retaining #5929 and #5913.
2024-11-23 21:41:38 -05:00
Tom Rothamel 9ff3bb67e8 Revert "input mask regression"
This reverts commit 89d5858d2b.
2024-11-23 21:19:45 -05:00
Ren'Py Bot a84543fb99 Merge branch 'fix' 2024-11-23 04:30:13 -05:00
ヽ◕◡◕✿ノ bb3d8254b1 Live2D.blend_opacity wasn't usable 2024-11-23 02:31:36 -05:00
Jan Masek f7a5e874ea Mention screen calling labels in Special Labels 2024-11-22 23:39:29 -05:00
Tom Rothamel 97f05000b5 Merge pull request #5937 from Lezalith/master
Mention screen calling labels in Special Labels
2024-11-22 22:45:55 -05:00
Lezalith e7297b78f8 Merge branch 'renpy:master' into master 2024-11-23 04:23:44 +01:00
Ren'Py Bot 6f2bc54e1b Merge branch 'fix' 2024-11-22 04:30:12 -05:00
Jan Masek 07dc391c59 Mention screen calling labels in Special Labels 2024-11-22 02:54:21 +01:00
HorBro38 ec758301ac Update displaying_images.rst
Corrects errant use of .jxl file type discovered in #5933
2024-11-21 17:56:47 -05:00
Tom Rothamel 83cada0b34 Merge pull request #5935 from HorBro38/Displaying-Images-doc-fix
Update displaying_images.rst
2024-11-21 17:50:05 -05:00
HorBro38 2fe65592db Update displaying_images.rst
Corrects errant use of .jxl file type discovered in #5933
2024-11-21 13:24:00 -05:00
Ren'Py Bot 48bd8358d2 Merge branch 'fix' 2024-11-21 04:30:13 -05:00
the66F95 19122e45c8 Update screen.py
seems to fix #5926 while preserving #5905
2024-11-20 23:10:26 -05:00
the66F95 89d5858d2b input mask regression
should fix #5929 while preserving #5913
2024-11-20 23:10:12 -05:00
Tom Rothamel 75ef4e4f7e Merge pull request #5927 from the66F95/screen-show-update-events
Update screen.py
2024-11-20 21:12:05 -05:00
Tom Rothamel e6e72e3d94 Merge pull request #5930 from the66F95/input-mask-regression
input mask regression
2024-11-20 21:11:38 -05:00
the66F95 d5b1da1052 input mask regression
should fix #5929 while preserving #5913
2024-11-20 23:51:09 +01:00
the66F95 cb10f2a21a Update screen.py
seems to fix #5926 while preserving #5905
2024-11-20 17:35:58 +01:00
Ren'Py Bot 089675bafa Merge branch 'fix' 2024-11-20 04:30:28 -05:00
the66F95 5a65eea075 Update viewport.py
should fix #5921
2024-11-19 22:59:21 -05:00
Edward Nicholes Jr. 4e5dd16606 Fix the ATL part of the tutorial to show the correct example code
In the "Tutorial" > "Transforms and Animation", there is a section that demonstrated that `repeat` can take an integer argument.

However, the `alt_image1` example code is shown twice on lines 543 and 548 for two different examples.

Line 548, should be changed to show the `alt_image2` example code which removed the `repeat 2` line from the previous example, showing that the animation will only happen once.
2024-11-19 22:59:12 -05:00
Tom Rothamel f746a61a1c Merge pull request #5922 from the66F95/viewport-focus
Update viewport.py
2024-11-19 22:49:40 -05:00
Tom Rothamel 28a35bfcea Merge pull request #5925 from GameDevFox/patch-1
Fix the ATL part of the tutorial to show the correct example code
2024-11-19 22:41:37 -05:00
Tom Rothamel dd61e71beb Ensure the cache is maintained under lock.
And also check that cache entry is in the cache when it's killed.

Fixes #5923.
2024-11-19 22:25:23 -05:00
Edward Nicholes Jr. 74b4674439 Fix the ATL part of the tutorial to show the correct example code
In the "Tutorial" > "Transforms and Animation", there is a section that demonstrated that `repeat` can take an integer argument.

However, the `alt_image1` example code is shown twice on lines 543 and 548 for two different examples.

Line 548, should be changed to show the `alt_image2` example code which removed the `repeat 2` line from the previous example, showing that the animation will only happen once.
2024-11-19 16:51:40 -06:00
Ren'Py Bot 1a8dbd84fb Merge branch 'fix' 2024-11-19 04:30:28 -05:00
the66F95 358502391f Update viewport.py
should fix #5921
2024-11-19 09:02:02 +01:00
Tom Rothamel c3246406c2 Add config.translate_additional_strings_callbacks.
This is a list of callbacks that return strings that will be
offered up for translation.

Fixes #5849.
2024-11-18 22:53:36 -05:00
naughty road 70f30147df fix link to pyjnius docs
Seems the original URL refering to "stable" doesn't exist anymore, this updates it to direct to "latest" instead.
2024-11-18 22:41:47 -05:00
Tom Rothamel bdd07c41ee Merge pull request #5919 from NaughtyRoad/fix-pyjnius-link-in-sphinx
fix link to pyjnius docs
2024-11-18 17:19:35 -05:00
naughty road 55bc71c810 fix link to pyjnius docs
Seems the original URL refering to "stable" doesn't exist anymore, this updates it to direct to "latest" instead.
2024-11-18 23:05:56 +01:00
Tom Rothamel 423e54de9f Add the ___ function.
This translates text, then applies text interpolation.
2024-11-17 20:44:44 -05:00
Tom Rothamel b097fcf3de Merge branch 'fix' 2024-11-16 21:35:25 -05:00
Tom Rothamel fa84f0c61e doc: Changelog wording fix. 2024-11-16 03:06:09 -05:00
Tom Rothamel 74339b0432 Bump the fix version. 2024-11-16 01:59:03 -05:00
Tom Rothamel f6f4b3bce3 Empty masked inputs no longer show a single mask glyph.
Fixes #5913.
2024-11-15 20:34:32 -05:00
Tom Rothamel 5dbd50159a doc: Correct the notify screen. 2024-11-15 00:11:26 -05:00
Tom Rothamel 1e85fd051a doc: Sponsors. 2024-11-14 23:16:13 -05:00
Ren'Py Bot 88185556c6 Merge branch 'fix' 2024-11-14 04:30:28 -05:00
Tom Rothamel dc65afd6f1 Duplicate the children of Movie.
Fixes #5907.
2024-11-13 22:55:57 -05:00
Ren'Py Bot 4cf058d823 Merge branch 'fix' 2024-11-13 04:30:28 -05:00
Tom Rothamel e3222ec11d Store the old_max_default even if it's not used.
Fixes #5903.
2024-11-12 22:30:57 -05:00
Tom Rothamel 37c78dccda config.nvl_adv_transition no longer forces the dialogue window to be hidden.
Fixes #5904.
2024-11-12 22:11:46 -05:00
Tom Rothamel 1a7f0ca8c3 Screens go from SHOW to UPDATE upon first update.
Fixes #5905.

The underlying issue was caused by the screen being run for a
second time in SHOW mode, which in turn prevented scopes of used
screens from being saved.
2024-11-12 21:55:58 -05:00
Tom Rothamel 098b29a15c Merge branch 'fix' 2024-11-11 23:39:23 -05:00
the66F95 0ea39d7637 open editor on Android
the Python part to open/select an editor to open the traceback file on Android devices.
2024-11-11 15:54:38 +01:00
the66F95 173e4ebef4 Revert "open editor on Android"
This reverts commit f2badd8cc9.
2024-11-11 15:49:06 +01:00
the66F95 f2badd8cc9 open editor on Android
the Python part to open/select an editor to open the traceback file on Android devices, works with 651c31a0bd3a6e6dbe67ede889106562d12e68b5
2024-11-11 15:46:10 +01:00
Tom Rothamel be8831b4b2 doc: Changelog and credits. 2024-11-11 00:50:46 -05:00
Tom Rothamel fc87c053c3 Do not focus a displayable that's been transformed to nothing.
Fixes #5869.
2024-11-11 00:41:32 -05:00
Tom Rothamel 10cc039460 Merge pull request #5900 from Kassy2048/fix
Do not offer to open "traceback.txt" on mobile
2024-11-10 23:48:00 -05:00
Tom Rothamel fd027dbdbd Duplicate an AlphaMask's mask. 2024-11-10 23:47:28 -05:00
Kassy 15eb9a9c13 Do not offer to open "traceback.txt" on mobile
renpy.launch_editor() is not supported on mobile (or Web) so clicking on
the button does nothing.
2024-11-11 05:31:11 +01:00
woolion 2ded06bc5d steam: fix get_session_ticket 2024-11-10 13:56:08 -05:00
Tom Rothamel 06f6c73e41 Merge pull request #5899 from Le09/master-getsessionticket
steam: fix get_session_ticket
2024-11-10 13:54:55 -05:00
woolion bebf063872 steam: fix get_session_ticket 2024-11-10 19:36:15 +01:00
Andrej Klychin 8c759f7760 Merge pull request #5895 from Ayowel/doc/pydeps
doc: fix python dependencies list for copy/paste
2024-11-10 18:34:20 +02:00
Ayowel 7fd921b1a0 doc: fix python dependencies list for copy/paste 2024-11-10 16:50:08 +01:00
Dipesh Aggarwal 54fb00100e Fix the wrong keymap for accessibility 2024-11-09 22:38:23 -05:00
Dipesh Aggarwal b87b105387 Replace balloon with 'bubble` to represent a valid type for callbacks 2024-11-09 22:38:23 -05:00
Tom Rothamel bf142b2ba8 doc: Changelog whitespace changes. 2024-11-09 22:38:18 -05:00
Tom Rothamel 13285fe264 doc: Changelog. 2024-11-09 22:37:48 -05:00
Tom Rothamel a9159c5f71 Only skip the BOM, not other characters. 2024-11-09 22:37:27 -05:00
Tom Rothamel c5cdd0038e Merge pull request #5891 from DipeshAggarwal/patch-2
Fix the wrong keymap for accessibility
2024-11-08 21:18:51 -05:00
Tom Rothamel 8bac98c29a Merge pull request #5892 from DipeshAggarwal/patch-3
Replace `balloon` with 'bubble` to represent a valid type for callbacks
2024-11-08 21:18:37 -05:00
Dipesh Aggarwal 421d8cc37d Replace balloon with 'bubble` to represent a valid type for callbacks 2024-11-09 07:08:01 +05:30
Dipesh Aggarwal c097434036 Fix the wrong keymap for accessibility 2024-11-09 06:59:12 +05:30
Dipesh Aggarwal e3cc4be1b8 Fix UnboundLocalError: local variable 'keyboard_mode' referenced before assignment
(cherry picked from commit 15f498516a)
2024-11-09 03:31:10 +04:00
Andrej Klychin 2137eab4cb Merge pull request #5890 from DipeshAggarwal/patch-1
Fix UnboundLocalError: local variable 'keyboard_mode' referenced befo…
2024-11-09 01:21:29 +02:00
Dipesh Aggarwal 15f498516a Fix UnboundLocalError: local variable 'keyboard_mode' referenced before assignment 2024-11-09 01:20:03 +05:30
Tom Rothamel b5711f7e11 doc: Changelog whitespace changes. 2024-11-08 01:07:11 -05:00
Tom Rothamel 8f2649e3a7 doc: Changelog. 2024-11-07 22:29:47 -05:00
Tom Rothamel ab42c0f6e1 Only skip the BOM, not other characters. 2024-11-07 22:02:23 -05:00
Tom Rothamel 01eacd2932 Avoid forcing synchro_start when playing a movie.
Fixes #5887.

This may cause mask_channel to get a bit more out of sync, but it's
already so-so, and side_mask is the superior alternative.
2024-11-07 21:55:08 -05:00
Tom Rothamel c25f22fe4f doc: Credits. 2024-11-07 21:54:55 -05:00
Tom Rothamel e1ca5b3d8a Avoid forcing synchro_start when playing a movie.
Fixes #5887.

This may cause mask_channel to get a bit more out of sync, but it's
already so-so, and side_mask is the superior alternative.
2024-11-07 01:26:32 -05:00
Tom Rothamel 03b6addae0 doc: Credits. 2024-11-07 01:03:49 -05:00
Tom Rothamel bc31530843 doc: Credits. 2024-11-06 20:37:35 -05:00
Tom Rothamel ad49dcae3c Merge branch 'fix' 2024-11-05 01:55:32 -05:00
Tom Rothamel fe3b800cab Change Model to create meshes as documented.
Fixes #5692.
2024-11-05 00:36:12 -05:00
Tom Rothamel ccde74bdb8 doc: Fix config.skip_sounds.
Fixes #5883.
2024-11-04 08:47:28 -05:00
Ren'Py Bot 1817191f8f Merge branch 'fix' 2024-11-04 04:30:28 -05:00
Tom Rothamel ab6f469811 textshader: Consider all glyphs when assigning coordinates.
Fixes #5884.
2024-11-03 23:22:46 -05:00
Tom Rothamel f92b70d38c Protect against errors with disconnected audio sources.
Fixes #5882, with low confidence.
2024-11-03 21:14:34 -05:00
Andy_kl e89338342a Skip BOM in ren_py_to_rpy so RENPY can start at first line. 2024-11-04 02:29:14 +04:00
Ren'Py Bot 60db4ee41a Merge branch 'fix' 2024-11-03 04:30:28 -05:00
Tom Rothamel 62ca262aec Fix tyop. 2024-11-02 15:49:52 -04:00
Tom Rothamel eb5a84d420 Remove unnecessary locking in im.Cache.
This is the most likely cause of the performance issues in #5295.
Now, the lock should be held for brief periods of time.
2024-11-02 15:48:08 -04:00
Tom Rothamel 3280bcc5ff Clarify where gui.unscrollable works.
Fixes #5218.
2024-11-02 15:06:05 -04:00
Ren'Py Bot 2155bb02ae Merge branch 'fix' 2024-11-02 04:30:28 -04:00
Tom Rothamel 5c5f72659c Restore old behavior of screenshot.
When render_tree is None, screenshot takes the old contents of
the framebuffer. Which isn't great, but since it happens when
at the main menu, isn't a huge deal.

Fixes #5879.
2024-11-01 22:47:15 -04:00
Tom Rothamel bc6e2a63d0 Only set the tag if it's not explicitly set. 2024-10-31 22:07:10 -04:00
Ren'Py Bot 204ca35321 Merge branch 'fix' 2024-10-31 04:30:28 -04:00
Tom Rothamel b9789ae25c Fix icon font in the director.
Fixes #5876.
2024-10-31 01:29:21 -04:00
Tom Rothamel 899307d791 Make show expression similar to show.
In the most common string case, it will now use the tag from
the string, rather than the expression.

Per #5877.
2024-10-31 01:16:33 -04:00
Tom Rothamel 0bf4ab51d6 Make show expression use a unique tag.
This prevents tags from conflicting by mistake. Discussed at #5877.
2024-10-30 22:52:37 -04:00
Tom Rothamel 88d3870d5c Merge branch 'fix' 2024-10-30 22:31:14 -04:00
Tom Rothamel db7d998c38 doc: Sponsors. 2024-10-30 22:31:07 -04:00
Tom Rothamel 58e56cff88 Quote attributes in the image attributes screen.
Per #5877.
2024-10-30 22:30:28 -04:00
Ren'Py Bot b1623451e8 Merge branch 'fix' 2024-10-30 04:30:30 -04:00
Tom Rothamel 4b532ac11e Produce a sensible error when monologue mode is used in a menu.
Fixes #5872.
2024-10-29 21:40:41 -04:00
Tom Rothamel a7f16eee3f Remove the "always" steam deck keyboard mode. 2024-10-29 21:13:53 -04:00
Tom Rothamel af7314a8a1 Merge pull request #5875 from AbdulGoodLooks/patch-5
Fix typo in changelog.rst
2024-10-29 18:04:56 -04:00
Abdul a8567d0811 Fix typo in changelog.rst 2024-10-29 20:59:27 +00:00
Tom Rothamel 74a6660ae1 Merge branch 'fix' 2024-10-28 01:30:51 -04:00
Tom Rothamel fff2558083 Revert "Fix an issue that could stop audio rollback from working."
This reverts commit 14ced3377a.
2024-10-28 01:03:30 -04:00
Tom Rothamel 944b7d0e9c Copy the music dictionary when it changes.
Fixes #5868 while continuing to fix #5802.
2024-10-28 00:51:38 -04:00
Tom Rothamel 797e37678a Revert "Fix an issue that could stop audio rollback from working."
This reverts commit 14ced3377a.
2024-10-28 00:30:33 -04:00
Tom Rothamel c4528cf6ad Improve selection of what Python versions to include.
Fixes #5866.
2024-10-27 19:09:07 -04:00
Ren'Py Bot 1417e58963 Merge branch 'fix' 2024-10-27 04:30:30 -04:00
Tom Rothamel 7022001dbe Keep high-rate drawing for 12 frames (.2s).
This ensures that a static image is pushed through any sort of
compositor that requires constant flipping.

Fixes #5867.
2024-10-27 01:38:58 -04:00
Tom Rothamel 0ab9444676 hbfont: Underlines and strikethroughs should not include glyph.x_offset.
Fixes #5861.
2024-10-26 19:19:17 -04:00
Ren'Py Bot 65440785e5 Merge branch 'fix' 2024-10-25 01:11:50 -04:00
Tom Rothamel 0795565e07 Quit out of pygame.display when the presplash ends.
This resets the IME system, which is needed to fix #5801.
2024-10-25 00:51:30 -04:00
Tom Rothamel 3cf31edae2 doc: Fix mistake.
Fixes #5863.
2024-10-24 21:45:59 -04:00
Craig de Stigter 8b356090d9 Fix an obvious undefined variable error 2024-10-24 21:28:40 -04:00
Tom Rothamel c8a2c7036f Merge pull request #5864 from craigds/fix-obvious-undefined-error
Fix an obvious undefined variable error
2024-10-24 20:58:52 -04:00
Craig de Stigter c512985741 Fix an obvious undefined variable error 2024-10-25 11:57:58 +13:00
Ren'Py Bot a2d6911b4e Merge branch 'fix' 2024-10-24 04:30:30 -04:00
Tom Rothamel 9f3be6e604 Only synchro start movie channels when explicitly requested.
Per #5914.
2024-10-23 21:28:48 -04:00
Ren'Py Bot d59029d66c Merge branch 'fix' 2024-10-23 04:30:30 -04:00
Tom Rothamel 0e6522f867 Use a different approach to #5854.
The focus system may not always use the same displayable, so .focus
is a good idea. Instead, change the prefix each time it's asked for.
2024-10-23 01:50:46 -04:00
Tom Rothamel 3cbe6fa1d8 Avoid re-focusing a displayable that has replaced another.
Fixes #5854.
2024-10-22 23:42:02 -04:00
Ren'Py Bot a9ecae1a59 Merge branch 'fix' 2024-10-22 04:30:30 -04:00
Ayowel bb5588f182 Do not needlessly track files in late_base_patterns 2024-10-21 23:38:34 -04:00
Ayowel 45a6a08559 Only ignore .rpe files if they are not explicitly tracked 2024-10-21 23:38:23 -04:00
Tom Rothamel 3bf1b78250 Merge pull request #5855 from Ayowel/patch-1
Only ignore .rpe files if they are not explicitly tracked
2024-10-21 22:26:19 -04:00
Ayowel 2eda0dc2e9 Do not needlessly track files in late_base_patterns 2024-10-21 22:10:39 +02:00
Ayowel 7084ee4b46 Only ignore .rpe files if they are not explicitly tracked 2024-10-21 20:44:56 +02:00
Ren'Py Bot 93d760c9fa Merge branch 'fix' 2024-10-21 04:30:30 -04:00
Tom Rothamel e1cb42f253 gl2: Round coordinates during pixel_perfect.
Rounding errors could cause problems when performing the pixel
perfect correction, and the rounding errors could be different
in normal rendering and render-to-texture.

By rounding first, we eliminate these problems.

Fixes #5844.
2024-10-21 00:53:08 -04:00
Tom Rothamel dde19b8716 gl2: Fix gl_anisotropic
Which used the incorrect field.

Fixes #5851.
2024-10-20 21:57:18 -04:00
Ren'Py Bot 01f74075b8 Merge branch 'fix' 2024-10-20 04:30:30 -04:00
Tom Rothamel 906788fe88 video: Avoid stopping movies if both current and old have _play.
To make Ren'Py cooperate better with games that run the movies
themselves.

Per #5814.
2024-10-19 16:35:26 -04:00
Tom Rothamel 69b019f03c Use last_channel_movie to stop movies, since it exists. 2024-10-19 16:30:11 -04:00
Ren'Py Bot 51f523b3c3 Merge branch 'fix' 2024-10-19 04:30:30 -04:00
Tom Rothamel 9de1c93ef9 Document that transforms shouldn't be applied to a Drag directly.
Per #5847.
2024-10-19 01:19:06 -04:00
Tom Rothamel faf1e15710 Document that renpy.emscripten is the emscripten module.
Closes #5848.
2024-10-19 00:34:50 -04:00
Ren'Py Bot ef4c0bd1d9 Merge branch 'fix' 2024-10-18 04:30:30 -04:00
Tom Rothamel 339300d2a0 Report non-dynamic images that reference non-existent images.
Fixes #5771.
2024-10-18 01:35:40 -04:00
Tom Rothamel 51f6b0d756 Add referrer support to installer.download. 2024-10-18 01:35:40 -04:00
Tom Rothamel c4f478160b Add referrer support to installer.download. 2024-10-17 23:21:01 -04:00
Tom Rothamel f547ea3ed1 Restart looping movies during rollback.
Fixes #5564.
2024-10-17 22:31:30 -04:00
Tom Rothamel 054535f0c8 Restart looping movies during rollback.
Fixes #5564.
2024-10-16 23:19:10 -04:00
Ren'Py Bot 8911825d46 Merge branch 'fix' 2024-10-15 04:30:30 -04:00
Tom Rothamel 16b9c2be67 Use insets when evaluating keyboard focus conditions.
Fixes #5831.
2024-10-15 01:05:44 -04:00
Ren'Py Bot ddc3f67539 Merge branch 'fix' 2024-10-14 04:30:30 -04:00
Tom Rothamel 4a591d552b Fix a rounding issue that stopped bar_invert from working.
Fixes #5843.
2024-10-14 00:43:15 -04:00
Tom Rothamel 99915a3ed3 Merge pull request #5772 from the66F95/replays-seen-events
no seen labels, images, audio in replays
2024-10-13 19:54:07 -04:00
Tom Rothamel 576a1138d3 Changelog last. 2024-10-13 19:35:41 -04:00
avonder 50ef339f16 android: Install-time asset pack support. (#5837)
Enable reading from APK-based asset packs
2024-10-13 19:32:49 -04:00
avonder 21774019a7 android: Install-time asset pack support. (#5837)
Enable reading from APK-based asset packs
2024-10-13 19:32:10 -04:00
Ren'Py Bot 33fbe01388 Merge branch 'fix' 2024-10-13 04:30:30 -04:00
Tom Rothamel 0385bbcb9b Re-render displayables after box_wrap.
After wrap, a displayable may be offered a different size, and
so the render needs to happen again.
2024-10-12 23:52:07 -04:00
Tom Rothamel 82dd5968e3 Merge pull request #5838 from racinmat/readme-update
docs: restrict the cython version and add setuptools
2024-10-12 10:06:15 -04:00
Matěj Račinský 43c6f83aff docs: restrict the cython version and add setuptools 2024-10-12 14:25:29 +02:00
Tom Rothamel e6fc6e3c26 Scale image fonts using nearest neighbor.
When config.nearest_neighbor is True.

Fixes #5830.
2024-10-11 21:53:13 -04:00
the66F95 7fe14c09c9 Update persistentexports.py 2024-10-11 09:12:39 +02:00
the66F95 588824cf3f Update config.py 2024-10-11 09:11:58 +02:00
Tom Rothamel ddf7b35160 Merge pull request #5687 from onitake/patch/ffmpeg-7
Replace deprecated APIs when compiling against newer FFmpeg
2024-10-10 23:15:05 -04:00
Tom Rothamel d85879b1fd Script to find recursive inner functions. 2024-10-08 22:53:24 -04:00
Tom Rothamel adfbb4970b Remove recursive inner functions in transform and lexer. 2024-10-08 09:43:19 -04:00
Ren'Py Bot bbf2cff58f Merge branch 'fix' 2024-10-08 04:30:30 -04:00
Tom Rothamel a1a0b78cb4 Remove recursive inner functions.
Per #5832.
2024-10-08 01:29:56 -04:00
Tom Rothamel 4cd14e18b5 Factor out check_spline_types.
Recursive inner functions create reference loops that need to be
GC-ed, so eliminating such can reduce GC pauses.

Per #5832.
2024-10-07 22:52:08 -04:00
Tom Rothamel 20a5d6cd69 Factor out check_spline_types.
Recursive inner functions create reference loops that need to be
GC-ed, so eliminating such can reduce GC pauses.

Per #5832.
2024-10-07 22:33:42 -04:00
Ren'Py Bot e70011862a Merge branch 'fix' 2024-10-07 04:30:27 -04:00
Tom Rothamel 34a1f57e50 Make all default_focus activations explicit.
So the hovered handler runs.

Fixes #5794.
2024-10-07 02:06:43 -04:00
Tom Rothamel 5245fbb38e Consider controller events inputs before being mapped.
Fixes #5780.
2024-10-06 23:16:54 -04:00
Ren'Py Bot 916c6cc9e9 Merge branch 'fix' 2024-10-06 04:30:30 -04:00
Tom Rothamel 937c91f314 Proactively remove ongoing transitions.
Fixes #5827.
2024-10-06 01:39:47 -04:00
Ren'Py Bot f1e2d074c6 Merge branch 'fix' 2024-10-05 04:30:30 -04:00
Tom Rothamel 6e83ae9bd1 Display if transform are applied to a layer.
Fixes #5822.
2024-10-05 01:01:43 -04:00
Tom Rothamel d3506085c8 Add an internal api to determine if transforms are applied to a layer. 2024-10-05 00:59:40 -04:00
Tom Rothamel d90f1cdc30 Another fix to grabs and viewports. 2024-10-04 21:48:41 -04:00
Ren'Py Bot 02d7a3305a Merge branch 'fix' 2024-10-04 04:30:30 -04:00
Tom Rothamel 8c82667ae1 Disable pixel-perfect for Frame.
It only would work in corners, and wasn't working on the other sections
except at 1:1. So disable it.

Fixes #5793.
2024-10-04 00:28:32 -04:00
Tom Rothamel 3085c15caf Add a method in render.pyx to find GL properties. 2024-10-03 23:37:14 -04:00
Tom Rothamel 2e37df7103 Prevent crash when Live2D.used_nonexclusive is None.
Fixes #5816.
2024-10-03 21:46:32 -04:00
Tom Rothamel 9a75b6628b Another fix to viewport dragging.
Per #5776.

Co-Authored-by: the66F95 <54831834+the66F95@users.noreply.github.com>
2024-10-03 21:37:34 -04:00
Ren'Py Bot cd590d78eb Merge branch 'fix' 2024-10-03 04:30:30 -04:00
Tom Rothamel 405d8d4399 Allow drag to begin inside a button.
Fixes #5776, comment 2383488254.
2024-10-03 00:51:19 -04:00
Ren'Py Bot 0ed2c16ee9 Merge branch 'fix' 2024-10-02 04:30:30 -04:00
Mark 56dda5590b doc: Fix code block in cds.rst 2024-10-01 22:48:48 -04:00
Tom Rothamel fc429eb984 Merge pull request #5748 from remarkablemark/patch-1
doc: Fix code block in cds.rst
2024-10-01 22:46:57 -04:00
Tom Rothamel 623c5f6d1f Merge pull request #5811 from sunrisesarsaparilla/master
remove unused code
2024-10-01 22:33:33 -04:00
Ren'Py Bot b430ca2243 Merge branch 'fix' 2024-09-30 04:30:30 -04:00
Tom Rothamel 86046383a8 Improve how draggable viewports and drags interact.
After these changes, the innermost draggable should take precedence,
rather than what's focused.

Fixes #5776.
2024-09-29 22:16:42 -04:00
Ren'Py Bot 8e21bcbc00 Merge branch 'fix' 2024-09-29 04:30:30 -04:00
Tom Rothamel f907fe119a Changes to audio filters take place immediately after reload.
Fixes #5802.
2024-09-29 02:01:52 -04:00
Tom Rothamel 14ced3377a Fix an issue that could stop audio rollback from working.
The failure would take place in the case where a channel is changed
between roll-forward and and an interaction, but the sound playing
would not change (ie. a queue operation).
2024-09-29 01:47:28 -04:00
Tom Rothamel ad690d8a16 audiofilter: Make the time the filter changes well defined. 2024-09-28 23:47:12 -04:00
Tom Rothamel 31ff6d3e95 py311: Remove now-obsolete AST properties. 2024-09-28 01:36:39 -04:00
Tom Rothamel 6aadfe4d15 py311: Improve analysis of the match statement.
This doesn't bother to try to analyze it, but it will mark the
correct variables as non-constant.
2024-09-28 01:29:38 -04:00
Tom Rothamel 435fec2be6 py311: Wrap the match statement. 2024-09-27 23:53:47 -04:00
Tom Rothamel 6b507d5a57 Merge branch 'fix' 2024-09-27 18:22:25 -04:00
Tom Rothamel 1c830a0be1 Audited #5797 2024-09-27 18:21:28 -04:00
sunrisesarsaparilla 25b0068b1d remove duplicate code line 2024-09-27 01:37:17 -07:00
Ren'Py Bot b1a3171a40 Merge branch 'fix' 2024-09-26 04:30:30 -04:00
sunrisesarsaparilla 30af1dfb70 remove unused code 2024-09-25 22:50:32 -07:00
Tom Rothamel ee89717b47 linvol: Remove compatibility.
This was compat code that has served it's purpose - players can still
adjust the volumes as required.

Fixes #5806.
2024-09-26 01:09:13 -04:00
Tom Rothamel 6cfef151da Write <package>.update.json in a temporary directory, only copy if needed.
Fixes #5798.
2024-09-25 20:18:42 -04:00
Tom Rothamel fca89d813e Merge pull request #5809 from sunrisesarsaparilla/fix-parallel-build-bug-that-adds-one-second
fix bug that adds 1 second to each successive parallel build
2024-09-25 09:53:40 -04:00
sunrisesarsaparilla 9050a9d5a5 fix bug that adds 1 second to each successive parallel build 2024-09-25 06:26:53 -07:00
Tom Rothamel d257b9dc70 doc: #5756. 2024-09-25 00:51:26 -04:00
Tom Rothamel 89c79e55fe Merge pull request #5756 from sunrisesarsaparilla/customize-renpy-launcher-file-shorcuts
allow 'Open Directory' and 'Edit File' customization on renpy launch screen #2467
2024-09-24 21:17:49 -04:00
Gouvernathor d7f194072e fix unbound exception 2024-09-25 01:40:55 +02:00
Tom Rothamel 60ca4cd5ae py3: Always use the Python 3 compilation path. 2024-09-23 23:10:17 -04:00
Gouvernathor 20c1f572d7 Revert use of unpicklable MappingProxyType and wrong import order
fixes #5797
2024-09-20 20:25:50 +02:00
Tom Rothamel a73e20288c Merge pull request #5783 from renpy/py3-signature
Modernize the parameters module
2024-09-19 20:22:21 -04:00
Ren'Py Bot 16fe7290fa Merge branch 'fix' 2024-09-19 04:30:30 -04:00
Tom Rothamel 8d2a6d2596 Allow textshaders to work with glyphs at negative offsets.
Fixes #5787.
2024-09-19 00:20:57 -04:00
Tom Rothamel f225453ff1 Only store transform events on Displayables that use or produce them.
This prevents an issue from occurring when a non-duplicatable
displayable is the child of multiple other displayables, which
could set transform_event multiple times.

As it doesn't respond to the event, and doesn't produce it, there's
no reason for the event to be stored. So we don't.

Fixes #5788
2024-09-18 22:27:12 -04:00
Ren'Py Bot ff04b3ea56 Merge branch 'fix' 2024-09-18 04:30:30 -04:00
Tom Rothamel 209eb580cf web: Prevent access to files and directories starting with "." 2024-09-17 21:24:01 -04:00
Tom Rothamel 3103cff7f7 Restore RENPY_NO_STEAM support. 2024-09-17 20:34:10 -04:00
Ren'Py Bot 903e971395 Merge branch 'fix' 2024-09-17 04:30:30 -04:00
brimbel 138884b545 Fix example of shader text tag
jitter text shader does not have a speed uniform
2024-09-17 00:46:19 -04:00
Tom Rothamel 45e942de05 Merge pull request #5790 from brimbel/patch-1
doc: Fix example of shader text tag
2024-09-17 00:40:04 -04:00
brimbel 24a699ba12 Fix example of shader text tag
jitter text shader does not have a speed uniform
2024-09-16 15:50:07 -07:00
Ren'Py Bot f5ed3d7947 Merge branch 'fix' 2024-09-16 04:30:30 -04:00
Tom Rothamel 1489a4e748 text: Add pseudo-glyphs to the start and end of outlined lines.
These are shown to ensure that all of the outlines are shown, even
if there is no character in that space.

Fixes #5778.
2024-09-16 01:48:00 -04:00
Tom Rothamel 1a7fb9c008 text: Ensure that there is no space between textshader glyphs. 2024-09-15 21:50:26 -04:00
Ren'Py Bot c761ba4c75 Merge branch 'fix' 2024-09-15 04:30:30 -04:00
Tom Rothamel 79fbc7718e Avoid distributing renpy.gl. 2024-09-14 16:02:35 -04:00
Tom Rothamel 7d4f7d17f9 Doc: Requirements changes. 2024-09-14 16:00:24 -04:00
Tom Rothamel 439bcf73f3 Do not include armv7l builds. 2024-09-14 15:52:01 -04:00
Tom Rothamel 6506a3a45e Fix an issue with with sdist, versions, and pygame_sdl2. 2024-09-14 13:15:06 -04:00
Gouvernathor dc81a5edeb Simplify defaulted fields 2024-09-14 18:08:39 +02:00
Gouvernathor 331a4f0211 Add from clauses to raises 2024-09-14 16:39:36 +02:00
Gouvernathor 69f1a2bb0b Optimize empty arguments parsing 2024-09-14 16:33:42 +02:00
Gouvernathor cd90dfa789 Clamp down ArgumentInfo fields
the mutable arguments are not converted, but this is better
2024-09-14 16:32:47 +02:00
Gouvernathor d20d9f2aa7 Use emptymap 2024-09-14 16:30:35 +02:00
Gouvernathor fb1d40db3c Use naturally ordered dict
mappingproxy requires an additional pickling handle which would introduce yet another switch
2024-09-14 16:29:23 +02:00
Gouvernathor 4f835f1250 Change Parameter's parameter rules 2024-09-14 16:27:14 +02:00
Tom Rothamel 0843e46e91 Fix an issue with with sdist, versions, and pygame_sdl2. 2024-09-14 00:19:09 -04:00
Tom Rothamel a0963c18ee Call install_headers.py. 2024-09-13 22:22:51 -04:00
Ren'Py Bot f0dfe18bbf Merge branch 'fix' 2024-09-12 04:30:30 -04:00
Tom Rothamel 9c6cc41ec3 doc: Windows 10 required. 2024-09-12 01:27:55 -04:00
Tom Rothamel 41e13911e3 It's no longer requires to install_headers for pygame_sdl2. 2024-09-12 01:12:15 -04:00
Tom Rothamel 35f6794db2 Remove old find_module method.
As it's not needed in recent Pythons.
2024-09-12 00:47:58 -04:00
Tom Rothamel 699c2a1679 Fix deprecation warning. 2024-09-12 00:46:58 -04:00
Tom Rothamel cad9dc37c2 Merge pull request #5686 from onitake/patch/absolute-launcher-imports
Support find_spec in custom module loader
2024-09-12 00:45:51 -04:00
Tom Rothamel deb959a1e7 Change some of the build process to support Python 3.12. 2024-09-12 00:44:29 -04:00
levicratic 3913ca9c0c Fix size tag preventing outer tags from closing 2024-09-11 21:36:45 -04:00
Tom Rothamel 93c4c4e8df Merge pull request #5775 from levicratic/remove-second-push-from-size-segment
Fix size tag preventing outer tags from closing
2024-09-11 21:32:40 -04:00
Ren'Py Bot c634ff91d2 Merge branch 'fix' 2024-09-10 04:30:30 -04:00
Tom Rothamel 4e03602bd6 Bump versions. 2024-09-10 00:43:15 -04:00
levicratic 5b0f4cf5a7 Fix size tag preventing outer tags from closing 2024-09-09 13:51:27 -04:00
Ren'Py Bot ddd0896840 Merge branch 'fix' 2024-09-09 04:30:30 -04:00
the66F95 a175edde26 no seen labels, images, audio in replays
i don't think labels, images and audio files should be marked as seen in replays. basically all other variables are local to that context.
for instance developer would be able now to temporarily unlock content of a replay gallery for higher tier patrons without actually changing the seen status of a label.
to preserve the old behavior one can set the new config var to True.
2024-09-09 10:21:21 +02:00
Tom Rothamel a2e08864c4 doc: Changelog. 2024-09-09 01:09:54 -04:00
Tom Rothamel 14563943ed Do not include keys in build. 2024-09-09 00:48:57 -04:00
Tom Rothamel 4ebedb6a20 py2: Remove PY2 conditions from launcher. 2024-09-08 19:50:31 -04:00
Tom Rothamel d3c827fc55 py2: Remove support for PY2 in the compat module.
The compat module still needs to exist to keep support for older
games and saves, but a lot of it went away.
2024-09-08 19:40:13 -04:00
Tom Rothamel fc9744192d py2: Remove things conditioned on PY2. 2024-09-08 19:23:25 -04:00
Tom Rothamel 72602ab6ab py2: Remove py2analysis.
As part of the process of dropping support for Python 2.
2024-09-08 17:07:15 -04:00
Ren'Py Bot b78f1d1b41 Merge branch 'fix' 2024-09-08 04:30:30 -04:00
Tom Rothamel 5e91783620 Bump fix version. 2024-09-08 00:04:52 -04:00
Ren'Py Bot e8bbfde5b1 Merge branch 'fix' 2024-09-07 04:30:30 -04:00
Tom Rothamel cde01cf27b Do not allow image keywords to occur in image simple expressions. 2024-09-06 22:12:11 -04:00
Ren'Py Bot 79bda8a568 Merge branch 'fix' 2024-09-06 04:30:30 -04:00
Tom Rothamel 1fefbeba52 Remove checks for config.gl2. 2024-09-06 00:40:09 -04:00
Tom Rothamel 1336b5cfb8 Remove the gl, gles, and angle renderers. 2024-09-06 00:34:14 -04:00
the66F95 6d0b674c30 Update render.pyx
still debug output present.
2024-09-05 13:20:30 -04:00
Tom Rothamel 935a25490a Merge pull request #5766 from the66F95/render.pyx-debug
Update render.pyx
2024-09-05 13:18:04 -04:00
the66F95 5f73d6f1b2 Update render.pyx
still debug output present.
2024-09-05 19:09:43 +02:00
Tom Rothamel e42c774cd4 doc: Fix changelog. 2024-09-05 09:03:21 -04:00
Ren'Py Bot 595e4d45bd Merge branch 'fix' 2024-09-05 04:30:30 -04:00
Tom Rothamel b46eabc2af Update changelog. 2024-09-04 21:43:43 -04:00
Ren'Py Bot c42667b197 Merge branch 'fix' 2024-09-04 04:30:30 -04:00
Tom Rothamel 2c6e08247f Fix invoking local shaders in shader tags.
Fixes #5765.
2024-09-04 00:45:50 -04:00
Tom Rothamel 32ab62f5dd Improve the audio init error message.
Per #5763.
2024-09-03 23:38:19 -04:00
Tom Rothamel 003ac717d8 Improve AudioData.
* Allow it to take <...> properties.
* Document that it works with video as well.
2024-09-03 23:23:33 -04:00
Tom Rothamel e4089d2dce text: Adjust large textshader text for texture borders. 2024-09-03 22:16:18 -04:00
Tom Rothamel 4076bc8ae9 gl2: Store the borders that were used to create a texture mesh. 2024-09-03 22:16:07 -04:00
Ren'Py Bot 00750cb5d5 Merge branch 'fix' 2024-09-03 04:30:30 -04:00
Tom Rothamel 13831d4c39 text: Fixes > 4k textshaders. 2024-09-03 00:45:03 -04:00
Tom Rothamel 33552beb80 text: Close-to-working support for text textures above 4k. 2024-09-02 23:37:18 -04:00
Tom Rothamel 0da702db49 Add a function to offset textures in a mesh. 2024-09-02 22:10:51 -04:00
Tom Rothamel 9d8329c766 Add renpy.stop_skipping.
Fixes #5743.
2024-09-02 19:38:13 -04:00
Tom Rothamel efc671e647 Add Gallery.image(movie=True).
This fixes #5758 by providing a way to keep the movie from
playing through the transition.
2024-09-02 19:09:05 -04:00
Ren'Py Bot 5f42c6bff9 Merge branch 'fix' 2024-09-02 04:30:30 -04:00
Tom Rothamel b2456f5a16 Properly combine transform-uniforms with model-uniforms.
Per #5759
2024-09-01 21:00:13 -04:00
Tom Rothamel 2ad7cebd7a Improvements to allow large amounts of text and meshes.
Fixes #5760.
2024-09-01 15:57:32 -04:00
Ren'Py Bot e6e11dab9f Merge branch 'fix' 2024-09-01 04:30:30 -04:00
Tom Rothamel 6351d60213 Merge pull request #5757 from sunrisesarsaparilla/indent-project.json
make project.json easier for humans to read
2024-08-31 23:55:26 -04:00
Sunrise Sarsaparilla 2928e5495c make project.json easier for humans to read 2024-08-31 20:32:52 -07:00
Andy_kl 72a6d5d347 Make config.interface_layer an early config.variable.
Without it, developer need to set it with `-501` priority to be
lower than `Screen.define`
2024-09-01 04:37:47 +04:00
Sunrise Sarsaparilla 0b5a35a208 allow 'Open Directory' and 'Edit File' customization on renpy launch screen 2024-08-31 14:58:01 -07:00
Ren'Py Bot ffd5eddaf9 Merge branch 'fix' 2024-08-31 04:30:30 -04:00
Tom Rothamel c34b2da03b Add multiple to the character callback.
Fixes #5750.
2024-08-31 00:12:41 -04:00
Tom Rothamel bd943f16a1 Remove debug raise. 2024-08-30 09:31:52 -04:00
Ren'Py Bot 27b4c46013 Merge branch 'fix' 2024-08-30 04:30:30 -04:00
Tom Rothamel 26046d3b15 Only consider input events for default focus.
Fixes #5753.
2024-08-30 00:32:45 -04:00
Tom Rothamel 9ebe782866 Fix subsurfacing of displayables with negative offset and clipping.
Fixes #5752.
2024-08-30 00:19:15 -04:00
Tom Rothamel 327f6a32d5 Route all url-opening through renpy.open_url.
And on PC, shut down fullscreen when opening a web browser.

Fixes #5747.
2024-08-29 09:34:30 -04:00
Ren'Py Bot c8da44781d Merge branch 'fix' 2024-08-29 04:30:30 -04:00
Tom Rothamel a78af4ad86 Remove the Beta flag on the web port. 2024-08-29 00:11:09 -04:00
Mark acf2347930 doc: Fix code block in cds.rst 2024-08-28 22:54:52 -04:00
Tom Rothamel 495d980277 Check in the changes vscode settings. 2024-08-28 20:51:48 -04:00
Tom Rothamel 07ab2c9e52 lint: Do not check non-files as files. 2024-08-28 20:38:12 -04:00
Tom Rothamel c48e102658 Document config.font_transforms.
Fixes #5746.
2024-08-28 19:17:30 -04:00
Ren'Py Bot a40d302500 Merge branch 'fix' 2024-08-28 04:30:30 -04:00
Tom Rothamel 53f2d81f88 Remove debugging raise. 2024-08-28 00:54:14 -04:00
Tom Rothamel 14ed5f4f76 Make TransformState.get work with all properties.
Not just simple ones.

Fixes #5669.
2024-08-28 00:41:23 -04:00
Tom Rothamel a53b06834d Allow negative offsets to be subsurfaced.
This stores the area of the crop box, and lets a displayable go
outside its parents so long as it goes outside the crop box.

(Not 100% sure why this is working without changes when the
displayable is out to the right, but so far so good.)
2024-08-28 00:04:08 -04:00
Tom Rothamel e5d8581a7e render: Fix names compute_subline. 2024-08-27 21:35:02 -04:00
Mark 325a349092 doc: Fix example in dialogue.rst (#5736) 2024-08-27 16:53:23 -04:00
veydzh3r bb0a201e2a Update ukrainian (#5741)
* Update common.rpy

* Update developer.rpy

* Update gui.rpy

* Update launcher.rpy

* Update options.rpy

* Update screens.rpy

* Update script.rpym
2024-08-27 16:53:15 -04:00
Mark 8ad44080ae doc: Fix example in dialogue.rst (#5736) 2024-08-27 16:52:01 -04:00
veydzh3r c41b740ae6 Update ukrainian (#5741)
* Update common.rpy

* Update developer.rpy

* Update gui.rpy

* Update launcher.rpy

* Update options.rpy

* Update screens.rpy

* Update script.rpym
2024-08-27 16:51:34 -04:00
Ren'Py Bot 67e508c979 Merge branch 'fix' 2024-08-27 04:30:30 -04:00
Tom Rothamel ba48755589 Use the correct when rendering a TextMeshDisplayable.
Fixes #5737.
2024-08-26 20:57:18 -04:00
Tom Rothamel d6cf8b37ab Ensure the show_done callback is always called.
And re-document it.
2024-08-26 17:54:39 -04:00
Ren'Py Bot a7e9d39c1d Merge branch 'fix' 2024-08-26 04:30:30 -04:00
Kassy 0e0ae03baa [Web] Only call syncfs once from MultiLocation functions (#5733)
* Do not call syncfs() twice in save_persistent()

With Ren'Py default config, MultiLocation.save_persistent() will call
save_persistent() on 2 different instances of FileLocation. They both
call synfc(), so the warning message "2 FS.syncfs operations in flight
at once, probably just doing extra work" shows up. This commit prevents
that.

* Create and use a context for syncfs pause

* Only call syncfs once from MultiLocation functions

This should handle all the functions of MultiLocation that call
functions of FileLocation that call syncfs().
2024-08-25 23:18:31 -04:00
Kassy 921ddb07f7 [Web] Only call syncfs once from MultiLocation functions (#5733)
* Do not call syncfs() twice in save_persistent()

With Ren'Py default config, MultiLocation.save_persistent() will call
save_persistent() on 2 different instances of FileLocation. They both
call synfc(), so the warning message "2 FS.syncfs operations in flight
at once, probably just doing extra work" shows up. This commit prevents
that.

* Create and use a context for syncfs pause

* Only call syncfs once from MultiLocation functions

This should handle all the functions of MultiLocation that call
functions of FileLocation that call syncfs().
2024-08-25 23:06:10 -04:00
Tom Rothamel 5d59d32634 Skip action cancels skipping when skipping.
Fixes #5731.
2024-08-25 09:13:28 -04:00
Tom Rothamel 06366a8f8f web: Save persistent data during idle frames. 2024-08-25 08:59:55 -04:00
Ren'Py Bot b2b222f23e Merge branch 'fix' 2024-08-25 04:30:30 -04:00
Ren'Py Bot af202584db Merge branch 'fix' 2024-08-24 22:23:52 -04:00
Ren'Py Bot d38dbc79b2 Merge branch 'fix' 2024-08-24 04:30:30 -04:00
Andrej Klychin 15c6fdf8c1 Merge pull request #5726 from AbdulGoodLooks/patch-4
Fix typos in changelog.rst
2024-08-24 00:21:10 +02:00
Abdul 5e02e88ec0 Fix typos in changelog.rst 2024-08-23 15:52:51 +01:00
Tom Rothamel 3337049968 py2: Disable build process. 2024-08-23 00:56:10 -04:00
Tom Rothamel 2565157a5a Bump versions. 2024-08-23 00:56:10 -04:00
Gregor Riepl 5b0cd0bce7 Use spec_from_loader for the second case 2024-08-10 23:40:10 +02:00
Gregor Riepl 2901314d05 Fix custom importer/finder/loader to be compatible with Python 3.12 2024-08-09 00:36:08 +02:00
Gregor Riepl 9ec1cd3c4f Revert "Make relative imports from rpy scripts absolute"
This reverts commit c213d17436.
2024-08-09 00:31:36 +02:00
Gregor Riepl b120f82f98 Replace deprecated APIs when compiling against newer FFmpeg 2024-08-08 23:56:16 +02:00
Gregor Riepl c213d17436 Make relative imports from rpy scripts absolute 2024-08-08 21:08:43 +02:00
559 changed files with 13284 additions and 13190 deletions
+41 -1
View File
@@ -13,7 +13,6 @@ ehthumbs_vista.db
# Python related files.
*.pyc
*.pyo
*.pyi
*.egg-info
# Editor/tool files.
@@ -134,3 +133,44 @@ CubismSdkForNative-4-*.zip
/cg
/.vscode/launch.json
/.vscode/tasks.json
# Pyi Files (generated by scripts/generate_pyi.py)
renpy/audio/filter.pyi
renpy/audio/renpysound.pyi
renpy/display/accelerator.pyi
renpy/display/matrix.pyi
renpy/display/quaternion.pyi
renpy/display/render.pyi
renpy/encryption.pyi
renpy/gl2/gl2draw.pyi
renpy/gl2/gl2mesh.pyi
renpy/gl2/gl2mesh2.pyi
renpy/gl2/gl2mesh3.pyi
renpy/gl2/gl2model.pyi
renpy/gl2/gl2polygon.pyi
renpy/gl2/gl2shader.pyi
renpy/gl2/gl2texture.pyi
renpy/gl2/live2dmodel.pyi
renpy/lexersupport.pyi
renpy/pydict.pyi
renpy/style.pyi
renpy/style.pyi
renpy/styledata/style_activate_functions.pyi
renpy/styledata/style_functions.pyi
renpy/styledata/style_hover_functions.pyi
renpy/styledata/style_idle_functions.pyi
renpy/styledata/style_insensitive_functions.pyi
renpy/styledata/style_selected_activate_functions.pyi
renpy/styledata/style_selected_functions.pyi
renpy/styledata/style_selected_hover_functions.pyi
renpy/styledata/style_selected_idle_functions.pyi
renpy/styledata/style_selected_insensitive_functions.pyi
renpy/styledata/styleclass.pyi
renpy/styledata/stylesets.pyi
renpy/text/ftfont.pyi
renpy/text/hbfont.pyi
renpy/text/textsupport.pyi
renpy/text/texwrap.pyi
renpy/uguu/gl.pyi
renpy/uguu/uguu.pyi
+57 -16
View File
@@ -1,23 +1,22 @@
{
"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,
"**/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,
@@ -42,9 +41,45 @@
"web3": true,
"**/*.rpa": true,
"**/*.rpymc": true,
"**/cache/": true
"**/cache/": true,
"renpy/audio/filter.pyi": true,
"renpy/audio/renpysound.pyi": true,
"renpy/display/accelerator.pyi": true,
"renpy/display/matrix.pyi": true,
"renpy/display/quaternion.pyi": true,
"renpy/display/render.pyi": true,
"renpy/encryption.pyi": true,
"renpy/gl2/gl2draw.pyi": true,
"renpy/gl2/gl2mesh.pyi": true,
"renpy/gl2/gl2mesh2.pyi": true,
"renpy/gl2/gl2mesh3.pyi": true,
"renpy/gl2/gl2model.pyi": true,
"renpy/gl2/gl2polygon.pyi": true,
"renpy/gl2/gl2shader.pyi": true,
"renpy/gl2/gl2texture.pyi": true,
"renpy/gl2/live2dmodel.pyi": true,
"renpy/lexersupport.pyi": true,
"renpy/pydict.pyi": true,
"renpy/style.pyi": true,
"renpy/styledata/style_activate_functions.pyi": true,
"renpy/styledata/style_functions.pyi": true,
"renpy/styledata/style_hover_functions.pyi": true,
"renpy/styledata/style_idle_functions.pyi": true,
"renpy/styledata/style_insensitive_functions.pyi": true,
"renpy/styledata/style_selected_activate_functions.pyi": true,
"renpy/styledata/style_selected_functions.pyi": true,
"renpy/styledata/style_selected_hover_functions.pyi": true,
"renpy/styledata/style_selected_idle_functions.pyi": true,
"renpy/styledata/style_selected_insensitive_functions.pyi": true,
"renpy/styledata/styleclass.pyi": true,
"renpy/styledata/stylesets.pyi": true,
"renpy/text/ftfont.pyi": true,
"renpy/text/hbfont.pyi": true,
"renpy/text/textsupport.pyi": true,
"renpy/text/texwrap.pyi": true,
"renpy/uguu/gl.pyi": true,
"renpy/uguu/uguu.pyi": true
},
"python.languageServer": "Pylance",
"python.analysis.typeCheckingMode": "basic",
"python.analysis.diagnosticMode": "workspace",
@@ -186,6 +221,12 @@
"foreground": "#ffffff"
}
},
{
"scope": "renpy.meta.color.#f00",
"settings": {
"foreground": "#f00"
}
},
{
"scope": "text.notes.info",
"settings": {
@@ -239,5 +280,5 @@
}
}
]
},
}
}
}
+43 -18
View File
@@ -4,8 +4,29 @@ The Ren'Py Visual Novel Engine
https://www.renpy.org
Ren'Py development takes place on the ``master`` branch, and occasionally
on feature branches.
Branches
========
The following branches are the most interesting.
``fix``
The fix branch is used for fixes to the current version of Ren'Py that do
not require dangerous changes. The fix branch is also the source of the
documentation on https://www.renpy.org/. This branch is automatically
merged into master on a regular basis.
Pull requests that contain fixes or documentation improvements should be
made to the fix branch. When a release is made, the master branch is
copied to the fix branch.
``master``
The master branch is where the main focus of development is. This branch
will eventually become the next release of Ren'Py.
Pull requests that contain new features, that require incompatible changes,
or major changes to Ren'Py's internals should be targeted at the master
branch.
Getting Started
@@ -37,7 +58,7 @@ renpy.app, or renpy.exe, as appropriate for your platform.
If the current nightly build doesn't work, please wait 24 hours for a new
build to occur. If that build still doesn't work, contact Tom (`pytom at bishoujo.us`,
or @renpytom on twitter) to find out what's wrong.
or @renpytom on Twitter/X) to find out what's wrong.
The ``doc`` symlink will dangle until documentation is built, as described
below.
@@ -49,9 +70,9 @@ 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::
sudo apt install virtualenvwrapper python3-dev libavcodec-dev libavformat-dev \
sudo apt install virtualenvwrapper python3-dev libassimp-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
libsdl2-image-dev libsdl2-gfx-dev libsdl2-mixer-dev libsdl2-ttf-dev libjpeg-dev pkg-config
Ren'Py requires SDL_image 2.6 or greater. If your distribution doesn't include
that version, you'll need to download it from:
@@ -71,29 +92,18 @@ To return to this virtualenv later, run::
After activating the virtualenv, install additional dependencies::
pip install -U cython future six typing pefile requests ecdsa
pip install -U setuptools 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 setup.py install
python setup.py install_headers
popd
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::
Finally, use setup.py to compile extension modules that support Ren'Py::
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
install the modules that support Ren'Py::
pushd module
python setup.py install
popd
Ren'Py will be installed into the activated virtualenv. It can then be run
using the command::
@@ -101,6 +111,21 @@ using the command::
python renpy.py
Other Platforms
---------------
Where supported, Ren'Py will attempt to find include directories and library paths
using pkg-config. If pkg-config is not present, include and library paths can be
specified using CFLAGS and LDFLAGS.
If RENPY_CFLAGS is present in the environment and CFLAGS is not, setup.py
will set CFLAGS to RENPY_CFLAGS. The same is true for RENPY_LDFLAGS,
RENPY_CC, RENPY_CXX, and RENPY_LD.
Setup.py does not support cross-compiling. See https://github.com/renpy/renpy-build
for software that cross-compiles Ren'Py for many platforms.
Documentation
=============
+1 -1
View File
@@ -252,7 +252,7 @@ def main():
"-q",
"egg_info",
"--tag-build",
"+renpy" + args.version,
"+renpy" + args.version.replace("+", "-"),
"sdist",
"-d",
os.path.abspath(destination)
+5
View File
@@ -0,0 +1,5 @@
*.c
*.so
*.egg-info
*.html
build
+1
View File
@@ -0,0 +1 @@
../../renpy/cslots.pyx
+8
View File
@@ -0,0 +1,8 @@
from setuptools import setup, Extension
setup(
name="cslots",
version="1.0.0",
ext_modules=[
Extension("cslots", [ "cslots.pyx" ]),
])
+7
View File
@@ -0,0 +1,7 @@
#!/bin/bash
set -e
cython -a cslots.pyx
pip install -e .
python3 -m pytest
+262
View File
@@ -0,0 +1,262 @@
import sys
import pickle
from cslots import Object, Slot, IntegerSlot
class C1(Object):
str1 : str|None = None
int1 : int = 0
def __init__(self, str1=None, int1=1):
self.str1 = str1
self.int1 = int1
class C2(C1):
str2 : str|None = None
int2 : int = 0
def __init__(self, str1=None, int1=0, str2=None, int2=0):
self.str1 = str1
self.int1 = int1
self.str2 = str2
self.int2 = int2
def test_slot_count():
assert C1._cslot_count == 2
assert C2._cslot_count == 4
def test_slots():
o = C2()
assert o.str1 is None
assert o.int1 == 0
assert o.str2 is None
assert o.int2 == 0
o.str1 = "hello"
o.int1 = 42
o.str2 = "world"
o.int2 = 43
assert o.str1 == "hello"
assert o.int1 == 42
assert o.str2 == "world"
assert o.int2 == 43
o.str1 = None
o.int1 = 0
o.str2 = None
o.int2 = 0
assert o.str1 is None
assert o.int1 == 0
assert o.str2 is None
assert o.int2 == 0
def test_compress():
def expect_size(o, values, indexes):
assert sys.getsizeof(o) == 32 + 8 * values + indexes
o = C2()
o.str1 = "hello"
o.int1 = 42
o.str2 = "world"
o.int2 = 43
expect_size(o, 4, 4)
o._compress()
assert o.str1 == "hello"
assert o.int1 == 42
assert o.str2 == "world"
assert o.int2 == 43
expect_size(o, 4, 4)
o = C2()
o.str2 = "world"
o.int2 = 43
o._compress()
assert o.str1 is None
assert o.int1 == 0
assert o.str2 == "world"
assert o.int2 == 43
expect_size(o, 2, 4)
o = C2()
o.str1 = "hello"
o._compress()
assert o.str1 == "hello"
assert o.int1 == 0
assert o.str2 is None
assert o.int2 == 0
expect_size(o, 1, 1)
def test_decompress():
def expect_size(o, values, indexes):
assert sys.getsizeof(o) == 32 + 8 * values + indexes
o = C2()
o.str1 = "hello"
o.int1 = 42
o.str2 = "world"
o.int2 = 43
expect_size(o, 4, 4)
o._compress()
o._decompress()
assert o.str1 == "hello"
assert o.int1 == 42
assert o.str2 == "world"
assert o.int2 == 43
expect_size(o, 4, 4)
o = C2()
o.str2 = "world"
o.int2 = 43
o._compress()
o._decompress()
assert o.str1 is None
assert o.int1 == 0
assert o.str2 == "world"
assert o.int2 == 43
expect_size(o, 4, 4)
o = C2()
o.str1 = "hello"
o._compress()
o._decompress()
assert o.str1 == "hello"
assert o.int1 == 0
assert o.str2 is None
assert o.int2 == 0
expect_size(o, 4, 4)
def test_kill():
o = C2()
o.str1 = "hello"
o.int1 = 42
o.str2 = "world"
o.int2 = 43
o._kill()
assert o.str1 is None
assert o.int1 == 0
assert o.str2 is None
assert o.int2 == 0
o = C2()
o.str2 = "world"
o.int2 = 43
o._compress()
o._kill()
assert o.str1 is None
assert o.int1 == 0
assert o.str2 is None
assert o.int2 == 0
def test_pickle():
o = C2()
o.str1 = "hello"
o.int1 = 42
o.str2 = "world"
o.int2 = 43
o = pickle.loads(pickle.dumps(o))
assert o.str1 == "hello"
assert o.int1 == 42
assert o.str2 == "world"
assert o.int2 == 43
o = C2()
o.str2 = "world"
o.int2 = 43
o = pickle.loads(pickle.dumps(o))
assert o.str1 is None
assert o.int1 == 0
assert o.str2 == "world"
assert o.int2 == 43
o = C2()
o.str1 = "hello"
o = pickle.loads(pickle.dumps(o))
assert o.str1 == "hello"
assert o.int1 == 0
assert o.str2 is None
assert o.int2 == 0
def test_pickle_compressed():
o = C2()
o.str1 = "hello"
o.int1 = 42
o.str2 = "world"
o.int2 = 43
o._compress()
o = pickle.loads(pickle.dumps(o))
assert o.str1 == "hello"
assert o.int1 == 42
assert o.str2 == "world"
assert o.int2 == 43
o = C2()
o.str2 = "world"
o.int2 = 43
o._compress()
o = pickle.loads(pickle.dumps(o))
assert o.str1 is None
assert o.int1 == 0
assert o.str2 == "world"
assert o.int2 == 43
o = C2()
o.str1 = "hello"
o._compress()
o = pickle.loads(pickle.dumps(o))
assert o.str1 == "hello"
assert o.int1 == 0
assert o.str2 is None
assert o.int2 == 0
+1 -1
View File
@@ -328,7 +328,7 @@ define gui.vbar_borders = Borders(gui.scale(4), gui.scale(4), gui.scale(4), gui.
define gui.vscrollbar_borders = Borders(gui.scale(4), gui.scale(4), gui.scale(4), gui.scale(4))
define gui.vslider_borders = Borders(gui.scale(4), gui.scale(4), gui.scale(4), gui.scale(4))
## What to do with unscrollable scrollbars in the gui. "hide" hides them, while
## What to do with unscrollable scrollbars in the game menu. "hide" hides them, while
## None shows them.
define gui.unscrollable = "hide"
+1
View File
@@ -0,0 +1 @@
## When this file exists, Ren'Py will load files in game/libs before other files in game.
+8 -7
View File
@@ -96,7 +96,6 @@ style frame:
## https://www.renpy.org/doc/html/screen_special.html#say
screen say(who, what):
style_prefix "say"
window:
id "window"
@@ -245,9 +244,7 @@ screen quick_menu():
hbox:
style_prefix "quick"
xalign 0.5
yalign 1.0
style "quick_menu"
textbutton _("Back") action Rollback()
textbutton _("History") action ShowMenu('history')
@@ -266,9 +263,14 @@ init python:
default quick_menu = True
style quick_menu is hbox
style quick_button is default
style quick_button_text is button_text
style quick_menu:
xalign 0.5
yalign 1.0
style quick_button:
properties gui.button_properties("quick_button")
@@ -701,6 +703,7 @@ style slot_name_text is slot_button_text
style page_label:
xpadding gui.scale(50)
ypadding gui.scale(3)
xalign 0.5
style page_label_text:
textalign 0.5
@@ -1520,11 +1523,9 @@ screen quick_menu():
if quick_menu:
hbox:
style "quick_menu"
style_prefix "quick"
xalign 0.5
yalign 1.0
textbutton _("Back") action Rollback()
textbutton _("Skip") action Skip() alternate Skip(fast=True, confirm=True)
textbutton _("Auto") action Preference("auto-forward", "toggle")
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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
+5 -15
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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
@@ -76,24 +76,14 @@ class BinFile(object):
self.addr = addr
def tostring(self):
if PY2:
return self.a.tostring() # type: ignore
else:
return self.a.tobytes()
return self.a.tobytes()
def substring(self, start, len): # @ReservedAssignment
if PY2:
return self.a[start:start + len].tostring() # type: ignore
else:
return self.a[start:start + len].tobytes()
return self.a[start:start + len].tobytes()
def __init__(self, data):
self.a = array.array('B')
if PY2:
self.a.fromstring(data) # type: ignore
else:
self.a.frombytes(data)
self.a.frombytes(data)
##############################################################################
# These functions parse data out of the file. In these functions, offset is
@@ -396,7 +386,7 @@ def change_icons(oldexe, icofn):
#Image size is the memory size of all sections + all headers, padded to memory alignment.
#There's alread a header size, and this isn't changing headers, so just add.
#There's already a header size, and this isn't changing headers, so just add.
#imageSize = pe.OPTIONAL_HEADER.ImageBase + pe.OPTIONAL_HEADER.SizeOfHeaders
imageSize = pe.OPTIONAL_HEADER.SizeOfHeaders
for s in pe.sections:
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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
+5 -6
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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
@@ -24,7 +24,6 @@ init python:
import codecs
import re
import sys
import future.utils
def theme_names():
"""
@@ -98,7 +97,7 @@ init python:
return
renpy.style.restore(style_backup)
future.utils.exec_(theme_data.THEME[theme][scheme], globals(), globals())
exec(theme_data.THEME[theme][scheme], globals(), globals())
# Rebuild the style cache.
renpy.style.rebuild(False)
@@ -168,8 +167,8 @@ init python:
def list_logical_lines(filename):
"""
This reads in filename, and turns it into a list of logical
lines.
This reads in filename, and turns it into a list of logical
lines.
"""
f = codecs.open(filename, "rb", "utf-8")
@@ -188,7 +187,7 @@ init python:
# The line that we're building up.
line = ""
# The number of open parenthesis there are right now.
# The number of open parenthesis there are right now.
parendepth = 0
# Looping over the characters in a single logical line.
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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 -50
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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
@@ -432,10 +432,7 @@ fix_dlc("renios", "renios")
for f in sorted(self, key=lambda a : a.name):
f.hash(sha, distributor)
if PY2:
return sha.hexdigest().decode("utf-8")
else:
return sha.hexdigest()
return sha.hexdigest()
def split_by_prefix(self, prefix):
"""
@@ -661,7 +658,6 @@ fix_dlc("renios", "renios")
# Build the mac app and windows exes.
self.add_mac_files()
self.add_windows_files()
self.add_main_py()
# Add the main.py.
self.add_main_py()
@@ -898,7 +894,7 @@ fix_dlc("renios", "renios")
if not os.path.exists(path):
raise Exception("{} does not exist.".format(path))
if isinstance(file_list, basestring):
if isinstance(file_list, str):
file_list = file_list.split()
f = File(name, path, False, executable)
@@ -911,7 +907,7 @@ fix_dlc("renios", "renios")
Adds an empty directory to the file lists.
"""
if isinstance(file_list, basestring):
if isinstance(file_list, str):
file_list = file_list.split()
f = File(name, None, True, False)
@@ -947,6 +943,15 @@ fix_dlc("renios", "renios")
arcfn = arcname + ".rpa"
arcpath = self.temp_filename(arcfn)
# Create new directories leading to the new archive file relative to the tmp root
# if the archive's name indicates it should be in a subdirectory
arc_relpath = os.path.relpath(arcpath, self.project.tmp)
arc_subdir = os.path.dirname(arc_relpath)
if arc_subdir:
abs_subdir = os.path.join(self.project.tmp, arc_subdir)
os.makedirs(abs_subdir, exist_ok=True)
af = archiver.Archive(arcpath)
fll = len(self.file_lists[arcname])
@@ -985,7 +990,7 @@ fix_dlc("renios", "renios")
script_version_txt = self.temp_filename("script_version.txt")
with open(script_version_txt, "w") as f:
f.write(unicode(repr(renpy.renpy.version_tuple[:-1])))
f.write(repr(renpy.renpy.version_tuple[:-1]))
self.add_file("all", "game/script_version.txt", script_version_txt)
@@ -1075,11 +1080,8 @@ fix_dlc("renios", "renios")
rv = self.temp_filename("Info.plist")
if PY2:
plistlib.writePlist(plist, rv)
else:
with open(rv, "wb") as f:
plistlib.dump(plist, f)
with open(rv, "wb") as f:
plistlib.dump(plist, f)
return rv
@@ -1100,12 +1102,14 @@ fix_dlc("renios", "renios")
prefix = py("lib/py{major}-")
if os.path.exists(linux_i686):
i686fn = os.path.join(config.renpy_base, prefix + "linux-i686/renpy")
if os.path.exists(i686fn):
self.add_file(
linux_i686,
prefix + "linux-i686/" + self.executable_name,
os.path.join(config.renpy_base, prefix + "linux-i686/renpy"),
i686fn,
True)
self.add_file(
@@ -1114,16 +1118,6 @@ fix_dlc("renios", "renios")
os.path.join(config.renpy_base, prefix + "linux-x86_64/renpy"),
True)
armfn = os.path.join(config.renpy_base, prefix + "linux-armv7l/renpy")
if os.path.exists(armfn):
self.add_file(
raspi,
prefix + "linux-armv7l/" + self.executable_name,
armfn,
True)
aarch64fn = os.path.join(config.renpy_base, prefix + "linux-aarch64/renpy")
if os.path.exists(aarch64fn):
@@ -1226,19 +1220,8 @@ fix_dlc("renios", "renios")
if os.path.exists(tmp):
self.add_file(fl, dst, tmp)
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/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)
def add_main_py(self):
@@ -1531,11 +1514,12 @@ fix_dlc("renios", "renios")
update = { variant : { "version" : self.update_versions[variant], "base_name" : self.base_name, "files" : update_files, "directories" : update_directories, "xbit" : update_xbit } }
update_fn = os.path.join(self.destination, filename + ".update.json")
update_fn = self.temp_filename(filename + ".update.json")
if self.include_update and not format.startswith("app-"):
with open(update_fn, "wb" if PY2 else "w") as f:
with open(update_fn, "w") as f:
json.dump(update, f, indent=2)
if (not dlc) or (format == "update"):
@@ -1565,14 +1549,11 @@ fix_dlc("renios", "renios")
in this thread or a background thread.
"""
if self.include_update and not self.build_update and not dlc:
if os.path.exists(update_fn):
os.unlink(update_fn)
final_update_fn = os.path.join(self.destination, filename + ".update.json")
if not directory:
file_hash = hash_file(path)
else:
file_hash = ""
if self.build_update or dlc:
if os.path.exists(update_fn):
shutil.copy(update_fn, final_update_fn)
if format == "tar.bz2" or format == "bare-tar.bz2":
pkg = TarPackage(path, "w:bz2")
@@ -1806,8 +1787,9 @@ fix_dlc("renios", "renios")
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")]
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:
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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 @@ init python:
# This is set to true by cancel() to indicate the download should be cancelled.
self.cancelled = False
# Set on succes or failure.
# Set on success or failure.
self.success = False
self.failure = None
+6 -6
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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
@@ -225,7 +225,7 @@ init 1 python in editor:
_("JEdit is deprecated, using another editor is recommended."),
"jedit",
_("1.8 MB download required."),
_("This may have occured because Java is not installed on this system."),
_("This may have occurred because Java is not installed on this system."),
deprecated=True,
)
@@ -411,7 +411,7 @@ init 1 python in editor:
except Exception as e:
exception = traceback.format_exception_only(type(e), e)[-1][:-1]
renpy.invoke_in_new_context(interface.error, _("An exception occured while launching the text editor:\n[exception!q]"), error_message, exception=exception)
renpy.invoke_in_new_context(interface.error, _("An exception occurred while launching the text editor:\n[exception!q]"), error_message, exception=exception)
class EditAbsolute(Action):
def __init__(self, filename, line=None, check=False):
@@ -457,7 +457,7 @@ init 1 python in editor:
except Exception as e:
exception = traceback.format_exception_only(type(e), e)[-1][:-1]
renpy.invoke_in_new_context(interface.error, _("An exception occured while launching the text editor:\n[exception!q]"), error_message, exception=exception)
renpy.invoke_in_new_context(interface.error, _("An exception occurred while launching the text editor:\n[exception!q]"), error_message, exception=exception)
class EditAll(Action):
@@ -495,7 +495,7 @@ init 1 python in editor:
except Exception as e:
exception = traceback.format_exception_only(type(e), e)[-1][:-1]
renpy.invoke_in_new_context(interface.error, _("An exception occured while launching the text editor:\n[exception!q]"), error_message, exception=exception)
renpy.invoke_in_new_context(interface.error, _("An exception occurred while launching the text editor:\n[exception!q]"), error_message, exception=exception)
class EditProject(Action):
@@ -518,7 +518,7 @@ init 1 python in editor:
except Exception as e:
exception = traceback.format_exception_only(type(e), e)[-1][:-1]
renpy.invoke_in_new_context(interface.error, _("An exception occured while launching the text editor:\n[exception!q]"), error_message, exception=exception)
renpy.invoke_in_new_context(interface.error, _("An exception occurred while launching the text editor:\n[exception!q]"), error_message, exception=exception)
def CanEditProject():
+8 -12
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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
@@ -157,13 +157,11 @@ screen front_page_project:
label _("Open Directory") style "l_label_small"
frame style "l_indent":
has vbox
has grid 2 max(5, (len(p.get_renpy_launcher()["open_directory"]) + 1) // 2):
transpose True xfill True
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)
for button_name, path in p.get_renpy_launcher()["open_directory"].items():
textbutton button_name action OpenDirectory(os.path.join(p.path, path), absolute=True)
vbox:
if persistent.show_edit_funcs:
@@ -173,10 +171,8 @@ screen front_page_project:
frame style "l_indent":
has vbox
textbutton "script.rpy" action editor.Edit("game/script.rpy", check=True)
textbutton "options.rpy" action editor.Edit("game/options.rpy", check=True)
textbutton "gui.rpy" action editor.Edit("game/gui.rpy", check=True)
textbutton "screens.rpy" action editor.Edit("game/screens.rpy", check=True)
for button_name, path in p.get_renpy_launcher()["edit_file"].items():
textbutton button_name action editor.Edit(path, check=True)
if editor.CanEditProject():
textbutton _("Open project") action editor.EditProject()
@@ -216,7 +212,7 @@ screen front_page_project:
textbutton _("Android") action Jump("android")
textbutton _("iOS") action Jump("ios")
textbutton _("Web") + " " + _("(Beta)") action Jump("web")
textbutton _("Web") action Jump("web")
textbutton _("Generate Translations") action Jump("translate")
textbutton _("Extract Dialogue") action Jump("extract_dialogue")
+10 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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,6 +26,15 @@ define gui.asian = False
# and provides the full path to the template project.
default gui_template_path = None
define LIBS_TXT = _("""\
The game/libs/ directory is meant for third-party libraries that ask to be
put in game/libs.
When this file (game/libs/libs.txt) is present, Ren'Py will load all files
in libs before any other file in game/, and will not consider directory names
when loading these files.
""")
init -1 python:
import gui7
+6 -2
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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
@@ -28,15 +28,19 @@ import os
import shutil
def finish(p):
for dn in [ "images", "audio" ]:
for dn in [ "images", "audio", "libs" ]:
fulldn = os.path.join(p.prefix, dn)
if not os.path.exists(fulldn):
os.mkdir(fulldn)
with open(os.path.join(p.prefix, "libs", "libs.txt"), "w") as f:
f.write(renpy.translation.translate_string(renpy.store.LIBS_TXT, language=p.language))
def generate_gui(p):
ImageGenerator(p).generate_all()
+2 -2
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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
@@ -172,7 +172,7 @@ class CodeGenerator(object):
for l in self.lines:
m = re.match('^(\s*)define (.*?) =', l)
m = re.match(r'^(\s*)define (.*?) =', l)
if m:
indent = m.group(1)
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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 -10
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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
@@ -81,10 +81,7 @@ init python:
label install_live2d:
python hide:
if PY2:
_prefix = r"lib/py2-"
else:
_prefix = r"lib/py3-"
_prefix = r"lib/py3-"
patterns = [
(r".*/Core/dll/linux/x86_64/(libLive2DCubismCore.so)", _prefix + r"linux-x86_64/\1"),
@@ -97,11 +94,6 @@ label install_live2d:
(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-[45]-*.zip", patterns)
jump front_page
+7 -3
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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
@@ -169,7 +169,7 @@ def _check_hash(filename, hashj):
download_file = ""
download_url = ""
def download(url, filename, hash=None):
def download(url, filename, hash=None, headers=None, requests_kwargs={}):
"""
Downloads `url` to `filename`, a tempfile.
"""
@@ -188,9 +188,13 @@ def download(url, filename, hash=None):
progress_time = time.time()
all_headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36 renpy/8'}
if headers:
all_headers.update(headers)
try:
response = requests.get(url, stream=True, proxies=renpy.exports.proxies, timeout=15)
response = requests.get(url, stream=True, proxies=renpy.exports.proxies, timeout=15, headers=all_headers, **requests_kwargs)
response.raise_for_status()
total_size = int(response.headers.get('content-length', 1))
+13 -6
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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,6 +33,10 @@ init python in interface:
DOC_URL = "http://www.renpy.org/doc/html/"
DOC_LOCAL_URL = "file:///" + DOC_PATH
# If true, the launcher should not link back to renpy.org.
NO_LAUNCHER_LINKS = os.path.exists(os.path.join(config.renpy_base, "no_launcher_links.txt"))
local_doc_exists = os.path.exists(DOC_PATH)
def get_doc_url(page):
@@ -40,7 +44,7 @@ init python in interface:
Returns the URL to the documentation page.
"""
if local_doc_exists and not persistent.use_web_doc:
if local_doc_exists and (NO_LAUNCHER_LINKS or not persistent.use_web_doc):
from urllib.parse import urljoin
from urllib.request import pathname2url
@@ -117,7 +121,10 @@ screen bottom_info:
hbox:
spacing INDENT
textbutton _("Documentation") style "l_link" action interface.OpenDocumentation()
textbutton _("Ren'Py Website") style "l_link" action OpenURL(interface.RENPY_URL)
if not interface.NO_LAUNCHER_LINKS:
textbutton _("Ren'Py Website") style "l_link" action OpenURL(interface.RENPY_URL)
textbutton _("[interface.version]") style "l_link" action Jump("about")
hbox:
@@ -133,7 +140,7 @@ screen bottom_info:
textbutton _("preferences") style "l_link" action Jump("preferences")
textbutton _("quit") style "l_link" action Quit(confirm=False)
if persistent.sponsor_message:
if persistent.sponsor_message and not interface.NO_LAUNCHER_LINKS:
textbutton _("Ren'Py Sponsor Information"):
style "l_link"
@@ -345,7 +352,7 @@ init python in interface:
def error(message, submessage=None, label="front_page", **kwargs):
"""
Indicates to the user that an error has occured.
Indicates to the user that an error has occurred.
`message`
The message to display.
@@ -401,7 +408,7 @@ init python in interface:
except Exception as e:
renpy.renpy.error.report_exception(e, editor=False)
error(_("While [what!qt], an error occured:"),
error(_("While [what!qt], an error occurred:"),
_("[exception!q]"),
what=what,
label=label,
+1 -4
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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
@@ -164,9 +164,6 @@ init python:
print("Eliminating __pycache__...")
if PY2:
return
import pathlib
import sys
+2 -2
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
@@ -50,7 +50,7 @@ init python:
pass
with interface.error_handling(_("Downloading the itch.io butler.")):
url = "https://broth.itch.ovh/butler/{}/LATEST/archive/default".format(platform)
url = "https://broth.itch.zone/butler/{}/LATEST/archive/default".format(platform)
response = requests.get(url, headers={'User-Agent' : "Renpy"}, proxies=renpy.proxies)
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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
@@ -91,7 +91,7 @@ init -1 python:
def log(self, msg):
with open(self.filename, "a") as f:
f.write("\n")
f.write(unicode(msg))
f.write(msg)
f.write("\n")
def info(self, prompt):
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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 -4
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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
@@ -34,9 +34,6 @@ 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:
new_project_language = __("{#language name and font}")
gui_kind = "new_gui_project"
+27 -30
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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
@@ -301,6 +301,8 @@ init python:
build.classify_renpy("**.new", None)
build.classify_renpy("**.bak", None)
build.classify_renpy("**.keystore", None)
build.classify_renpy("**/log.txt", None)
build.classify_renpy("**/traceback.txt", None)
build.classify_renpy("**/errors.txt", None)
@@ -320,7 +322,7 @@ init python:
"""
if py is True:
py = 'pyo' if PY2 else 'pycache'
py = 'pycache'
if py == 'pycache':
build.classify_renpy(pattern + "/**__pycache__/", binary)
@@ -344,6 +346,8 @@ init python:
build.classify_renpy(pattern + "/**.pyo", None)
build.classify_renpy(pattern + "/**.pyi", None)
build.classify_renpy(pattern + "/**.pyx", "source_only")
build.classify_renpy(pattern + "/**.pxd", "source_only")
build.classify_renpy(pattern + "/**.rpyc", binary)
build.classify_renpy(pattern + "/**.rpymc", binary)
@@ -355,6 +359,7 @@ init python:
build.classify_renpy(pattern + "/**", source)
build.classify_renpy("renpy/gl/", None)
build.classify_renpy("renpy.py", "binary")
source_and_binary("renpy")
@@ -390,39 +395,31 @@ init python:
build.classify_renpy("sphinx/source/inc/", None)
build.classify_renpy("sphinx/source/**", "source_only")
# module.
build.classify_renpy("module/", "source")
build.classify_renpy("module/*.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")
build.classify_renpy("module/include/*.pxd", "source")
build.classify_renpy("module/include/*.pxi", "source")
build.classify_renpy("module/pysdlsound/", "source")
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")
# Build System.
build.classify_renpy("setup.py", "source_only")
build.classify_renpy("src/**", "source_only")
build.classify_renpy("scripts/", "source_only")
build.classify_renpy("scripts/setuplib.py", "source_only")
build.classify_renpy("scripts/generate_styles.py", "source_only")
# all-platforms binary.
build.classify_renpy("lib/**/libpython{}.{}.dll".format(sys.version_info.major, sys.version_info.minor), "binary")
build.classify_renpy("lib/**/libpython*.dll", None)
build.classify_renpy("lib/**/*steam_api*", "steam")
build.classify_renpy("lib/**/*Live2D*", None)
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/py3-linux-armv7l", None)
build.classify_renpy("lib/py3-linux-aarch64/**", "linux_arm")
source_and_binary("lib/py3-**", "binary", "binary")
libpython = "lib/python{}.{}".format(sys.version_info.major, sys.version_info.minor)
source_and_binary(libpython, "binary", "binary", py='pyc')
build.classify_renpy("lib/python**", None)
build.classify_renpy("lib/py2-**", None)
build.classify_renpy("renpy3.sh", "binary")
build.classify_renpy("lib/", "binary")
+12 -95
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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
@@ -34,106 +34,21 @@ init python in distribute:
from zipfile import crc32
# Since the long type doesn't exist on py3, define it here
if not PY2:
long = int
long = int
zlib.Z_DEFAULT_COMPRESSION = 5
if PY2:
class ZipFile(zipfile.ZipFile):
class ZipFile(zipfile.ZipFile):
def write_with_info(self, zinfo, filename):
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")
if zinfo.filename.endswith("/"):
data = b''
else:
with open(filename, "rb") as f:
data = f.read()
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
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
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
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))
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:
with open(filename, "rb") as f:
data = f.read()
self.writestr(zinfo, data)
self.writestr(zinfo, data)
class ZipPackage(object):
@@ -469,3 +384,5 @@ init python in distribute:
for i in parallel_threads:
if i.done:
i.done()
parallel_threads.clear()
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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
+45 -10
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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
@@ -92,6 +92,10 @@ init python in project:
# The mtime of the last dump file loaded.
self.dump_mtime = 0
# A processed version of data['renpy_launcher'] with missing files
# and directories removed.
self.renpy_launcher = None
def get_dump_filename(self):
if os.path.exists(os.path.join(self.gamedir, "saves")):
@@ -116,7 +120,7 @@ init python in project:
try:
with open(os.path.join(self.path, "project.json"), "w") as f:
json.dump(self.data, f)
json.dump(self.data, f, indent=2)
except Exception:
self.load_data()
@@ -156,6 +160,43 @@ init python in project:
data["renamed_steam"] = True
def get_renpy_launcher(self):
if self.renpy_launcher is not None:
return self.renpy_launcher
rv = { }
default_values = {
"open_directory":
{
"game": "game",
"base": ".",
"images": "game/images",
"audio": "game/audio",
"gui": "game/gui",
"libs": "game/libs",
"mods": "game/mods",
},
"edit_file":
{
"script.rpy": "game/script.rpy",
"options.rpy": "game/options.rpy",
"gui.rpy": "game/gui.rpy",
"screens.rpy": "game/screens.rpy"
}
}
for k, default_d in default_values.items():
d = self.data.get("renpy_launcher", {}).get(k, default_d)
rv[k] = { name : path for name, path in d.items() if os.path.exists(os.path.join(self.path, path)) }
self.renpy_launcher = rv
return rv
def make_tmp(self):
"""
Makes the project's temporary directory, if it doesn't exist
@@ -352,12 +393,6 @@ init python in project:
line = line[:1024]
if PY2:
try:
line = line.decode("utf-8")
except Exception:
continue
m = re.search(r"#\s*TODO(\s*:\s*|\s+)(.*)", line, re.I)
if m is None:
@@ -672,7 +707,7 @@ init python in project:
The label to jump to when clicked.
"""
if isinstance(p, basestring):
if isinstance(p, str):
p = manager.get(p)
self.project = p
@@ -760,7 +795,7 @@ init python in project:
def __init__(self, p=None):
if p is None:
self.project = current
elif isinstance(p, basestring):
elif isinstance(p, str):
self.project = manager.get(p)
else:
self.project = p
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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
+5 -5
View File
@@ -364,7 +364,7 @@
new "{b}نقترح.{/b} محرر نص له واجهة سهلة الاستعمال ويعين على كتابة النصوص البرمجية يفضل برنامج يحتوي على مدقق لغوي. Editraحالياً لا يدعم اللغات الأجنبية مثل اللغه الكورية و الصينية و اليابانية. على نظام لينوكس, Editra يحتاج wxPython."
# editor.rpy:167
old "This may have occured because wxPython is not installed on this system."
old "This may have occurred because wxPython is not installed on this system."
new "قد يكون سبب ذلك ان wxPython غير موجود في نظام التشغيل لديك"
# editor.rpy:169
@@ -380,7 +380,7 @@
new "مطلوب تحميل ملف بحجم 1.8 ميغا بايت."
# editor.rpy:182
old "This may have occured because Java is not installed on this system."
old "This may have occurred because Java is not installed on this system."
new "قد يكون السبب ان الجافا غير موجوده على هذا الجهاز."
# editor.rpy:191
@@ -392,7 +392,7 @@
new "يمنع رينباي من فتح اي محرر نصوص"
# editor.rpy:359
old "An exception occured while launching the text editor:\n[exception!q]"
old "An exception occurred while launching the text editor:\n[exception!q]"
new "حصل استثناء اثناء فتح المحرر: \n[exception!q]"
# editor.rpy:457
@@ -608,7 +608,7 @@
new "خطأ"
# interface.rpy:356
old "While [what!qt], an error occured:"
old "While [what!qt], an error occurred:"
new "حصل خطأ أثناء [what!qt]"
# interface.rpy:356
@@ -1136,7 +1136,7 @@
new "أحدث نسخة طازجة من رينباي التجريبي, قد يحتوي على آخر مستجدات رينباي و قد لا يعمل مطلقاً"
# updater.rpy:152
old "An error has occured:"
old "An error has occurred:"
new "حصل خطأ:"
# updater.rpy:154
+1 -1
View File
@@ -929,7 +929,7 @@
new "Spildataene er blevet hentet."
# renpy/common/00updater.rpy:2078
old "An error occured when trying to download game data:"
old "An error occurred when trying to download game data:"
new "En fejl opstod under forsøg på hentning af spildata:"
# renpy/common/00updater.rpy:2083
+4 -4
View File
@@ -749,7 +749,7 @@
new "Hentning af 1.8 MB påkrævet."
# game/editor.rpy:211
old "This may have occured because Java is not installed on this system."
old "This may have occurred because Java is not installed on this system."
new "Dette er muligvis opstået, fordi Java ikke er installeret på dette system."
# game/editor.rpy:220
@@ -781,7 +781,7 @@
new "Rediger [text]."
# game/editor.rpy:401
old "An exception occured while launching the text editor:\n[exception!q]"
old "An exception occurred while launching the text editor:\n[exception!q]"
new "En undtagelse opstod under opstart af tekstbehandleren:\n[exception!q]"
# game/editor.rpy:533
@@ -1073,7 +1073,7 @@
new "åbner logfilen"
# game/interface.rpy:407
old "While [what!qt], an error occured:"
old "While [what!qt], an error occurred:"
new "En fejl opstod under [what!qt]:"
# game/interface.rpy:407
@@ -1753,7 +1753,7 @@
new "%d. %B, %Y"
# game/updater.rpy:163
old "An error has occured:"
old "An error has occurred:"
new "En fejl er opstået:"
# game/updater.rpy:165
+5 -5
View File
@@ -364,7 +364,7 @@
new "{b}Suositeltu.{/b} Helppokäyttöinen beta-asteella oleva tekstieditori, joka sisältää kehitystä helpottavia toimintoja. Toistaiseksi Editrasta puuttuu täysin kiinalaisen, japanilaisen ja korealaisen tekstin kannatus."
# editor.rpy:167
old "This may have occured because wxPython is not installed on this system."
old "This may have occurred because wxPython is not installed on this system."
new "Tämä saattoi tapahtua, koska wxPythonia ei ole asennettu järjestelmään."
# editor.rpy:169
@@ -380,7 +380,7 @@
new "1.8 MB lataus vaaditaan."
# editor.rpy:182
old "This may have occured because Java is not installed on this system."
old "This may have occurred because Java is not installed on this system."
new "Tämä saattoi tapahtua, koska Javaa ei ole asennettu."
# editor.rpy:191
@@ -392,7 +392,7 @@
new "Estää Ren'Py-ohjelmaa avaamasta tekstieditoria."
# editor.rpy:359
old "An exception occured while launching the text editor:\n[exception!q]"
old "An exception occurred while launching the text editor:\n[exception!q]"
new "Virhe käynnistäessä tekstieditoria:\n[exception!q]"
# editor.rpy:457
@@ -610,7 +610,7 @@
new "VIRHE"
# interface.rpy:356
old "While [what!qt], an error occured:"
old "While [what!qt], an error occurred:"
new "Kun [what!qt], tapahtui virhe:"
# interface.rpy:356
@@ -1138,7 +1138,7 @@
new "Upouudet Ren'Py-kehitysjulkaisut. Voi sisältää uusimmat toiminnot, tai ei ehkä toimi lainkaan."
# updater.rpy:152
old "An error has occured:"
old "An error has occurred:"
new "On tapahtunut virhe:"
# updater.rpy:154
+5 -5
View File
@@ -365,7 +365,7 @@
new "{b}Recommandé.{/b} Un éditeur en version beta avec une interface simple et des fonctionnalités dassistance au développement. Editra manque pour le moment du support pour les textes en chinois, japonais et coréen. Sur GNU-Linux, Editra nécessite wxPython."
# editor.rpy:167
old "This may have occured because wxPython is not installed on this system."
old "This may have occurred because wxPython is not installed on this system."
new "Cela est sans doute dû au fait que wxPython nest pas installé sur votre système."
# editor.rpy:169
@@ -381,7 +381,7 @@
new "1.8 Mo de téléchargement requis."
# editor.rpy:182
old "This may have occured because Java is not installed on this system."
old "This may have occurred because Java is not installed on this system."
new "Cela est sans doute produit parce que Java nest pas installé sur ce système."
# editor.rpy:191
@@ -393,7 +393,7 @@
new "Empêcher RenPy douvrir un éditeur de texte."
# editor.rpy:359
old "An exception occured while launching the text editor:\n[exception!q]"
old "An exception occurred while launching the text editor:\n[exception!q]"
new "Une exception est survenue lors du lancement de l’éditeur de texte :\n[exception!q]"
# editor.rpy:457
@@ -609,7 +609,7 @@
new "ERREUR"
# interface.rpy:356
old "While [what!qt], an error occured:"
old "While [what!qt], an error occurred:"
new "Pendant que [what!qt], une erreur est survenue :"
# interface.rpy:356
@@ -1177,7 +1177,7 @@
new "Une version journalière qui corrige les bugs de la dernière version stable."
# updater.rpy:152
old "An error has occured:"
old "An error has occurred:"
new "Une erreur est survenue :"
# updater.rpy:154
+5 -5
View File
@@ -376,7 +376,7 @@
new "{b}Empfohlen.{/b} Ein Betaeditor mit einer leichten Benutzeroberfläche und Funktionen, die bei der Entwicklung helfen, wie eine Rechtschreibprüfung. Editra fehlt derzeit die Eingabemethode, die für Chinesisch, Japanisch und Koreanisch benötigt wird. Unter Linux benötigt Editra wxPython."
# editor.rpy:167
old "This may have occured because wxPython is not installed on this system."
old "This may have occurred because wxPython is not installed on this system."
new "Dies ist vermutlich passiert, weil wxPython nicht auf Deinem System installiert ist."
# editor.rpy:169
@@ -392,7 +392,7 @@
new "1,8 MB benötigt."
# editor.rpy:182
old "This may have occured because Java is not installed on this system."
old "This may have occurred because Java is not installed on this system."
new "Dies ist vermutlich passiert, weil Java nicht auf Deinem System installiert ist."
# editor.rpy:191
@@ -404,7 +404,7 @@
new "Verhindert, dass Ren'Py einen Texteditor öffnet."
# editor.rpy:359
old "An exception occured while launching the text editor:\n[exception!q]"
old "An exception occurred while launching the text editor:\n[exception!q]"
new "Ein Fehler ist beim Starten des Texteditors aufgetreten:\n[exception!q]"
# editor.rpy:457
@@ -631,7 +631,7 @@
new "FEHLER"
# interface.rpy:356
old "While [what!qt], an error occured:"
old "While [what!qt], an error occurred:"
new "Während [what!qt] ist ein Fehler aufgetreten:"
# interface.rpy:356
@@ -1193,7 +1193,7 @@
new "Die allerneuste Ren'Py Version. Diese enthält die neusten Funktionen, könnte aber auch überhaupt nicht funktionieren."
# updater.rpy:152
old "An error has occured:"
old "An error has occurred:"
new "Ein Fehler ist aufgetreten:"
# updater.rpy:154
+1 -1
View File
@@ -1,4 +1,4 @@
translate german strings:
# screens.rpy:9
+5 -5
View File
@@ -370,7 +370,7 @@
new "{b}Συνιστάται.{/b} Ένας επεξεργαστής κειμένου σε έκδοση beta, με εύκολο περιβάλλον εργασίας και χαραχτηριστικά που σας βοηθούν, όπως π.χ. ορθογραφικό έλεγχο. Ο Editra προς το παρόν δεν υποστηρίζει IME για είσοδο κειμένου σε Κινέζικα, Ιαπωνέζικα και Κορεάτικα. Σε Linux ο Editra απαιτεί το wxPython."
# editor.rpy:167
old "This may have occured because wxPython is not installed on this system."
old "This may have occurred because wxPython is not installed on this system."
new "Αυτό πιθανώς να συνέβη, διότι το wxPython δεν έχει εγκατασταθεί σε αυτό το σύστημα."
# editor.rpy:169
@@ -386,7 +386,7 @@
new "1.8 MB απαιτείται να κατέβει."
# editor.rpy:182
old "This may have occured because Java is not installed on this system."
old "This may have occurred because Java is not installed on this system."
new "Αυτό πιθανώς να συνέβη, διότι η Java δεν έχει εγκατασταθεί σε αυτό το σύστημα."
# editor.rpy:191
@@ -398,7 +398,7 @@
new "Εμποδίζει τη Ren'Py να ανοίξει επεξεργαστή κειμένου."
# editor.rpy:359
old "An exception occured while launching the text editor:\n[exception!q]"
old "An exception occurred while launching the text editor:\n[exception!q]"
new "Μια προγραμματιστική εξαίρεση συνέβει κατά την εκκίνηση του επεξεργαστή κειμένου:\n[exception!q] "
# editor.rpy:457
@@ -624,7 +624,7 @@
new "ΣΦΑΛΜΑ"
# interface.rpy:356
old "While [what!qt], an error occured:"
old "While [what!qt], an error occurred:"
new "Ενόσω [what!qt], συνέβη ένα σφάλμα:"
# interface.rpy:356
@@ -1179,7 +1179,7 @@
new "Η απόλυτη νεώτερη έκδοση της Ren'Py. Μπορεί να έχει τα πιο νέα χαρακτηριστικά, αλλά να μη μπορέι καν να φορτώσει."
# updater.rpy:152
old "An error has occured:"
old "An error has occurred:"
new "Ένα σφάλμα συνέβη:"
# updater.rpy:154
+5 -5
View File
@@ -366,7 +366,7 @@
new "{b}Di Rekomendasikan.{/b} Editor dengan interface yang mudah untuk di gunakan dan fitur yang sesuai dengan development . Saat ini Editra belum mendukung text input IME yang di butuhkan untuk bahasa Cina,Jepang Dan Korea. Pada Linux, Editra memerlikan wxPython."
# editor.rpy:167
old "This may have occured because wxPython is not installed on this system."
old "This may have occurred because wxPython is not installed on this system."
new "Ini mungkin terjadi karena wxPython tidak terpasang di sistem ini."
# editor.rpy:169
@@ -382,7 +382,7 @@
new "1.8 MB download di butuhkan."
# editor.rpy:182
old "This may have occured because Java is not installed on this system."
old "This may have occurred because Java is not installed on this system."
new "Ini mungkin terjadi karena Java tidak terpasang di sistem ini."
# editor.rpy:191
@@ -394,7 +394,7 @@
new "Larang Ren''Py untuk membuka editor text."
# editor.rpy:359
old "An exception occured while launching the text editor:\n[exception!q]"
old "An exception occurred while launching the text editor:\n[exception!q]"
new "Kesalahan terjadi ketika menjalankan editor text: \n[exception!q]"
# editor.rpy:457
@@ -612,7 +612,7 @@
new "KESALAHAN"
# interface.rpy:356
old "While [what!qt], an error occured:"
old "While [what!qt], an error occurred:"
new "Kesalahan terjadi ketika : [what!qt] adalah :"
# interface.rpy:356
@@ -1146,7 +1146,7 @@
new "Update terbaru dari pengembangan Ren'Py. Ini mungikin mempunyai fitur terbaru. Bahkan tidak jalan sama sekali."
# updater.rpy:152
old "An error has occured:"
old "An error has occurred:"
new "Kesalahan telah terjadi:"
# updater.rpy:154
+5 -5
View File
@@ -365,7 +365,7 @@
new "{b}Raccomandato.{/b} Un editor in fase Beta con un'interfaccia facile da usare e funzionalità adatte allo sviluppo come il controllo ortografico. Editra al momento non offre il supporto IMO richiesto per Cinese, Giapponese e Coreano e richiede wxPython su Linux."
# editor.rpy:167
old "This may have occured because wxPython is not installed on this system."
old "This may have occurred because wxPython is not installed on this system."
new "Potrebbe essersi verificato per via dell'assenza di wxPython su questo sistema."
# editor.rpy:169
@@ -381,7 +381,7 @@
new "Verranno scaricati 1.8 MB."
# editor.rpy:182
old "This may have occured because Java is not installed on this system."
old "This may have occurred because Java is not installed on this system."
new "Potrebbe essersi verificato per l'assenza di Java su questo sistema."
# editor.rpy:191
@@ -393,7 +393,7 @@
new "Impedisce a Ren'Py di aprire un editor di testo."
# editor.rpy:359
old "An exception occured while launching the text editor:\n[exception!q]"
old "An exception occurred while launching the text editor:\n[exception!q]"
new "Si è verificata un'eccezione durante il lancio dell'editor:\n[exception!q]"
# editor.rpy:457
@@ -609,7 +609,7 @@
new "ERRORE"
# interface.rpy:356
old "While [what!qt], an error occured:"
old "While [what!qt], an error occurred:"
new "Durante [what!qt], si è verificato un errore:"
# interface.rpy:356
@@ -1141,7 +1141,7 @@
new "La versione più recente di Ren'Py. Potrebbe avere maggiori funzionalità come anche non funzionare affatto."
# updater.rpy:152
old "An error has occured:"
old "An error has occurred:"
new "Si è verificato un errore:"
# updater.rpy:154
+1 -1
View File
@@ -969,7 +969,7 @@ translate japanese strings:
new "ゲームデータがダウンロードされました"
# renpy/common/00updater.rpy:2078
old "An error occured when trying to download game data:"
old "An error occurred when trying to download game data:"
new "ゲームデータダウンロード中にエラーが発生しました:"
# renpy/common/00updater.rpy:2083
+5 -5
View File
@@ -364,7 +364,7 @@
new "{b}推奨{/b} 使いやすいインターフェースと、スペルチュックのような開発を補助する機能を持つベータエディターです。Editra は現在、中国、韓国、日本語の入力に必要な IME のサポートに欠陥があります。Linux では Editra は wxpython を必要とします。"
# editor.rpy:167
old "This may have occured because wxPython is not installed on this system."
old "This may have occurred because wxPython is not installed on this system."
new "このエラーは wxPython がこのシステムにインストールされていないため発生したと思われます。"
# editor.rpy:169
@@ -380,7 +380,7 @@
new "1.8 MB のダウンロードが必要です。"
# editor.rpy:182
old "This may have occured because Java is not installed on this system."
old "This may have occurred because Java is not installed on this system."
new "このエラーは Java がこのシステムにインストールされていないため発生しましたと思われます。"
# editor.rpy:191
@@ -392,7 +392,7 @@
new "Ren'Py のテキストエディターの実行を停止します。"
# editor.rpy:359
old "An exception occured while launching the text editor:\n[exception!q]"
old "An exception occurred while launching the text editor:\n[exception!q]"
new "テキストエディターの選択中にエラーが発生しました:\n[exception!q]"
# editor.rpy:457
@@ -608,7 +608,7 @@
new "エラー"
# interface.rpy:356
old "While [what!qt], an error occured:"
old "While [what!qt], an error occurred:"
new "[what!qt] 中にエラーが発生しました:"
# interface.rpy:356
@@ -1136,7 +1136,7 @@
new "Ren'Py の開発版で極めて不安定です。このバージョンには最新の機能が含まれていますが、全く動かないかもしれません。"
# updater.rpy:152
old "An error has occured:"
old "An error has occurred:"
new "エラーが発生しました。"
# updater.rpy:154
+5 -5
View File
@@ -624,7 +624,7 @@
new "에디트라(Editra)는 현재 중국어, 일본어, 한국어 텍스트를 입력할 때 필요한 IME를 지원하지 않습니다. 리눅스에서, 에디트라는 wxPython이 필요합니다."
# game/editor.rpy:195
old "This may have occured because wxPython is not installed on this system."
old "This may have occurred because wxPython is not installed on this system."
new "wxPython이 설치되지 않아 문제가 발생했을 가능성이 있습니다."
# game/editor.rpy:197
@@ -640,7 +640,7 @@
new "1.8MB 내려받기 필요."
# game/editor.rpy:210
old "This may have occured because Java is not installed on this system."
old "This may have occurred because Java is not installed on this system."
new "자바(Java)가 설치되지 않아 문제가 발생했을 수도 있습니다."
# game/editor.rpy:219
@@ -664,7 +664,7 @@
new "[text] 편집."
# game/editor.rpy:387
old "An exception occured while launching the text editor:\n[exception!q]"
old "An exception occurred while launching the text editor:\n[exception!q]"
new "스크립트 에디터를 실행하던 도중 예외가 발생했습니다:\n[exception!q]"
# game/editor.rpy:519
@@ -1480,7 +1480,7 @@
new "%Y년 %m월 %d일"
# game/updater.rpy:140
old "An error has occured:"
old "An error has occurred:"
new "오류가 발생했습니다:"
# game/updater.rpy:142
@@ -1532,7 +1532,7 @@
new "다음으로"
# game/interface.rpy:394
old "While [what!qt], an error occured:"
old "While [what!qt], an error occurred:"
new "[what!qt]에 오류가 발생했습니다:"
# game/interface.rpy:394
+4 -4
View File
@@ -384,7 +384,7 @@
new "Penyunting matang. Editra tiada sokongan IME yang diperlukan untuk input tulisan bahasa Cina, Jepun, dan Korea. Di Linux, Editra memerlukan wxPython."
# editor.rpy:195
old "This may have occured because wxPython is not installed on this system."
old "This may have occurred because wxPython is not installed on this system."
new "Ini mungkin berlaku kerana wxPython tidak dipasangkan di sistem ini."
# editor.rpy:197
@@ -400,7 +400,7 @@
new "1.8 MB muat turun diperlukan."
# editor.rpy:210
old "This may have occured because Java is not installed on this system."
old "This may have occurred because Java is not installed on this system."
new "Ini munhkin berlaku kerana Java tidak dipasangkan di sistem ini."
# editor.rpy:219
@@ -424,7 +424,7 @@
new "Sunting [text]"
# editor.rpy:387
old "An exception occured while launching the text editor:\n[exception!q]"
old "An exception occurred while launching the text editor:\n[exception!q]"
new "Telah berlakunya pengecualian ralat ketika melancarkan penyunting tulisan:\n[exception!q]"
# editor.rpy:519
@@ -1216,7 +1216,7 @@
new "Penjujuhan pinggir pembangunan Ren'Py. Ini mungkin ada ciri-ciri paling baru, atau mungkin tak boleh dijalankan langsung."
# updater.rpy:158
old "An error has occured:"
old "An error has occurred:"
new "Telah berlakunya ralat:"
# updater.rpy:160
+1 -1
View File
@@ -942,7 +942,7 @@ translate piglatin strings:
new "Hetay amegay ataday ashay eenbay ownloadedday."
# renpy/common/00updater.rpy:2078
old "An error occured when trying to download game data:"
old "An error occurred when trying to download game data:"
new "Naay erroray occureday henway yingtray otay ownloadday amegay ataday:"
# renpy/common/00updater.rpy:2083
+4 -4
View File
@@ -730,7 +730,7 @@ translate piglatin strings:
new "1.8 Bmay ownloadday equiredray."
# game/editor.rpy:214
old "This may have occured because Java is not installed on this system."
old "This may have occurred because Java is not installed on this system."
new "Histay aymay avehay occureday ecausebay Avajay isay otnay installeday onay histay ystemsay."
# game/editor.rpy:228
@@ -762,7 +762,7 @@ translate piglatin strings:
new "Diteay [text]."
# game/editor.rpy:409
old "An exception occured while launching the text editor:\n[exception!q]"
old "An exception occurred while launching the text editor:\n[exception!q]"
new "Naay exceptionay occureday hileway aunchinglay hetay exttay editoray:\n[exception!q]"
# game/editor.rpy:541
@@ -1070,7 +1070,7 @@ translate piglatin strings:
new "openingay hetay oglay ilefay"
# game/interface.rpy:407
old "While [what!qt], an error occured:"
old "While [what!qt], an error occurred:"
new "Hileway [what!qt], anay erroray occureday:"
# game/interface.rpy:407
@@ -1778,7 +1778,7 @@ translate piglatin strings:
new "%Bay %day, %Yay"
# game/updater.rpy:162
old "An error has occured:"
old "An error has occurred:"
new "Naay erroray ashay occureday:"
# game/updater.rpy:164
+4 -4
View File
@@ -632,7 +632,7 @@
new "Wymagane pobieranie 1,8 MB."
# game/editor.rpy:177
old "This may have occured because Java is not installed on this system."
old "This may have occurred because Java is not installed on this system."
new "Problem powstał prawdopodobnie przez brak zainstalowanego oprogramowania Java na tym systemie."
# game/editor.rpy:186
@@ -656,7 +656,7 @@
new "Edytuj [text]."
# game/editor.rpy:354
old "An exception occured while launching the text editor:\n[exception!q]"
old "An exception occurred while launching the text editor:\n[exception!q]"
new "Wystąpił wyjątek podczas uruchamiania edytora tekstu:\n[exception!q]"
# game/editor.rpy:486
@@ -965,7 +965,7 @@
new "Otwieranie pliku dziennika"
# game/interface.rpy:394
old "While [what!qt], an error occured:"
old "While [what!qt], an error occurred:"
new "Podczas [what!qt], wystąpił błąd:"
# game/interface.rpy:394
@@ -1553,7 +1553,7 @@
new "%B %d, %Y"
# game/updater.rpy:140
old "An error has occured:"
old "An error has occurred:"
new "Wystąpił błąd:"
# game/updater.rpy:142
+4 -4
View File
@@ -11,7 +11,7 @@
new "{b}Recomendado.{/b} Um editor beta com uma interface fácil para uso e características que ajudam no desenvolvimento, como correção ortográfica. Editra atualmente carece do suporte IME necessário para textos em Chinês, Japonês e Coreano. No Linux, Editra necessita do wxPython."
# game/editor.rpy:137
old "This may have occured because wxPython is not installed on this system."
old "This may have occurred because wxPython is not installed on this system."
new "Isto pode ter ocorrido porque wxPython não está instalado neste sistema."
# game/editor.rpy:144
@@ -28,7 +28,7 @@
new "Downlod de 1.8 MB é necessário."
# game/editor.rpy:158
old "This may have occured because Java is not installed on this system."
old "This may have occurred because Java is not installed on this system."
new "Isto pode ter ocorrido porque Java não está instalado neste sistema"
# option: "System Editor"
@@ -52,8 +52,8 @@
new "Evita que Ren'Py abra um editor de texto."
# game/editor.rpy:327
old "An exception occured while launching the text editor:\n[exception!q]"
new "Ocorreu uma exceção ao executar o editor de texto:\[exception!q]"
old "An exception occurred while launching the text editor:\n[exception!q]"
new "Ocorreu uma exceção ao executar o editor de texto:\n[exception!q]"
# game/editor.rpy:423
old "Select Editor"
+1 -1
View File
@@ -62,7 +62,7 @@
new "ERRO"
# game/interface.rpy:328
old "While [what!qt], an error occured:"
old "While [what!qt], an error occurred:"
new "Enquanto [what!qt], ocorreu um erro:"
# game/interface.rpy:329
+1 -1
View File
@@ -44,7 +44,7 @@
new "Última versão, ainda instavél, do Ren'Py. Pode ter as últimas características ou pode não funcionar de vez."
# game/updater.rpy:119
old "An error has occured:"
old "An error has occurred:"
new "Um erro ocorreu:"
# game/updater.rpy:121
+1 -1
View File
@@ -1144,7 +1144,7 @@ translate russian strings:
new "Данные игры загружены."
# renpy/common/00updater.rpy:2077
old "An error occured when trying to download game data:"
old "An error occurred when trying to download game data:"
new "При попытке загрузить данные игры произошла ошибка:"
# renpy/common/00updater.rpy:2082
+6 -6
View File
@@ -624,7 +624,7 @@
new "Старый, проверенный бета-редактор. Editra на данный момент не поддерживает IME, необходимые для ввода Китайского, Японского и Корейского текстов. На Linux, Editra требует wxPython."
# editor.rpy:195
old "This may have occured because wxPython is not installed on this system."
old "This may have occurred because wxPython is not installed on this system."
new "Это могло случиться из-за того, что wxPython не установлен на этой системе."
# editor.rpy:197
@@ -640,7 +640,7 @@
new "Требуется скачать 1.8 МБ."
# editor.rpy:210
old "This may have occured because Java is not installed on this system."
old "This may have occurred because Java is not installed on this system."
new "Это могло случиться из-за того, что Java не установлена в данной системе."
# editor.rpy:219
@@ -664,7 +664,7 @@
new "Редактировать [text]"
# editor.rpy:387
old "An exception occured while launching the text editor:\n[exception!q]"
old "An exception occurred while launching the text editor:\n[exception!q]"
new "Возникла ошибка при запуске текстового редактора:\n[exception!q]"
# editor.rpy:519
@@ -1457,7 +1457,7 @@
new "%d %B %Y года"
# updater.rpy:140
old "An error has occured:"
old "An error has occurred:"
new "Возникла ошибка:"
# updater.rpy:142
@@ -1525,7 +1525,7 @@
new "(Бета)"
# interface.rpy:394
old "While [what!qt], an error occured:"
old "While [what!qt], an error occurred:"
new "В процессе выполнения \"[what!qt]\" произошла ошибка:"
# interface.rpy:394
@@ -1874,7 +1874,7 @@
# 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 "Не удалось использовать javac для компиляции тестового файла. Если вы еще не установили Java Development Kit, загрузите его с:\n\n{a=https://adoptium.net/?variant=openjdk8}https://adoptium.net/?variant=openjdk8{/a}\n\JDK отличается от JRE, поэтому возможно, что у вас есть Java без JDK. Пожалуйста, убедитесь, что вы установили 'переменные окружения JavaSoft (Oracle)'.\n\nБез работающего JDK я не могу продолжать."
new "Не удалось использовать javac для компиляции тестового файла. Если вы еще не установили Java Development Kit, загрузите его с:\n\n{a=https://adoptium.net/?variant=openjdk8}https://adoptium.net/?variant=openjdk8{/a}\n\nJDK отличается от JRE, поэтому возможно, что у вас есть Java без JDK. Пожалуйста, убедитесь, что вы установили 'переменные окружения JavaSoft (Oracle)'.\n\nБез работающего JDK я не могу продолжать."
# 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."
+1 -1
View File
@@ -1129,7 +1129,7 @@
new "游戏数据已下载"
# renpy/common/00updater.rpy:2078
old "An error occured when trying to download game data:"
old "An error occurred when trying to download game data:"
new "尝试下载游戏数据时发生错误:"
# renpy/common/00updater.rpy:2083
+4 -4
View File
@@ -697,7 +697,7 @@
new "需要下载 1.8 MB 的文件。"
# game/editor.rpy:200
old "This may have occured because Java is not installed on this system."
old "This may have occurred because Java is not installed on this system."
new "这可能是由于您的系统中尚未安装 Java 造成的。"
# game/editor.rpy:209
@@ -729,7 +729,7 @@
new "编辑 [text]。"
# game/editor.rpy:390
old "An exception occured while launching the text editor:\n[exception!q]"
old "An exception occurred while launching the text editor:\n[exception!q]"
new "启动编辑器时发生异常:\n[exception!q]"
# game/editor.rpy:522
@@ -1037,7 +1037,7 @@
new "打开日志文件"
# game/interface.rpy:399
old "While [what!qt], an error occured:"
old "While [what!qt], an error occurred:"
new "[what!qt]时出错:"
# game/interface.rpy:399
@@ -1697,7 +1697,7 @@
new "%Y-%m-%d"
# game/updater.rpy:157
old "An error has occured:"
old "An error has occurred:"
new "发生错误:"
# game/updater.rpy:159
+2 -2
View File
@@ -884,7 +884,7 @@ translate spanish strings:
# 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 "Puede usar esta ID para descargar su guardado en otro dispositivo.\nEsta sincronización caducará en una hora.\RenPy Sync está para {a=https://www.renpy.org/sponsors.html}los patrocinadores de Ren'Py{/a}."
new "Puede usar esta ID para descargar su guardado en otro dispositivo.\nEsta sincronización caducará en una hora.\nRenPy Sync está para {a=https://www.renpy.org/sponsors.html}los patrocinadores de Ren'Py{/a}."
# renpy/common/00sync.rpy:619
old "Sync Error"
@@ -943,7 +943,7 @@ translate spanish strings:
new "Descarga de los datos del juego."
# renpy/common/00updater.rpy:2078
old "An error occured when trying to download game data:"
old "An error occurred when trying to download game data:"
new "Se ha producido un error al intentar descargar los datos del juego:"
# renpy/common/00updater.rpy:2083
+5 -5
View File
@@ -384,7 +384,7 @@
new "Un editor maduro. Editra carece de soporte IME, necesario para el texto en chino, japonés y coreano. En Linux, Editra necesita wxPython."
# editor.rpy:195
old "This may have occured because wxPython is not installed on this system."
old "This may have occurred because wxPython is not installed on this system."
new "Esto puede haber ocurrido porque wxPython no está instalado en este sistema."
# editor.rpy:197
@@ -400,7 +400,7 @@
new "Requiere descargar 1.8 MB."
# editor.rpy:210
old "This may have occured because Java is not installed on this system."
old "This may have occurred because Java is not installed on this system."
new "Esto puede haber ocurrido porque Java no está instalado en este sistema"
# editor.rpy:219
@@ -424,7 +424,7 @@
new "Editar [text]."
# editor.rpy:387
old "An exception occured while launching the text editor:\n[exception!q]"
old "An exception occurred while launching the text editor:\n[exception!q]"
new "Ha ocurrido una excepción mientras se ejecutaba el editor de texto:\\[exception!q]"
# editor.rpy:519
@@ -1216,7 +1216,7 @@
new "Versión de desarrollo de Ren'Py. Puede tener las últimas características o puede no funcionar."
# updater.rpy:152
old "An error has occured:"
old "An error has occurred:"
new "Ha sucedido un error:"
# updater.rpy:154
@@ -1568,7 +1568,7 @@
new "abriendo el archivo de registro"
# game/interface.rpy:394
old "While [what!qt], an error occured:"
old "While [what!qt], an error occurred:"
new "Mientras que [what!qt], ocurrió un error:"
# game/interface.rpy:394
+1 -1
View File
@@ -738,7 +738,7 @@ translate tchinese strings:
new "遊戲資料已下載。"
# renpy/common/00updater.rpy:2078
old "An error occured when trying to download game data:"
old "An error occurred when trying to download game data:"
new "嘗試下載遊戲資料時發生錯誤:"
# renpy/common/00updater.rpy:2083
+5 -5
View File
@@ -364,7 +364,7 @@
new "{b}推薦{/b} 一個有簡單易用的介面和功能的測試版編輯器能夠幫助開發,例如拼字的校對功能。Editra 現在沒有中文,日文,韓文的輸入功能。在 linux 中 Editra 需要 wxPython(模組支援)。"
# editor.rpy:167
old "This may have occured because wxPython is not installed on this system."
old "This may have occurred because wxPython is not installed on this system."
new "這可能是因為 wxPython 沒有被安裝在當前系統中而發生的。"
# editor.rpy:169
@@ -380,7 +380,7 @@
new "1.8 MB 需要下載。"
# editor.rpy:182
old "This may have occured because Java is not installed on this system."
old "This may have occurred because Java is not installed on this system."
new "這可能是因為 Java 沒有被安裝在當前系統中而發生的。"
# editor.rpy:191
@@ -392,7 +392,7 @@
new "防止 Ren'Py 開啟文字編輯器。"
# editor.rpy:359
old "An exception occured while launching the text editor:\n[exception!q]"
old "An exception occurred while launching the text editor:\n[exception!q]"
new "啟動以下編輯器出現異常:\n[exception!q]"
# editor.rpy:457
@@ -608,7 +608,7 @@
new "錯誤"
# interface.rpy:356
old "While [what!qt], an error occured:"
old "While [what!qt], an error occurred:"
new "[what!qt] 時,出現錯誤:"
# interface.rpy:356
@@ -1136,7 +1136,7 @@
new "Ren'Py 最新的開發版本。這可能會擁有最新的功能,或可能根本無法運作。"
# updater.rpy:152
old "An error has occured:"
old "An error has occurred:"
new "一個錯誤發生:"
# updater.rpy:154
+6 -6
View File
@@ -620,7 +620,7 @@
new "Gelişmiş bir düzenleyici. Editra; Çince, Japonca ve Korece metin girişi için gerekli olan IME desteğinden yoksundur. Linux'ta Editra wxPython gerektirir."
# editor.rpy:195
old "This may have occured because wxPython is not installed on this system."
old "This may have occurred because wxPython is not installed on this system."
new "Bu sistemde wxPython kurulu olmadığı için olabilir."
# editor.rpy:197
@@ -636,7 +636,7 @@
new "1.8 MB indirme gerekir."
# editor.rpy:210
old "This may have occured because Java is not installed on this system."
old "This may have occurred because Java is not installed on this system."
new "Bunun sebebi sistemde Java kurulu olmaması olabilir."
# editor.rpy:219
@@ -660,7 +660,7 @@
new "Düzenle [text]."
# editor.rpy:387
old "An exception occured while launching the text editor:\n[exception!q]"
old "An exception occurred while launching the text editor:\n[exception!q]"
new "Metin düzenleyicisini başlatırken bir hata oluştu:\n[exception!q]"
# editor.rpy:519
@@ -896,7 +896,7 @@
new "HATA"
# interface.rpy:394
old "While [what!q], an error occured:"
old "While [what!q], an error occurred:"
new "[what!q] sırasında bir hata meydana geldi:"
# interface.rpy:394
@@ -1465,7 +1465,7 @@
new "B %d, %Y"
# updater.rpy:140
old "An error has occured:"
old "An error has occurred:"
new "Bir hata meydana geldi:"
# updater.rpy:142
@@ -1913,7 +1913,7 @@ translate turkish strings:
new "günlük dosyasının açılması"
# game/interface.rpy:407
old "While [what!qt], an error occured:"
old "While [what!qt], an error occurred:"
# Automatic translation.
new "[what!qt] adresindeyken bir hata oluştu:"
+76 -66
View File
@@ -1,4 +1,4 @@
translate ukrainian strings:
# 00action_file.rpy:26
@@ -155,7 +155,7 @@ translate ukrainian strings:
# 00action_file.rpy:240
old "%b %d, %H:%M"
new "%b %d, %H:%M"
new "%d %b, %H:%M"
# 00action_file.rpy:353
old "Save slot %s: [text]"
@@ -207,7 +207,7 @@ translate ukrainian strings:
# 00director.rpy:708
old "The interactive director is not enabled here."
new "Інтерактивний режисер тут не ввімкнений."
new "Інтерактивний режисер тут не ввімкнено."
# 00director.rpy:1481
old "⬆"
@@ -223,7 +223,7 @@ translate ukrainian strings:
# 00director.rpy:1561
old "(statement)"
new "(функція)"
new "(оператор)"
# 00director.rpy:1562
old "(tag)"
@@ -235,7 +235,7 @@ translate ukrainian strings:
# 00director.rpy:1564
old "(transform)"
new "(трансформація)"
new "(перетворення)"
# 00director.rpy:1589
old "(transition)"
@@ -247,7 +247,7 @@ translate ukrainian strings:
# 00director.rpy:1602
old "(filename)"
new "(ім’я файла)"
new "(назва файлу)"
# 00director.rpy:1631
old "Change"
@@ -267,7 +267,7 @@ translate ukrainian strings:
# 00director.rpy:1674
old "Statement:"
new "Функція:"
new "Оператор:"
# 00director.rpy:1695
old "Tag:"
@@ -279,7 +279,7 @@ translate ukrainian strings:
# 00director.rpy:1729
old "Transforms:"
new "Трансформації:"
new "Перетворення:"
# 00director.rpy:1748
old "Behind:"
@@ -295,7 +295,7 @@ translate ukrainian strings:
# 00director.rpy:1803
old "Audio Filename:"
new "Ім’я аудіофайлу::"
new "Назва аудіофайлу:"
# 00gui.rpy:370
old "Are you sure?"
@@ -311,7 +311,7 @@ translate ukrainian strings:
# 00gui.rpy:373
old "Loading will lose unsaved progress.\nAre you sure you want to do this?"
new "Завантаження гри приведе до втрати незбереженого прогресу.\nВи дійсно бажаєте це зробити?"
new "Завантаження призведе до втрати незбереженого поступу.\nВи дійсно бажаєте продовжити?"
# 00gui.rpy:374
old "Are you sure you want to quit?"
@@ -319,7 +319,7 @@ translate ukrainian strings:
# 00gui.rpy:375
old "Are you sure you want to return to the main menu?\nThis will lose unsaved progress."
new "Ви дійсно бажаєте повернутися до головного меню?\nЦе призведе до втрати незбереженого прогресу."
new "Ви дійсно бажаєте повернутися до головного меню?\nЦя дія призведе до втрати незбереженого поступу."
# 00gui.rpy:376
old "Are you sure you want to end the replay?"
@@ -331,7 +331,7 @@ translate ukrainian strings:
# 00gui.rpy:378
old "Are you sure you want to skip to the next choice?"
new "Ви дійсно бажаєте пропустити все до наступного вибору?"
new "Ви дійсно бажаєте пропускати до наступного вибору?"
# 00gui.rpy:379
old "Are you sure you want to skip unseen dialogue to the next choice?"
@@ -351,7 +351,7 @@ translate ukrainian strings:
# 00library.rpy:147
old "Clipboard voicing enabled. "
new "Озвучення буфера обміну увімкнено."
new "Озвучення буфера обміну ввімкнено."
# 00library.rpy:148
old "Self-voicing enabled. "
@@ -371,11 +371,11 @@ translate ukrainian strings:
# 00library.rpy:153
old "horizontal scroll"
new "горизонтальне прокручування"
new "горизонтальна прокрутка"
# 00library.rpy:154
old "vertical scroll"
new "вертикальне прокручування"
new "вертикальна прокрутка"
# 00library.rpy:155
old "activate"
@@ -411,7 +411,7 @@ translate ukrainian strings:
# 00preferences.rpy:228
old "skip transitions"
new "пропустити переходи"
new "пропускати переходи"
# 00preferences.rpy:230
old "video sprites"
@@ -423,7 +423,7 @@ translate ukrainian strings:
# 00preferences.rpy:248
old "text speed"
new "швидкість тексту"
new "швидкість друку тексту"
# 00preferences.rpy:256
old "joystick"
@@ -435,19 +435,19 @@ translate ukrainian strings:
# 00preferences.rpy:263
old "skip"
new "пропустити"
new "пропускати"
# 00preferences.rpy:266
old "skip unseen [text]"
new "пропустити весь [text]"
new "пропускати весь [text]"
# 00preferences.rpy:271
old "skip unseen text"
new "пропускати увесь текст"
new "пропускати весь текст"
# 00preferences.rpy:273
old "begin skipping"
new "почати пропускати"
new "почати пропуск"
# 00preferences.rpy:277
old "after choices"
@@ -471,7 +471,7 @@ translate ukrainian strings:
# 00preferences.rpy:310
old "auto-forward after click"
new "перемотка після дотику"
new "перемотка після клацу"
# 00preferences.rpy:319
old "automatic move"
@@ -479,7 +479,7 @@ translate ukrainian strings:
# 00preferences.rpy:328
old "wait for voice"
new "чекати голос"
new "чекати на голос"
# 00preferences.rpy:337
old "voice sustain"
@@ -495,7 +495,7 @@ translate ukrainian strings:
# 00preferences.rpy:364
old "debug voicing"
new "режим налагодження синтезу мови"
new "налагоджувальне озвучення"
# 00preferences.rpy:373
old "emphasize audio"
@@ -507,7 +507,7 @@ translate ukrainian strings:
# 00preferences.rpy:392
old "gl powersave"
new "економія енергії"
new "енергозбереження"
# 00preferences.rpy:398
old "gl framerate"
@@ -523,7 +523,7 @@ translate ukrainian strings:
# 00preferences.rpy:414
old "sound volume"
new "гучність звук. ефектів"
new "гучність звукових ефектів"
# 00preferences.rpy:415
old "voice volume"
@@ -535,7 +535,7 @@ translate ukrainian strings:
# 00preferences.rpy:417
old "mute sound"
new "без звук. ефектів"
new "без звукових ефектів"
# 00preferences.rpy:418
old "mute voice"
@@ -547,19 +547,19 @@ translate ukrainian strings:
# 00preferences.rpy:500
old "Clipboard voicing enabled. Press 'shift+C' to disable."
new "Озвучення буфера обміну увімкнено. Натисніть 'shift+C', щоб вимкнути."
new "Озвучення буфера обміну ввімкнено. Натисніть «Shift+C», щоб вимкнути."
# 00preferences.rpy:502
old "Self-voicing would say \"[renpy.display.tts.last]\". Press 'alt+shift+V' to disable."
new "Синтез мовлення має сказати \"[renpy.display.tts.last]\". Натисніть 'alt+shift+V', щоб вимкнути."
new "Синтез мовлення сказав би «[renpy.display.tts.last]». Натисніть «Alt+Shift+V», щоб вимкнути."
# 00preferences.rpy:504
old "Self-voicing enabled. Press 'v' to disable."
new "Синтез мовлення увімкнено. Натисніть 'v', щоб вимкнути його."
new "Синтез мовлення увімкнено. Натисніть «V», щоб вимкнути."
# _compat\gamemenu.rpym:198
old "Empty Slot."
new "Порожній комірка."
new "Порожня комірка."
# _compat\gamemenu.rpym:355
old "Previous"
@@ -595,7 +595,7 @@ translate ukrainian strings:
# _developer\developer.rpym:51
old "Image Location Picker"
new "Вибір розташування зображень"
new "Вибирач розташування зображень"
# _developer\developer.rpym:53
old "Filename List"
@@ -603,15 +603,15 @@ translate ukrainian strings:
# _developer\developer.rpym:57
old "Show Image Load Log (F4)"
new "Показати журнал завант. зображень (F4)"
new "Показати панель завантаження зображень (F4)"
# _developer\developer.rpym:60
old "Hide Image Load Log (F4)"
new "Сховати журнал завант. зображень (F4)"
new "Сховати панель завантаження зображень (F4)"
# _developer\developer.rpym:63
old "Image Attributes"
new "Атрибути зображення"
new "Атрибути зображень"
# _developer\developer.rpym:90
old "[name] [attributes] (hidden)"
@@ -639,7 +639,7 @@ translate ukrainian strings:
# _developer\developer.rpym:435
old "Right-click or escape to quit."
new "Натисніть ПКМ або Escape, щоб вийти."
new "Натисніть ПКМ або ESC, щоб вийти."
# _developer\developer.rpym:467
old "Rectangle copied to clipboard."
@@ -655,11 +655,11 @@ translate ukrainian strings:
# _developer\developer.rpym:617
old "Textures: [tex_count] ([tex_size_mb:.1f] MB)"
new "Текстури: [tex_count] ([tex_size_mb:.1f] Мб)"
new "Текстури: [tex_count] ([tex_size_mb:.1f] МБ)"
# _developer\developer.rpym:621
old "Image cache: [cache_pct:.1f]% ([cache_size_mb:.1f] MB)"
new "Кеш зображень: [cache_pct:.1f]% ([cache_size_mb:.1f] Мб)"
new "Кеш зображень: [cache_pct:.1f]% ([cache_size_mb:.1f] МБ)"
# _developer\developer.rpym:631
old "✔ "
@@ -671,7 +671,7 @@ translate ukrainian strings:
# _developer\developer.rpym:639
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}✔ передбачене зображення (добре){/color}\n{color=#fcc}✘ раптове зображення (погано){/color}\n{color=#fff}Перетягніть, щоб перемістити.{/color}"
new "\n{color=#cfc}✔ передбачене зображення (добре){/color}\n{color=#fcc}✘ непередбачене зображення (погано){/color}\n{color=#fff}Перетягніть для пересування.{/color}"
# _developer\inspector.rpym:38
old "Displayable Inspector"
@@ -699,7 +699,7 @@ translate ukrainian strings:
# _developer\inspector.rpym:145
old " (no properties affect the displayable)"
new " (на об’єкт не впливають жодні параметри)"
new " (на об’єкт не впливають жодні властивості)"
# _developer\inspector.rpym:147
old " (default properties omitted)"
@@ -767,7 +767,7 @@ translate ukrainian strings:
# 00updater.rpy:1452
old "[u.version] is available. Do you want to install it?"
new "[u.version] доступно. Бажаєте її встановити?"
new "[u.version] доступно. Бажаєте її установити?"
# 00updater.rpy:1454
old "Preparing to download the updates."
@@ -783,7 +783,7 @@ translate ukrainian strings:
# 00updater.rpy:1462
old "The updates have been installed. The program will restart."
new "Оновлення встановлено. Програма буде перезапущена."
new "Оновлення було встановлено. Програму буде перезапущено."
# 00updater.rpy:1464
old "The updates have been installed."
@@ -823,11 +823,11 @@ translate ukrainian strings:
# 00accessibility.rpy:76
old "Font Override"
new "Замінити шрифт"
new "Перевизначення шрифту"
# 00accessibility.rpy:80
old "Default"
new "Стандратний"
new "Стандартний"
# 00accessibility.rpy:84
old "DejaVu Sans"
@@ -859,7 +859,7 @@ translate ukrainian strings:
# 00accessibility.rpy:125
old "Text-to-speech"
new "Перетворення тексту в мовлення"
new "Текст-у-мовлення"
# 00accessibility.rpy:129
old "Clipboard"
@@ -879,7 +879,7 @@ translate ukrainian strings:
# renpy/common/00accessibility.rpy:191
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 "Параметри цього меню призначені для покращення доступності. Вони можуть працювати не з усіма іграми, а деякі комбінації параметрів можуть зробити гру неможливою для гри. Це не є проблемою гри або рушія. Для досягнення найкращих результатів при зміні шрифтів намагайтеся зберігати розмір тексту таким, яким він був спочатку."
new "Параметри цього меню призначені для покращення доступності. Вони можуть працювати не з усіма іграми, а деякі комбінації параметрів можуть зробити гру неможливою для гри. Це не є проблемою гри або рушія. Для отримання кращих результатів при зміні шрифтів намагайтеся зберігати розмір тексту таким, яким він був спочатку."
# renpy/common/00accessibility.rpy:193
old "Self-Voicing Volume Drop"
@@ -919,7 +919,7 @@ translate ukrainian strings:
# renpy/common/00preferences.rpy:535
old "mute main"
new "без основи"
new "без основної гучності"
translate ukrainian strings:
@@ -941,11 +941,11 @@ translate ukrainian strings:
# renpy/common/00director.rpy:1768
old "Click to set transform, right click to add to transform list."
new "Натисніть, щоб встановити трансформацію, натисніть ПКМ, щоб додати до списку трансформацій."
new "Натисніть, щоб установити перетворення, клацніть ПКМ, щоб додати до списку перетворень."
# renpy/common/00director.rpy:1789
old "Click to set, right click to add to behind list."
new "Натисніть, щоб встановити, натисніть ПКМ, щоб додати до списку."
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?"
@@ -953,7 +953,7 @@ translate ukrainian strings:
# 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 "Чи довіряєте ви пристрою, на якому було створено збереження? Ви повинні вибрати «Так», тільки якщо ви є єдиним користувачем пристрою."
new "Чи довіряєте ви пристрою, на якому було створено збереження? Ви повинні натиснути «Так», лише якщо ви є єдиним користувачем пристрою."
# renpy/common/00preferences.rpy:528
old "audio when unfocused"
@@ -961,7 +961,7 @@ translate ukrainian strings:
# renpy/common/00preferences.rpy:537
old "web cache preload"
new "попер. завантаження вебкешу"
new "попереднє завантаження вебкешу"
# renpy/common/00preferences.rpy:552
old "voice after game menu"
@@ -973,7 +973,7 @@ translate ukrainian strings:
# renpy/common/00speechbubble.rpy:349
old "(hide)"
new "(приховати)"
new "(сховати)"
# renpy/common/00sync.rpy:70
old "Sync downloaded."
@@ -985,7 +985,7 @@ translate ukrainian strings:
# renpy/common/00sync.rpy:192
old "The Ren'Py Sync server timed out."
new "Сервер Ren'Py Sync вийшов з ладу."
new "Час під’єднання до Ren'Py Sync закінчився."
# renpy/common/00sync.rpy:194
old "An unknown error occurred while connecting to the Ren'Py Sync server."
@@ -993,11 +993,11 @@ translate ukrainian strings:
# 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."
new "Сервер Ren'Py Sync не має копії цієї синхронізації. Ідентифікатор синхронізації може бути недійсним або його термін дії закінчився."
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."
new "Будь ласка, введіть згенерований вами ідентифікатор синхронізації.\nНіколи не вводьте ідентифікатор синхронізації, який ви не створювали."
new "Введіть згенерований вами ідентифікатор синхронізації.\nНіколи не вводьте не створений вами ідентифікатор синхронізації."
# renpy/common/00sync.rpy:428
old "The sync ID is not in the correct format."
@@ -1013,19 +1013,19 @@ translate ukrainian strings:
# renpy/common/00sync.rpy:476
old "The sync contains a file with an invalid name."
new "Синхронізація містить файл з невірною назвою."
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?"
new "Це завантажить ваші збереження на {a=https://sync.renpy.org}сервер Ren'Py Sync{/a}.\nБажаєте продовжити?"
new "Ця дія вивантажить ваші збереження на {a=https://sync.renpy.org}сервер Ren'Py Sync{/a}.\nБажаєте продовжити?"
# renpy/common/00sync.rpy:558
old "Enter Sync ID"
new "Уведіть ідентифікатор синхронізації"
new "Введіть ідентифікатор синхронізації"
# renpy/common/00sync.rpy:569
old "This will contact the {a=https://sync.renpy.org}Ren'Py Sync Server{/a}."
new "Зв’язок зі {a=https://sync.renpy.org}сервером Ren'Py Sync{/a}."
new "Ця дія зв’яжеться зі {a=https://sync.renpy.org}сервером Ren'Py Sync{/a}."
# renpy/common/00sync.rpy:596
old "Sync Success"
@@ -1047,7 +1047,7 @@ translate ukrainian strings:
# renpy/common/00accessibility.rpy:120
old "Accessibility Menu. Use up and down arrows to navigate, and enter to activate buttons and bars."
new "Меню доступності. Використовуйте стрілки вгору та вниз для навігації, а клавішу «Enter» для активації кнопок та панелей."
new "Меню доступності. Використовуйте стрілки вгору та вниз для навігації, а клавішу Enter для взаємодії між кнопками та смуг."
# renpy/common/00accessibility.rpy:197
old "Self-voicing support is limited when using a touch screen."
@@ -1055,19 +1055,19 @@ translate ukrainian strings:
# renpy/common/00director.rpy:1776
old "Customize director.transforms to add more transforms."
new "Налаштуйте director.transforms, щоб додати більше перетворень."
new "Налаштуйте «director.transforms», щоб додати більше перетворень."
# renpy/common/00director.rpy:1821
old "Click to set."
new "Клацніть для установлення."
new "Клацніть, щоб установити."
# renpy/common/00director.rpy:1822
old "Customize director.transitions to add more transitions."
new "Налаштуйте director.transitions, щоб додати більше переходів."
new "Налаштуйте «director.transitions», щоб додати більше переходів."
# renpy/common/00director.rpy:1845
old "Customize director.audio_channels to add more channels."
new "Налаштуйте director.audio_channels, щоб додати більше каналів."
new "Налаштуйте «director.audio_channels», щоб додати більше каналів."
# renpy/common/00gui.rpy:454
old "Are you sure you want to continue where you left off?"
@@ -1134,13 +1134,23 @@ translate ukrainian strings:
new "Дані гри було завантажено."
# renpy/common/00updater.rpy:2078
old "An error occured when trying to download game data:"
old "An error occurred when trying to download game data:"
new "Виникла помилка при спробі завантажити дані гри:"
# renpy/common/00updater.rpy:2083
old "This game cannot be run until the game data has been downloaded."
new "Цю гру не можна запустити, доки не будуть завантажені дані гри."
new "Цю гру не можна буде запустити, доки не будуть завантажені дані гри."
# renpy/common/00updater.rpy:2090
old "Retry"
new "Повторити"
translate ukrainian strings:
# renpy/common/00translation.rpy:63
old "Translation identifier: [identifier]"
new "Ідентифікатор перекладу: [identifier]"
# renpy/common/00translation.rpy:84
old " translates [tl.filename]:[tl.linenumber]"
new " перекладає [tl.filename]:[tl.linenumber]"
+31 -12
View File
@@ -1,4 +1,4 @@
translate ukrainian strings:
# 00console.rpy:255
@@ -89,8 +89,6 @@ translate ukrainian strings:
old "stack: print the return stack"
new "stack: вивести стек повернення"
translate ukrainian strings:
# renpy/common/_developer/developer.rpym:51
old "Persistent Viewer"
new "Переглядач даних"
@@ -99,15 +97,13 @@ translate ukrainian strings:
old "Speech Bubble Editor (Shift+B)"
new "Редактор мовних бульбашок (Shift+B)"
# renpy/common/00console.rpy:789
old "help: show this help\n help <expr>: show signature and documentation of <expr>"
new "help: показує цю довідку\n help <вираз>: показує підпис та документацію <виразу>"
# renpy/common/_developer/developer.rpym:70
old "Show Translation Info"
new "Показати відомості про переклад"
# 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"
new "У довідці можуть бути недокументовані функції. Будь ласка, перевірте, чи функцію або\nклас, який бажаєте використати, задокументовано.\n\n"
translate ukrainian strings:
# renpy/common/_developer/developer.rpym:73
old "Hide Translation Info"
new "Сховати відомості про переклад"
# renpy/common/_developer/developer.rpym:69
old "Show Translation Identifiers"
@@ -143,8 +139,31 @@ translate ukrainian strings:
# renpy/common/_developer/developer.rpym:612
old "\n{color=#fff}Click to copy.\nDrag to move.{/color}"
new "\n{color=#fff}Клацніть для копіювання.\nПеретягнуть для пересування.{/color}"
new "\n{color=#fff}Клацніть для копіювання.\nПеретягніть для пересування.{/color}"
# renpy/common/_developer/developer.rpym:657
old "Click to open in editor."
new "Клацніть, щоб відкрити в редакторі."
# renpy/common/00console.rpy:725
old "The console is using short representations. To disable this, type 'long', and to re-enable, type 'short'"
new "Консоль використовує короткі представлення. Щоб вимкнути це, введіть 'long', а щоб увімкнути, введіть 'short'"
# renpy/common/00console.rpy:789
old "help: show this help\n help <expr>: show signature and documentation of <expr>"
new "help: показує цю довідку\n help <вираз>: показує підпис та документацію <виразу>"
# 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"
new "У довідці можуть бути недокументовані функції. Будь ласка, перевірте, чи бажана функція або\nклас задокументовано.\n\n"
translate ukrainian strings:
# renpy/common/_developer/developer.rpym:133
old " [name!q] [attributes!q] (hidden)"
new " [name!q] [attributes!q] (приховано)"
# renpy/common/_developer/developer.rpym:137
old " [name!q] [attributes!q]"
new " [name!q] [attributes!q]"
+1 -1
View File
@@ -1,4 +1,4 @@
translate ukrainian strings:
# 00gltest.rpy:70
+12 -9
View File
@@ -1,4 +1,4 @@
translate ukrainian strings:
# gui/game/gui.rpy:2
@@ -13,6 +13,10 @@ translate ukrainian strings:
old "## Calling gui.init resets the styles to sensible default values, and sets the width and height of the game."
new "## Виклик gui.init скидає стилі до розумних значень за замовчуванням і встановлює ширину та висоту гри."
# gui/game/gui.rpy:14
old "## Enable checks for invalid or unstable properties in screens or transforms"
new "## Увімкнути перевірку недійсних або нестабільних властивостей в екранах або перетвореннях"
# gui/game/gui.rpy:17
old "## GUI Configuration Variables"
new "## Змінні конфігурації GUI"
@@ -357,6 +361,10 @@ translate ukrainian strings:
old "## The position, width, and alignment of the label giving the name of the speaking character."
new "## Положення, ширина та вирівнювання мітки, що вказує ім’я персонажа, що говорить."
# gui/game/gui.rpy:347
old "## Additional space to add between history screen entries."
new "## Додатковий простір для додавання між записами на екрані «Історія»."
# gui/game/gui.rpy:352
old "## The position, width, and alignment of the dialogue text."
new "## Позиція, ширина та вирівнювання тексту діалогу."
@@ -435,12 +443,7 @@ translate ukrainian strings:
translate ukrainian strings:
# gui/game/gui.rpy:14
old "## Enable checks for invalid or unstable properties in screens or transforms"
new "## Увімкнути перевірку недійсних або нестабільних властивостей в екранах або перетвореннях"
# gui/game/gui.rpy:331
old "## What to do with unscrollable scrollbars in the game menu. \"hide\" hides them, while None shows them."
new "## Що робити з не прокручуваними смугами прокрутки у меню гри. Параметр «hide» приховує їх, а «None» показує їх."
translate ukrainian strings:
# gui/game/gui.rpy:347
old "## Additional space to add between history screen entries."
new "## Додатковий простір для додавання між записами на екрані «Історія»."
+150 -140
View File
@@ -1,4 +1,4 @@
translate ukrainian strings:
# game/about.rpy:39
@@ -19,7 +19,7 @@ translate ukrainian strings:
# game/add_file.rpy:37
old "The file name may not be empty."
new "Назва файлу не може бути пустою"
new "Назва файлу не може бути пустою."
# game/add_file.rpy:41
old "The filename must have the .rpy extension."
@@ -27,7 +27,7 @@ translate ukrainian strings:
# game/add_file.rpy:50
old "The file already exists."
new "Файл вже існує."
new "Файл уже існує."
# game/add_file.rpy:61
old "# Ren'Py automatically loads all script files ending with .rpy. To use this\n# file, define a label and jump to it from another file.\n"
@@ -47,11 +47,11 @@ translate ukrainian strings:
# game/android.rpy:37
old "RAPT has been installed, but a key hasn't been configured. Please create a new key, or restore android.keystore."
new "RAPT встановлено, але ключ не налаштовано. Створіть новий ключ або відновіть android.keystore."
new "RAPT встановлено, але ключ не налаштовано. Створіть новий ключ або відновіть файл «android.keystore»."
# 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 встановлено, але пакет ключів не налаштовано. Створіть новий ключ або відновіть bundle.keystore."
new "RAPT встановлено, але пакет ключів не налаштовано. Створіть новий ключ або відновіть файл «bundle.keystore»."
# game/android.rpy:39
old "The current project has not been configured. Use \"Configure\" to configure it before building."
@@ -59,7 +59,7 @@ translate ukrainian strings:
# game/android.rpy:40
old "Please select if you want a Play Bundle (for Google Play), or a Universal APK (for sideloading and other app stores)."
new "Виберіть, чи бажаєте ви мати Play Bundle (для Google Play) чи універсальний APK (для стороннього завантаження та інших крамниць застосунків)."
new "Оберіть, чи бажаєте ви зібрати Play Bundle (для Google Play) чи універсальний APK (для стороннього завантаження та інших крамниць застосунків)."
# game/android.rpy:41
old "Choose \"Build\" to build the current project, or attach an Android device and choose \"Build & Install\" to build and install it on the device."
@@ -75,11 +75,11 @@ translate ukrainian strings:
# game/android.rpy:45
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 "Спробує емулювати телевізійну приставку Android, як OUYA або Fire TV.\n\nВведення контролера налаштовано з клавішами зі стрілками, Enter як кнопку «Вибрати», ESC як кнопку «Меню», а PageUp як кнопку «Назад»."
new "Спробує емулювати телевізійну приставку Android, як OUYA або Fire TV.\n\nВведення контролера налаштовано з клавішами стрілками, Enter як кнопку «Вибрати», ESC як кнопку «Меню», а PageUp як кнопку «Назад»."
# game/android.rpy:47
old "Downloads and installs the Android SDK and supporting packages. Optionally, generates the keys required to sign the package."
new "Завантажує та встановлює Android SDK і пакети підтримки. Додатково генерує ключі, необхідні для підписання пакета."
new "Завантажує та встановлює Android SDK й пакети підтримки. Додатково генерує ключі, необхідні для підписання пакета."
# game/android.rpy:48
old "Configures the package name, version, and other information about this project."
@@ -99,7 +99,7 @@ translate ukrainian strings:
# game/android.rpy:52
old "Builds the Android package, installs it on an Android device connected to your computer, then launches the app on your device."
new "Збирає пакет для Android, встановлює його на пристрій Android, підʼєднаний до вашого ПК, а потім запускає застосунок на пристрої Android."
new "Збирає пакет Android, встановлює його на пристрій Android, підʼєднаний до вашого ПК, а потім запускає застосунок на пристрої."
# game/android.rpy:54
old "Retrieves the log from the Android device and writes it to a file."
@@ -115,7 +115,7 @@ translate ukrainian strings:
# game/android.rpy:57
old "Connects to a device over Wi-Fi, on Android 11+."
new "Підключається до пристрою через Wi-Fi, на Android 11+."
new "Під’єднується до пристрою через Wi-Fi, на Android 11+."
# game/android.rpy:58
old "Disconnects a device connected over Wi-Fi."
@@ -135,7 +135,7 @@ translate ukrainian strings:
# game/android.rpy:266
old "Copying Android files to distributions directory."
new "Копіювання файлів Android до теки розповсюдження."
new "Копіювання файлів Android до теки файлів розповсюдження."
# game/android.rpy:335
old "Android: [project.current.display_name!q]"
@@ -191,7 +191,7 @@ translate ukrainian strings:
# game/android.rpy:427
old "Force Recompile"
new "Перекомпілювати"
new "Перекомпілювати проєкт"
# game/android.rpy:444
old "Other:"
@@ -239,7 +239,7 @@ translate ukrainian strings:
# game/android.rpy:576
old "Pairing Host & Port"
new "З’єднання хоста та порту"
new "З’єднання хоста та порт"
# game/android.rpy:592
old "IP Address & Port"
@@ -267,7 +267,7 @@ translate ukrainian strings:
# game/androidstrings.rpy:10
old "Run configure before attempting to build the app."
new "Запустіть конфігурацію перед тим, як спробувати зібрати застосунок."
new "Запустіть конфігурацію перед зібранням застосунок."
# game/androidstrings.rpy:11
old "Updating project."
@@ -295,7 +295,7 @@ translate ukrainian strings:
# game/androidstrings.rpy:17
old "Installing the bundle appears to have failed."
new "Не вдалося встановити пакет."
new "Не вдалося установити пакет."
# game/androidstrings.rpy:18
old "Launching app."
@@ -319,7 +319,7 @@ translate ukrainian strings:
# game/androidstrings.rpy:23
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 "Як назва пакета?\n\nЗазвичай назва має вигляд com.domain.program або com.domain.email.program. Вона може містити лише літери ASCII та крапки. Принаймні одна крапка має бути обов’язково."
new "Як назва пакета?\n\nЗазвичай назва має вигляд «com.domain.program» або «com.domain.email.program». Вона може містити лише літери ASCII та крапки. Принаймні одна крапка має бути обов’язково."
# game/androidstrings.rpy:24
old "The package name may not be empty."
@@ -363,7 +363,7 @@ translate ukrainian strings:
# game/androidstrings.rpy:34
old "How would you like your application to be displayed?"
new "Як би ви хотіли, щоб ваш додаток відображався?"
new "Як би ви хотіли, щоб ваш застосунок відображався?"
# game/androidstrings.rpy:35
old "In landscape orientation."
@@ -455,15 +455,15 @@ translate ukrainian strings:
# game/androidstrings.rpy:58
old "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?"
new "Створення ключа у файлі android.keystore.\n\nВам потрібно створити резервну копію цього файлу. Якщо ви його втратите, ви не зможете оновити ваш застосунок.\n\nВам також потрібно зберігати ключ у безпеці. Якщо зловмисники отримають цей файл, вони зможуть створити підроблені версії вашого застосунка і, можливо, викрасти дані ваших користувачів.\n\nБажаєте зробити резервну копію android.keystore і зберегти її у безпечному місці?"
new "Створення ключа у файлі «android.keystore».\n\nВам потрібно створити резервну копію цього файлу. Якщо ви його втратите, ви не зможете оновити ваш застосунок.\n\nВам також потрібно зберігати ключ у безпеці. Якщо зловмисники отримають цей файл, вони зможуть створити підроблені версії вашого застосунка і, можливо, викрасти дані ваших користувачів.\n\nБажаєте зробити резервну копію «android.keystore» і зберегти її у безпечному місці?"
# game/androidstrings.rpy:59
old "Could not create android.keystore. Is keytool in your path?"
new "Не вдалося створити android.keystore. Чи є keytool у вашому шляху?"
new "Не вдалося створити «android.keystore». Чи є «keytool» у вашому шляху?"
# game/androidstrings.rpy:60
old "I've finished creating android.keystore. Please back it up, and keep it in a safe place."
new "Створення android.keystore завершено. Будь ласка, створіть резервну копію та збережіть її у безпечному місці."
new "Створення «android.keystore» завершено. Будь ласка, створіть резервну копію та збережіть його у безпечному місці."
# game/androidstrings.rpy:61
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?"
@@ -471,15 +471,15 @@ translate ukrainian strings:
# game/androidstrings.rpy:62
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 "Буде створено ключ у файлі bundle.keystore.\n\nВам потрібно створити резервну копію цього файлу. Якщо ви його втратите, ви не зможете оновити ваш застосунок.\n\nВам також потрібно зберігати ключ у безпеці. Якщо зловмисники отримають цей файл, вони зможуть створити підроблені версії вашого застосунка і, можливо, викрасти дані ваших користувачів.\n\nБажаєте зробити резервну копію bundle.keystore і зберегти її у безпечному місці?"
new "Буде створено ключ у файлі «bundle.keystore».\n\nВам потрібно створити резервну копію цього файлу. Якщо ви його втратите, ви не зможете оновити ваш застосунок.\n\nВам також потрібно зберігати ключ у безпеці. Якщо зловмисники отримають цей файл, вони зможуть створити підроблені версії вашого застосунка і, можливо, викрасти дані ваших користувачів.\n\nБажаєте зробити резервну копію «bundle.keystore» і зберегти її у безпечному місці?"
# game/androidstrings.rpy:63
old "Could not create bundle.keystore. Is keytool in your path?"
new "Не вдалося створити bundle.keystore. Чи є keytool у вашому шляху?"
new "Не вдалося створити «bundle.keystore». Чи є «keytool» у вашому шляху?"
# 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 "Відкрито теку, що містить android.keystore та bundle.keystore. Будь ласка, створіть їх резервну копію та зберігайте у безпечному місці."
new "Відкрито теку, що містить «android.keystore» та «bundle.keystore». Створіть їх резервну копію та зберігайте у безпечному місці."
# game/androidstrings.rpy:65
old "It looks like you're ready to start packaging games."
@@ -495,7 +495,7 @@ translate ukrainian strings:
# game/choose_theme.rpy:304
old "Could not change the theme. Perhaps options.rpy was changed too much."
new "Не вдалося змінити тему. Можливо, options.rpy було змінено дуже багато разів."
new "Не вдалося змінити тему. Можливо, файл «options.rpy» було змінено дуже багато разів."
# game/choose_theme.rpy:371
old "Planetarium"
@@ -519,11 +519,11 @@ translate ukrainian strings:
# game/choose_theme.rpy:508
old "changing the theme"
new "зміна теми"
new "зміни теми"
# game/consolecommand.rpy:91
old "INFORMATION"
new "ВІДОМОСТІ"
new "ІНФОРМАЦІЯ"
# game/consolecommand.rpy:91
old "The command is being run in a new operating system console window."
@@ -535,11 +535,11 @@ translate ukrainian strings:
# game/distribute.rpy:516
old "Building distributions failed:\n\nThe build.directory_name variable may not include the space, colon, or semicolon characters."
new "Помилка збірки файлів для розповсюдження:\n\nЗмінна build.directory_name не може містити пробіл, двокрапку або крапку з комою."
new "Помилка збірки файлів розповсюдження:\n\nЗмінна «build.directory_name» не може містити пробіл, двокрапку або крапку з комою."
# game/distribute.rpy:562
old "No packages are selected, so there's nothing to do."
new "Жодні пакети вибрано, створювати нічого."
new "Жодні пакети не вибрано, створювати нічого."
# game/distribute.rpy:574
old "Scanning Ren'Py files..."
@@ -547,7 +547,7 @@ translate ukrainian strings:
# game/distribute.rpy:654
old "All packages have been built.\n\nDue to the presence of permission information, unpacking and repacking the Linux and Macintosh distributions on Windows is not supported."
new "Усі пакети зібрано.\n\nЧерез наявність інформації про дозволи, розпакування та перепакування файлів для розповсюдження Linux та Macintosh у Windows не підтримується."
new "Усі пакети зібрано.\n\nЧерез наявність інформації про дозволи, розпакування та перепакування файлів розповсюдження Linux та Macintosh у Windows не підтримується."
# game/distribute.rpy:857
old "Archiving files..."
@@ -583,7 +583,7 @@ translate ukrainian strings:
# game/distribute.rpy:1675
old "Recompiling all rpy files into rpyc files..."
new "Перекомпіляція усіх файлів .rpy у файли .rpyc..."
new "Перекомпіляція усіх файлів rpy у файли rpyc..."
# game/distribute.rpy:1690
old "Copying files..."
@@ -591,7 +591,7 @@ translate ukrainian strings:
# game/distribute_gui.rpy:157
old "Build Distributions: [project.current.display_name!q]"
new "Збірка файлів для розповсюдження: [project.current.display_name!q]"
new "Збірка файлів розповсюдження: [project.current.display_name!q]"
# game/distribute_gui.rpy:171
old "Directory Name:"
@@ -603,7 +603,7 @@ translate ukrainian strings:
# game/distribute_gui.rpy:185
old "Actions:"
new "Дії:"
new "Дії з проєктом:"
# game/distribute_gui.rpy:193
old "Edit options.rpy"
@@ -611,7 +611,7 @@ translate ukrainian strings:
# game/distribute_gui.rpy:194
old "Add from clauses to calls, once"
new "Додати з класів до викликів, один раз"
new "Один раз додати «from clauses to calls»"
# game/distribute_gui.rpy:195
old "Update old-game"
@@ -639,7 +639,7 @@ translate ukrainian strings:
# game/distribute_gui.rpy:242
old "Add from clauses to calls"
new "Додати з класів для викликів"
new "Додати «from clauses to calls»"
# game/distribute_gui.rpy:247
old "Build"
@@ -647,15 +647,15 @@ translate ukrainian strings:
# game/distribute_gui.rpy:251
old "Adding from clauses to call statements that do not have them."
new "Додавання з класів для виклику операторів, які їх не мають."
new "Додавання «from clauses to call» операторів, які їх не мають."
# game/distribute_gui.rpy:275
old "Errors were detected when running the project. Please ensure the project runs without errors before building distributions."
new "Під час запуску проєкту було виявлено помилки. Будь ласка, переконайтеся, що проєкт працює без помилок, перш ніж збирати дистрибутиви."
new "Під час запуску проєкту було виявлено помилки. Переконайтеся, що проєкт працює без помилок, перш ніж збирати файли розповсюдження."
# game/distribute_gui.rpy:294
old "Your project does not contain build information. Would you like to add build information to the end of options.rpy?"
new "Ваш проєкт не містить інформації про збірку. Бажаєте додати інформацію про збірку в кінець options.rpy?"
new "Ваш проєкт не містить інформації про збірку. Бажаєте додати інформацію про збірку в кінці файлу options.rpy?"
# game/dmgcheck.rpy:50
old "Ren'Py is running from a read only folder. Some functionality will not work."
@@ -663,7 +663,7 @@ translate ukrainian strings:
# game/dmgcheck.rpy:50
old "This is probably because Ren'Py is running directly from a Macintosh drive image. To fix this, quit this launcher, copy the entire %s folder somewhere else on your computer, and run Ren'Py again."
new "Імовірно, це пов’язано з тим, що Ren'Py запускається безпосередньо з образу диска Macintosh. Щоб виправити це, закрийте запускач, скопіюйте усю теку %s кудись на комп’ютері і запустіть Ren'Py знову."
new "Імовірно, це сталося через те, що Ren'Py запускається безпосередньо з образу диска Macintosh. Щоб виправити це, закрийте запускач, скопіюйте усю теку %s кудись на вашому ПК і запустіть Ren'Py знову."
# game/editor.rpy:152
old "A modern editor with many extensions including advanced Ren'Py integration."
@@ -679,7 +679,7 @@ translate ukrainian strings:
# game/editor.rpy:169
old "Up to 110 MB download required."
new "Необхідно завантажити до 110 МБ."
new "Розмір завантаження — до 110 МБ."
# game/editor.rpy:182
old "A modern and approachable text editor."
@@ -691,7 +691,7 @@ translate ukrainian strings:
# game/editor.rpy:196
old "Up to 150 MB download required."
new "Необхідно завантажити до 150 МБ."
new "Розмір завантаження — до 150 МБ."
# game/editor.rpy:211
old "jEdit"
@@ -699,14 +699,14 @@ translate ukrainian strings:
# game/editor.rpy:211
old "A mature editor that requires Java."
new "Розвинутий редактор, який потребує Java."
new "Сталий редактор, який потребує Java."
# game/editor.rpy:211
old "1.8 MB download required."
new "Необхідно завантажити 1,8 МБ."
new "Розмір завантаження — 1,8 МБ."
# game/editor.rpy:211
old "This may have occured because Java is not installed on this system."
old "This may have occurred because Java is not installed on this system."
new "Це могло статися через те, що на цій системі не встановлено Java."
# game/editor.rpy:220
@@ -715,30 +715,30 @@ translate ukrainian strings:
# game/editor.rpy:220
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 "Використовує копію Visual Studio Code, яку ви встановили поза Ren'Py. Рекомендується установити розширення language-renpy, щоб додати підтримку файлів Ren'Py."
new "Використовує копію Visual Studio Code, яку ви встановили не через Ren'Py. Рекомендується установити розширення «language-renpy», щоб додати підтримку файлів Ren'Py."
# game/editor.rpy:226
old "System Editor"
new "Системний редактор"
new "Редактор системи"
# game/editor.rpy:226
old "Invokes the editor your operating system has associated with .rpy files."
new "Викликає редактор, який ваша операційна система пов’язала з файлами .rpy."
new "Відкриває редактор, який ваша операційна система пов’язала з файлами .rpy."
# game/editor.rpy:245
old "None"
new "немає"
new "Немає"
# game/editor.rpy:245
old "Prevents Ren'Py from opening a text editor."
new "Забороняє Ren'Py відкривати текстовий редактор."
new "Запобігає Ren'Py відкривати текстовий редактор."
# game/editor.rpy:352
old "Edit [text]."
new "Редагувати [text]."
# game/editor.rpy:401
old "An exception occured while launching the text editor:\n[exception!q]"
old "An exception occurred while launching the text editor:\n[exception!q]"
new "Під час запуску текстового редактора виникла помилка:\n[exception!q]"
# game/editor.rpy:533
@@ -747,7 +747,7 @@ translate ukrainian strings:
# game/editor.rpy:548
old "A text editor is the program you'll use to edit Ren'Py script files. Here, you can select the editor Ren'Py will use. If not already present, the editor will be automatically downloaded and installed."
new "Текстовий редактор – це програма, яку ви використовуватимете для редагування файлів скриптів Ren'Py. Тут ви можете вибрати редактор, який використовуватиме Ren'Py. Якщо редактор ще не присутній, він буде автоматично завантажений і встановлений."
new "Текстовий редактор – це програма, яку ви будете використовувати для редагування файлів скриптів Ren'Py. Тут ви можете обрати редактор, який буде використовувати Ren'Py. Якщо його ще немає, редактор буде автоматично завантажено й установлено."
# game/front_page.rpy:58
old "PROJECTS:"
@@ -823,7 +823,7 @@ translate ukrainian strings:
# game/front_page.rpy:188
old "Actions"
new "Дії"
new "Дії з проєктом"
# game/front_page.rpy:197
old "Navigate Script"
@@ -847,7 +847,7 @@ translate ukrainian strings:
# game/front_page.rpy:215
old "Build Distributions"
new "Зібрати дистрибутиви"
new "Зібрати файли розповсюдження"
# game/front_page.rpy:217
old "Android"
@@ -867,7 +867,7 @@ translate ukrainian strings:
# game/front_page.rpy:223
old "Generate Translations"
new "Генерувати переклади"
new "Згенерувати переклади"
# game/front_page.rpy:224
old "Extract Dialogue"
@@ -883,11 +883,11 @@ translate ukrainian strings:
# game/gui7.rpy:243
old "Select Accent and Background Colors"
new "Оберіть акцентні та фонові кольори"
new "Оберіть кольори акценту та тла"
# game/gui7.rpy:257
old "Please click on the color scheme you wish to use, then click Continue. These colors can be changed and customized later."
new "Натисніть на колірну схему, яку бажаєте використовувати, а потім натисніть «Продовжити». Ці кольори можна змінити та налаштувати пізніше."
new "Оберіть колірну схему, яку бажаєте використовувати, а потім натисніть «Продовжити». Ці кольори можна змінити та налаштувати пізніше."
# game/gui7.rpy:302
old "{b}Warning{/b}\nContinuing will overwrite customized bar, button, save slot, scrollbar, and slider images.\n\nWhat would you like to do?"
@@ -899,7 +899,7 @@ translate ukrainian strings:
# game/gui7.rpy:302
old "Choose new colors, then regenerate image files."
new "Оберіть нові кольори, а потім регенеруйте файли зображень."
new "Обрати нові кольори, а потім регенерувати файли зображень."
# game/gui7.rpy:302
old "Regenerate the image files using the colors in gui.rpy."
@@ -907,7 +907,7 @@ translate ukrainian strings:
# game/gui7.rpy:333
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 "Яку роздільність має використовувати проєкт? Хоча Ren'Py може масштабувати вікно вгору і вниз, це початковий розмір вікна, розмір, у якому мають бути намальовані ресурси, і розмір, у якому ресурси будуть найчіткішими.\n\nСтандартна роздільність [default_size[0]]x[default_size[1]] є розумним компромісом."
new "Яку роздільність має використовувати проєкт? Хоч Ren'Py може масштабувати вікно вгору і вниз, це буде початковий розмір вікна, розмір, у якому мають бути намальовані ресурси, і розмір, у якому ресурси будуть найчіткішими.\n\nСтандартна роздільність [default_size[0]]x[default_size[1]] є розумним компромісом."
# game/gui7.rpy:333
old "Custom. The GUI is optimized for a 16:9 aspect ratio."
@@ -951,7 +951,7 @@ translate ukrainian strings:
# game/gui7.rpy:428
old "activating the new project"
new "активація нового проєкту"
new "активації нового проєкту"
# game/install.rpy:33
old "Could not install [name!t], as a file matching [zipglob] was not found in the Ren'Py SDK directory."
@@ -963,7 +963,7 @@ translate ukrainian strings:
# game/install.rpy:114
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."
new "На цьому екрані ви можете встановити бібліотеки, які не можна розповсюджувати разом з Ren'Py. Деякі з цих бібліотек можуть вимагати, щоб ви погодилися з ліцензією третьої сторони перед використанням або розповсюдженням."
new "Тут ви можете встановити бібліотеки, які не можуть бути розповсюджені разом з Ren'Py. Деякі з цих бібліотек можуть вимагати, щоб ви погодилися з ліцензією третіх сторін перед використанням або розповсюдженням."
# game/install.rpy:120
old "Install Steam Support"
@@ -1039,7 +1039,7 @@ translate ukrainian strings:
# game/interface.rpy:269
old "Due to package format limitations, non-ASCII file and directory names are not allowed."
new "Через обмеження формату пакетів, назви файлів та тек, що не належать до ASCII, не допускаються."
new "Через обмеження формату пакетів, назви файлів та тек, що не містять символів ASCII, не допускаються."
# game/interface.rpy:365
old "ERROR"
@@ -1050,7 +1050,7 @@ translate ukrainian strings:
new "відкриття файлу журналу"
# game/interface.rpy:399
old "While [what!qt], an error occured:"
old "While [what!qt], an error occurred:"
new "Під час [what!qt] сталася помилка:"
# game/interface.rpy:399
@@ -1071,11 +1071,11 @@ translate ukrainian strings:
# game/interface.rpy:511
old "PROCESSING"
new "ОБРОБКА"
new "ОБРОБЛЕННЯ"
# game/interface.rpy:528
old "QUESTION"
new "ЗАПИТАННЯ"
new "ПИТАННЯ"
# game/interface.rpy:541
old "CHOICE"
@@ -1175,7 +1175,7 @@ translate ukrainian strings:
# game/ios.rpy:404
old "Please choose the Xcode Projects Directory using the directory chooser.\n{b}The directory chooser may have opened behind this window.{/b}"
new "Оберіть теку проєктів Xcode із засобом вибору теки.\n{b}Засіб вибору теки могло бути відкрито за цим вікном.{/b}"
new "Оберіть теку проєктів Xcode через засіб вибору теки.\n{b}Засіб вибору теки міг уже відкритися позаду цього вікна.{/b}"
# game/ios.rpy:409
old "Ren'Py has set the Xcode Projects Directory to:"
@@ -1187,7 +1187,7 @@ translate ukrainian strings:
# game/itch.rpy:91
old "The built distributions could not be found. Please choose 'Build' and try again."
new "Не вдалося знайти зібрані дистрибутиви. Будь ласка, оберіть «Зібрати» і спробуйте ще раз."
new "Не вдалося знайти зібрані файли розповсюдження. Натисніть «Зібрати» і спробуйте ще раз."
# game/itch.rpy:129
old "No uploadable files were found. Please choose 'Build' and try again."
@@ -1203,11 +1203,11 @@ translate ukrainian strings:
# game/itch.rpy:144
old "The name of the itch project has not been set."
new "Назва проєкту itch ще не задано."
new "Назва проєкту itch ще не встановлено."
# game/itch.rpy:144
old "Please {a=https://itch.io/game/new}create your project{/a}, then add a line like \n{vspace=5}define build.itch_project = \"user-name/game-name\"\n{vspace=5} to options.rpy."
new "Будь ласка {a=https://itch.io/game/new}створіть свій проєкт{/a}, а потім додайте рядок на зразок \n{vspace=5}define build.itch_project = \"user-name/game-name \"\n{vspace=5} до файлу options.rpy."
new "Будь ласка, {a=https://itch.io/game/new}створіть проєкт{/a}, а потім додайте рядок типу \n{vspace=5}define build.itch_project = \"ім’я-користувача/назва-гри\"\n{vspace=5} до файлу options.rpy."
# game/mobilebuild.rpy:114
old "{a=%s}%s{/a}"
@@ -1259,23 +1259,27 @@ translate ukrainian strings:
# game/navigation.rpy:203
old "callables"
new "викликані"
new "викликувані"
# game/navigation.rpy:204
old "TODOs"
new "TODO"
# game/navigation.rpy:230
old "Show translation files"
new "Показати файли перекладу"
# game/navigation.rpy:243
old "+ Add script file"
new "+ Додати файл скрипта"
# game/navigation.rpy:251
old "No TODO comments found.\n\nTo create one, include \"# TODO\" in your script."
new "Не знайдено жодного коментаря TODO.\n\nЩоб створити його, включіть «# TODO» у ваш скрипт."
new "Не знайдено жодного коментаря TODO.\n\nЩоб створити його, вставте «# TODO» у ваш скрипт."
# game/navigation.rpy:258
old "The list of names is empty."
new "Список назв порожній."
new "Список імен порожній."
# game/new_project.rpy:38
old "New GUI Interface"
@@ -1291,7 +1295,7 @@ translate ukrainian strings:
# game/new_project.rpy:52
old "Only the legacy theme interface has been translated to your language."
new "На вашу мову перекладено лише інтерфейс старої теми."
new "На вашу мову перекладено лише інтерфейс класичної теми."
# game/new_project.rpy:54
old "Neither interface has been translated to your language."
@@ -1299,15 +1303,15 @@ translate ukrainian strings:
# game/new_project.rpy:63
old "The projects directory could not be set. Giving up."
new "Не вдалося встановити теку проєктів. Здаюся."
new "Не вдалося установити теку проєктів. Здаюся."
# game/new_project.rpy:70
old "Which interface would you like to use? The new GUI has a modern look, supports wide screens and mobile devices, and is easier to customize. Legacy themes might be necessary to work with older example code.\n\n[language_support!t]\n\nIf in doubt, choose the new GUI, then click Continue on the bottom-right."
new "Який інтерфейс ви хотіли б використовувати? Новий інтерфейс має сучасний вигляд, підтримує широкі екрани і мобільні пристрої, і його легше налаштовувати. Старі теми можуть знадобитися для роботи зі старими прикладами коду.\n\n[language_support!t]\n\nЯкщо ви сумніваєтеся, оберіть новий інтерфейс, а потім натисніть «Продовжити» знизу праворуч."
new "Який інтерфейс ви хотіли б використовувати? Новий інтерфейс має сучасний вигляд, підтримує широкі екрани й екрани мобільних пристроїв, і його легше налаштувати. Класичні теми можуть знадобитися для роботи зі старими прикладами коду.\n\n[language_support!t]\n\nЯкщо сумніваєтеся, оберіть новий інтерфейс, а потім натисніть «Продовжити» знизу праворуч."
# game/new_project.rpy:70
old "Legacy Theme Interface"
new "Стара тема інтерфейсу"
new "Класична тема інтерфейсу"
# game/new_project.rpy:77
old "{#language name and font}"
@@ -1343,7 +1347,7 @@ translate ukrainian strings:
# game/new_project.rpy:142
old "Please select a template to use for your new project. The template sets the default font and the user interface language. If your language is not supported, choose 'english'."
new "Будь ласка, оберіть шаблон для нового проєкту. Шаблон установлює стандартний шрифт і мову інтерфейсу. Якщо ваша мова не підтримується, оберіть «english»."
new "Будь ласка, оберіть шаблон для вашого нового проєкту. Шаблон матиме стандартний шрифт і мову інтерфейсу. Якщо ваша мова не підтримується, оберіть «english»."
# game/preferences.rpy:88
old "Launcher Preferences"
@@ -1371,7 +1375,7 @@ translate ukrainian strings:
# game/preferences.rpy:142
old "Not Set"
new "не задано"
new "Не задано"
# game/preferences.rpy:155
old "Text Editor:"
@@ -1443,7 +1447,7 @@ translate ukrainian strings:
# game/preferences.rpy:273
old "Install Libraries:"
new "Установити бібліотеки:"
new "Установлення бібліотек:"
# game/preferences.rpy:299
old "Open launcher project"
@@ -1471,15 +1475,15 @@ translate ukrainian strings:
# game/project.rpy:46
old "After making changes to the script, press shift+R to reload your game."
new "Після внесення змін до скрипту натисніть shift+R, щоб перезавантажити гру."
new "Після внесення змін до скрипту натисніть «Shift+R», щоб перезавантажити гру."
# game/project.rpy:46
old "Press shift+O (the letter) to access the console."
new "Натисніть shift+O (літера), щоб відкрити консоль."
new "Натисніть «Shift+O (літера)» для відкриття консолі."
# game/project.rpy:46
old "Press shift+D to access the developer menu."
new "Натисніть shift+D, щоб відкрити меню розробника."
new "Натисніть «Shift+D» для відкриття меню розробника."
# game/project.rpy:46
old "Have you backed up your projects recently?"
@@ -1491,7 +1495,7 @@ translate ukrainian strings:
# game/project.rpy:280
old "This may be because the project is not writeable."
new "Це може бути пов’язано з тим, що проєкт не може бути записаний."
new "Це може бути пов’язано з тим, що проєкт не доступний для запису."
# game/project.rpy:282
old "Please ensure that your project launches normally before running this command."
@@ -1515,7 +1519,7 @@ translate ukrainian strings:
# game/project.rpy:794
old "This launcher will scan for projects in this directory, will create new projects in this directory, and will place built projects into this directory."
new "Цей запускач буде шукати проєкти у цій теці, створювати нові проєкти у цій теці і розміщувати створені проєкти у цій теці."
new "Цей запускач буде шукати проєкти, створювати нові проєкти й розміщувати створені проєкти у цій теці."
# game/project.rpy:799
old "Ren'Py has set the projects directory to:"
@@ -1527,7 +1531,7 @@ translate ukrainian strings:
# game/translations.rpy:132
old "The language to work with. This should only contain lower-case ASCII characters and underscores."
new "Мова, з якою будете працювати. Вона повинна містити лише малі літери ASCII та символи підкреслення."
new "Мова, з якою будете працювати. Вона повинна містити лише малі літери ASCII та знаки підкреслення."
# game/translations.rpy:158
old "Generate empty strings for translations"
@@ -1535,15 +1539,15 @@ translate ukrainian strings:
# game/translations.rpy:176
old "Generates or updates translation files. The files will be placed in game/tl/[persistent.translate_language!q]."
new "Генерує або оновлює файли перекладу. Файли буде розміщено в теці game/tl/[persistent.translate_language!q]."
new "Генерує або оновлює файли перекладу. Файли буде розміщено в теці «game/tl/[persistent.translate_language!q]»."
# game/translations.rpy:196
old "Extract String Translations"
new "Витягти рядки перекладу"
new "Витягнути переклади рядків"
# game/translations.rpy:198
old "Merge String Translations"
new "Об’єднати рядки перекладу"
new "Об’єднати переклади рядків"
# game/translations.rpy:203
old "Replace existing translations"
@@ -1567,27 +1571,27 @@ translate ukrainian strings:
# game/translations.rpy:263
old "Ren'Py has finished generating [language] translations."
new "Ren'Py завершив генерування перекладів мови: [language]."
new "Ren'Py завершив генерування перекладів для мови: [language]."
# game/translations.rpy:276
old "Ren'Py is extracting string translations..."
new "Ren'Py витягує переклад рядків..."
new "Ren'Py витягує переклади рядків..."
# game/translations.rpy:279
old "Ren'Py has finished extracting [language] string translations."
new "Ren'Py завершив витягування перекладу рядків мови: [language]."
new "Ren'Py завершив витягування перекладів рядків для мови: [language]."
# game/translations.rpy:299
old "Ren'Py is merging string translations..."
new "Ren'Py об’єднує переклад рядків..."
new "Ren'Py об’єднує переклади рядків..."
# game/translations.rpy:302
old "Ren'Py has finished merging [language] string translations."
new "Ren'Py завершив об’єднання перекладу рядків мови: [language]."
new "Ren'Py завершив об’єднання перекладів рядків для мови: [language]."
# game/translations.rpy:313
old "Updating default interface translations..."
new "Оновлення стандартного перекладу інтерфейсу..."
new "Оновлення стандартних перекладів інтерфейсу..."
# game/translations.rpy:342
old "Extract Dialogue: [project.current.display_name!q]"
@@ -1611,11 +1615,11 @@ translate ukrainian strings:
# game/translations.rpy:381
old "Escape quotes and other special characters."
new "Лапки та інші спеціальні символи."
new "Уникати лапки та інші спеціальні символи."
# game/translations.rpy:382
old "Extract all translatable strings, not just dialogue."
new "Витягнути всі рядки, які мона перекласти, а не лише діалоги."
new "Витягнути всі рядки, які можна перекласти, а не лише діалоги."
# game/translations.rpy:391
old "Language (or None for the default language):"
@@ -1647,15 +1651,15 @@ translate ukrainian strings:
# game/updater.rpy:68
old "Prerelease"
new "Попередній випуск"
new "Пре-випуск"
# game/updater.rpy:69
old "Prerelease (Ren'Py 8, Python 3)"
new "Попередній випуск (Ren'Py 8, Python 3)"
new "Пре-випуск (Ren'Py 8, Python 3)"
# game/updater.rpy:70
old "Prerelease (Ren'Py 7, Python 2)"
new "Попередній випуск (Ren'Py 7, Python 2)"
new "Пре-випуск (Ren'Py 7, Python 2)"
# game/updater.rpy:71
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."
@@ -1663,7 +1667,7 @@ translate ukrainian strings:
# game/updater.rpy:73
old "Experimental"
new "Експериментальний"
new "Експериментальна"
# game/updater.rpy:74
old "Experimental versions of Ren'Py. You shouldn't select this channel unless asked by a Ren'Py developer."
@@ -1671,19 +1675,23 @@ translate ukrainian strings:
# game/updater.rpy:76
old "Nightly"
new "Рання"
new "Нічна"
# game/updater.rpy:77
old "Nightly (Ren'Py 8, Python 3)"
new "Рання (Ren'Py 8, Python 3)"
new "Нічна (Ren'Py 8, Python 3)"
# game/updater.rpy:78
old "Nightly (Ren'Py 7, Python 2)"
new "Рання (Ren'Py 7, Python 2)"
new "Нічна (Ren'Py 7, Python 2)"
# game/updater.rpy:79
old "The bleeding edge of Ren'Py development. This may have the latest features, or might not run at all."
new "Крайня точка розробки Ren'Py. Може мати найновіші функції, а може не працювати взагалі."
new "Кривавий край розробки Ren'Py. Може мати найновіші функції, а може не працювати взагалі."
# game/updater.rpy:79
old "A nightly build of fixes to the release version of Ren'Py."
new "Нічна збірка виправлень до випускної версії Ren'Py."
# game/updater.rpy:96
old "Select Update Channel"
@@ -1691,7 +1699,7 @@ translate ukrainian strings:
# game/updater.rpy:107
old "The update channel controls the version of Ren'Py the updater will download."
new "Канал оновлення визначає версію Ren'Py, яку завантажить оновлювач."
new "Канал оновлення контролює версію Ren'Py, яку завантажить оновлювач."
# game/updater.rpy:115
old "• {a=https://www.renpy.org/doc/html/changelog.html}View change log{/a}"
@@ -1703,14 +1711,14 @@ translate ukrainian strings:
# game/updater.rpy:123
old "• This version is installed and up-to-date."
new "• Ця версія встановлена та актуальна."
new "• Цю версію установлено та є актуальною."
# game/updater.rpy:135
old "%B %d, %Y"
new "%d %B, %Y"
# game/updater.rpy:157
old "An error has occured:"
old "An error has occurred:"
new "Сталася помилка:"
# game/updater.rpy:159
@@ -1743,15 +1751,15 @@ translate ukrainian strings:
# game/updater.rpy:173
old "The update has been installed. Ren'Py will restart."
new "Оновлення встановлено. Ren'Py перезапуститься."
new "Оновлення було встановлено. Ren'Py перезапуститься."
# game/updater.rpy:175
old "The update has been installed."
new "Оновлення встановлено."
new "Оновлення було встановлено."
# game/updater.rpy:177
old "The update was cancelled."
new "Оновлення скасовано."
new "Оновлення було скасовано."
# game/updater.rpy:194
old "Ren'Py Update"
@@ -1795,7 +1803,7 @@ translate ukrainian strings:
# game/web.rpy:332
old "Images and music can be downloaded while playing. A 'progressive_download.txt' file will be created so you can configure this behavior."
new "Зображення та музики можуть бути завантажені під час гри. Буде створено файл 'progressive_download.txt', щоб ви могли налаштувати цю поведінку."
new "Зображення та музики можуть бути завантажені під час гри. Буде створено файл «progressive_download.txt», щоб ви могли налаштувати цю поведінку."
# game/web.rpy:336
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."
@@ -1807,21 +1815,21 @@ translate ukrainian strings:
# 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 "Ми відновимо підтримку в майбутньому випуску Ren'Py 8. До того часу використовуйте Ren'Py 7 для підтримки Web."
new "Ми відновимо підтримку в майбутньому випуску Ren'Py 8. До того часу використовуйте Ren'Py 7 для вебпідтримки."
# game/web.rpy:348
old "Before packaging web apps, you'll need to download RenPyWeb, Ren'Py's web support. Would you like to download RenPyWeb now?"
new "Перш ніж створювати пакети вебзастосунки, вам потрібно буде завантажити RenPyWeb, вебпідтримку Ren'Py. Бажаєте завантажити RenPyWeb зараз?"
new "Перш ніж створювати пакети вебзастосунків, вам потрібно буде завантажити RenPyWeb, вебпідтримку Ren'Py. Бажаєте завантажити RenPyWeb зараз?"
translate ukrainian strings:
# game/android.rpy:39
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 встановлено, але ключ не налаштовано. Згенеруйте нові ключі або скопіюйте android.keystore та bundle.keystore до базової теки."
new "RAPT встановлено, але ключ не налаштовано. Згенеруйте нові ключі або скопіюйте «android.keystore» та «bundle.keystore» до базової теки."
# game/android.rpy:46
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 "Спробує емулювати телевізійну приставку Android.\n\nВведення контролера налаштовано з клавішами зі стрілками, Enter як кнопку «Вибрати», ESC як кнопку «Меню», а PageUp як кнопку «Назад»."
new "Спробує емулювати телевізійну приставку Android.\n\nВведення контролера налаштовано з клавішами стрілками, Enter як кнопку «Вибрати», ESC як кнопку «Меню», а PageUp як кнопку «Назад»."
# game/android.rpy:48
old "Downloads and installs the Android SDK and supporting packages."
@@ -1849,7 +1857,7 @@ translate ukrainian strings:
# game/androidstrings.rpy:38
old "Which app store would you like to support in-app purchasing through?"
new "Через яку крамницю застосунків ви хотіли б підтримувати внутрішні покупки?"
new "Через яку крамницю застосунків ви хотіли б підтримувати внутрішні придбання?"
# game/androidstrings.rpy:39
old "Google Play."
@@ -1869,7 +1877,7 @@ translate ukrainian strings:
# game/androidstrings.rpy:63
old "I found an android.keystore file in the rapt directory. Do you want to use this file?"
new "Знайдено файл android.keystore у теці rapt. Бажаєте використовувати цей файл?"
new "Знайдено файл «android.keystore» у теці «rapt». Бажаєте використовувати цей файл?"
# game/androidstrings.rpy:66
old "\n\nSaying 'No' will prevent key creation."
@@ -1877,7 +1885,7 @@ translate ukrainian strings:
# game/androidstrings.rpy:69
old "I found a bundle.keystore file in the rapt directory. Do you want to use this file?"
new "Знайдено файл bundle.keystore у теці rapt. Бажаєте використовувати цей файл?"
new "Знайдено файл «bundle.keystore» у теці «rapt». Бажаєте використовувати цей файл?"
# game/distribute_gui.rpy:231
old "(DLC)"
@@ -1885,18 +1893,12 @@ translate ukrainian strings:
# game/project.rpy:46
old "Lint checks your game for potential mistakes, and gives you statistics."
new "«Lint» перевіряє вашу гру на наявність потенційних помилок і надає вам статистику."
new "Lint перевіряє вашу гру на наявність потенційних помилок і надає вам статистику."
# game/web.rpy:485
old "Creating package..."
new "Створення пакету..."
translate ukrainian strings:
# game/updater.rpy:79
old "A nightly build of fixes to the release version of Ren'Py."
new "Рання збірка виправлень до випуску версії Ren'Py."
translate ukrainian strings:
# game/androidstrings.rpy:46
@@ -1905,7 +1907,7 @@ translate ukrainian strings:
# game/androidstrings.rpy:47
old "The version of Java on your computer does not appear to be JDK [JDK_REQUIREMENT], which is required to build Android apps. If you need to install a newer JDK, you can download it from:\n\n{a=https://adoptium.net/}https://adoptium.net/{/a}, and add it to your PATH.\n\nYou can also set the JAVA_HOME environment variable to use a different version of Java."
new "Версія Java на вашому ПК не є JDK [JDK_REQUIREMENT], яка необхідна для створення застосунків на Android. Якщо вам потрібно встановити новішу версію JDK, ви можете завантажити її з:\n\n{a=https://adoptium.net/}https://adoptium.net/{/a}, і додати до вашої змінни середовища PATH.\n\nВи також можете встановити змінну середовища JAVA_HOME для використання іншої версії Java."
new "Версія Java на вашому ПК не є JDK [JDK_REQUIREMENT], яка необхідна для збірки застосунків на Android. Якщо вам потрібно встановити новішу версію JDK, ви можете завантажити її звідси:\n\n{a=https://adoptium.net/}https://adoptium.net/{/a}, і додати до вашої змінни середовища PATH.\n\nВи також можете встановити змінну середовища JAVA_HOME для використання іншої версії Java."
# game/choose_directory.rpy:72
old "No directory was selected, but one is required."
@@ -1921,11 +1923,11 @@ translate ukrainian strings:
# game/distribute.rpy:543
old "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."
new "Помилка збірки дистрибутивів:\n\nПроєкт є навчальним посібником Ren'Py, який не може поширюватися за межами Ren'Py. Подумайте про використання «Запитання» як тестового проєкту."
new "Помилка збірки файлів розповсюдження:\n\nПроєкт є навчальним посібником Ren'Py, який не може поширюватися за межами Ren'Py. Подумайте про проєкт «Запитання» як тестового проєкту."
# game/distribute.rpy:570
old "This may be derived from build.name and config.version or build.version."
new "Це може бути отримане з build.name та config.version або build.version."
new "Це можна отримати з «build.name» та «config.version» або «build.version»."
# game/distribute.rpy:1606
old "Finishing the [variant] [format] package."
@@ -1933,11 +1935,11 @@ translate ukrainian strings:
# game/editor.rpy:185
old "Atom is deprecated and its bugs are known for corrupting games, using another editor is recommended."
new "Atom застарілий, а його помилки, як відомо, призводять до пошкодження ігор, тому рекомендується використовувати інший редактор."
new "Atom застарілий, а його помилки, як відомо, призводять до пошкодження ігор, тому рекомендуємо використовувати інший редактор."
# game/editor.rpy:214
old "JEdit is deprecated, using another editor is recommended."
new "JEdit застарілий, рекомендується використовувати інший редактор."
new "JEdit застарілий, рекомендуємо використовувати інший редактор."
# game/editor.rpy:607
old "The Atom text editor is no longer supported by its developers. We suggest switching to Visual Studio Code or another editor."
@@ -1945,7 +1947,7 @@ translate ukrainian strings:
# game/editor.rpy:607
old "Select editor now."
new "Обрати редактора зараз."
new "Обрати редактор зараз."
# game/editor.rpy:607
old "Ignore until next launch."
@@ -1955,6 +1957,14 @@ translate ukrainian strings:
old "Do not ask again."
new "Не запитувати знову."
# game/editor.rpy:667
old "You are using an old version of the Ren'Py Language support for Visual Studio Code. Would you like to upgrade?"
new "Ви використовуєте стару версію підтримки мови Ren'Py для Visual Studio Code. Бажаєте оновити версію?"
# game/editor.rpy:667
old "Upgrade."
new "Оновити."
# game/install.rpy:186
old "The {a=https://www.live2d.com/en/download/cubism-sdk/download-native/}Cubism SDK for Native{/a} adds support for displaying Live2D models. Place CubismSdkForNative-{i}version{/i}.zip in the Ren'Py SDK directory, and then click Install. Distributing a game with Live2D requires you to accept a license from Live2D, Inc."
new "{a=https://www.live2d.com/en/download/cubism-sdk/download-native/}Cubism SDK for Native{/a} додає підтримку відображення моделей Live2D. Розмістіть файл CubismSdkForNative-{i}версія{/i}.zip у теку Ren'Py SDK, і натисніть кнопку «Установити». Розповсюдження гри з Live2D вимагає від вас прийняття ліцензії від Live2D, Inc."
@@ -1973,11 +1983,11 @@ translate ukrainian strings:
# game/preferences.rpy:95
old "Lint"
new "Lint"
new "Перевірка скриптів (Lint)"
# game/preferences.rpy:234
old "Game Options:"
new "Параметри гри:"
new "Параметри ігор:"
# game/preferences.rpy:241
old "Skip splashscreen"
@@ -1989,7 +1999,7 @@ translate ukrainian strings:
# game/preferences.rpy:262
old "Restore window position"
new "Відновити положення вікна"
new "Відновлювати позицію вікна"
# game/preferences.rpy:266
old "Prefer RPU updates"
@@ -2001,19 +2011,19 @@ translate ukrainian strings:
# game/preferences.rpy:364
old "Lint toggles:"
new "Lint перемикає:"
new "Параметри перевірки скриптів (Lint):"
# game/preferences.rpy:368
old "Check for orphan/obsolete translations"
new "Перевірка «сирітських» / застарілих перекладів"
new "Перевірка на наявність непотрібних/застарілих перекладів"
# game/preferences.rpy:371
old "Check parameters shadowing reserved names"
new "Перевірка параметрів затінення зарезервованих імен"
new "Перевірка параметрів перезаписування зарезервованих імен"
# game/preferences.rpy:374
old "Print block, word, and character counts by speaking character."
new "Кількість блоків друку, слів і символів за кожним розмовним персонажем."
new "Друкувати кількість блоків, слів і символів кожного персонажа."
# game/preferences.rpy:377
old "Unclosed text tags"
@@ -2021,7 +2031,7 @@ translate ukrainian strings:
# game/preferences.rpy:380
old "Show all unreachable blocks and orphaned translations."
new "Показувати всі недосяжні блоки та «осиротілі» переклади."
new "Показувати всі недосяжні блоки та непотрібні переклади."
# game/project.rpy:776
old "Splashscreen skipped in launcher preferences."
@@ -2029,12 +2039,12 @@ translate ukrainian strings:
# game/updater.rpy:76
old "Nightly Fix"
new "Раннє виправлення"
new "Нічне виправлення"
# game/updater.rpy:77
old "Nightly Fix (Ren'Py 8, Python 3)"
new "Раннє виправлення (Ren'Py 8, Python 3)"
new "Нічне виправлення (Ren'Py 8, Python 3)"
# game/updater.rpy:78
old "Nightly Fix (Ren'Py 7, Python 2)"
new "Раннє виправлення (Ren'Py 7, Python 2)"
new "Нічне виправлення (Ren'Py 7, Python 2)"
+2 -4
View File
@@ -179,7 +179,7 @@ translate ukrainian strings:
# gui/game/options.rpy:183
old "## Classify files as None to exclude them from the built distributions."
new "## Для виключення файлів із збірок для розповсюдження, класифікуйте їх як «None»."
new "## Для виключення файлів із збірки файлів розповсюдження, класифікуйте їх як «None»."
# gui/game/options.rpy:191
old "## To archive files, classify them as 'archive'."
@@ -197,10 +197,8 @@ translate ukrainian strings:
old "## The username and project name associated with an itch.io project, separated by a slash."
new "## Ім’я користувача та назва проєкту, пов’язані з проєктом itch.io, розділені скісною рискою."
translate ukrainian strings:
# 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\"."
new "## Для здійснення покупок у застосунку потрібен ліцензійний ключ Google Play. Його можна знайти в консолі розробника Google Play у розділі «Монетизація» > «Налаштування монетизації» > «Ліцензування»."
new "## Для здійснення внутрішньоігрового придбання потрібен ліцензійний ключ Google Play. Його можна знайти в консолі розробника Google Play у розділі «Монетизація» > «Налаштування монетизації» > «Ліцензування»."
+61 -61
View File
@@ -1,4 +1,4 @@
translate ukrainian strings:
# gui/game/screens.rpy:9
@@ -11,15 +11,15 @@ translate ukrainian strings:
# gui/game/screens.rpy:85
old "## Say screen"
new "## Екран Say"
new "## Екран промови"
# gui/game/screens.rpy:87
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 "## Екран Say використовується для відображення діалогу гравцеві. Він приймає два параметри, who і what, ім’я персонажа, що говорить, і текст, який буде відображатися відповідно. (Параметр who може мати значення None, якщо ім’я не вказано.)"
new "## Екран промови використовується для показу діалогу гравцеві. Він приймає два параметри, «who» та «what», ім’я персонажа й текст, який буде показано відповідно. (Параметр «who» може мати значення «None», якщо ім’я не вказано.)"
# gui/game/screens.rpy:92
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 "## Цей екран має створювати текст, який можна відображати з ідентифікатором «what», оскільки Ren'Py використовує це для керування відображенням тексту. Він також може створювати відображувані елементи з ідентифікаторами «who» та «window» для застосування властивостей стилю."
new "## Цей екран має створювати текст з ідентифікатором «what», оскільки Ren'Py використовує його для керування показу тексту. Він також може створювати елементи з ідентифікаторами «who» та «window» для застосування властивостей стилю."
# gui/game/screens.rpy:96
old "## https://www.renpy.org/doc/html/screen_special.html#say"
@@ -39,11 +39,11 @@ translate ukrainian strings:
# gui/game/screens.rpy:167
old "## This screen is used to display renpy.input. The prompt parameter is used to pass a text prompt in."
new "## Цей екран використовується для відображення renpy.input. Параметр prompt використовується для передачі текстової підказки."
new "## Цей екран використовується для показу «renpy.input». Параметр «prompt» використовується для передачі текстової підказки."
# gui/game/screens.rpy:170
old "## This screen must create an input displayable with id \"input\" to accept the various input parameters."
new "## Цей екран має створити відображуваний вхід з ідентифікатором «input» для прийняття різних вхідних параметрів."
new "## Цей екран має створити введення з ідентифікатором «input» для прийняття різних параметрів введення."
# gui/game/screens.rpy:173
old "## https://www.renpy.org/doc/html/screen_special.html#input"
@@ -55,7 +55,7 @@ translate ukrainian strings:
# gui/game/screens.rpy:202
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 "## Цей екран використовується для відображення вибору в грі, представленого командою 'menu'. Один параметр, 'items' — це список об’єктів, кожен із полями заголовка та дії."
new "## Цей екран використовується для показу ігрових варіантів вибору, представлених оператором «menu». Один параметр, «items», являє собою список об’єктів, кожен з яких має підпис і поле дії."
# gui/game/screens.rpy:206
old "## https://www.renpy.org/doc/html/screen_special.html#choice"
@@ -67,11 +67,11 @@ translate ukrainian strings:
# gui/game/screens.rpy:236
old "## The quick menu is displayed in-game to provide easy access to the out-of-game menus."
new "## Швидке меню відображається в грі, щоб забезпечити легкий доступ до меню поза грою."
new "## Швидке меню показується у грі, щоб забезпечити легкий доступ до меню поза грою."
# gui/game/screens.rpy:241
old "## Ensure this appears on top of other screens."
new "## Переконайтеся, що це відображається поверх інших екранів."
new "## Переконайтеся, що воно показується поверх інших екранів."
# gui/game/screens.rpy:252
old "Back"
@@ -83,7 +83,7 @@ translate ukrainian strings:
# gui/game/screens.rpy:254
old "Skip"
new "Пропустити"
new "Пропускати"
# gui/game/screens.rpy:255
old "Auto"
@@ -107,7 +107,7 @@ translate ukrainian strings:
# gui/game/screens.rpy:262
old "## This code ensures that the quick_menu screen is displayed in-game, whenever the player has not explicitly hidden the interface."
new "## Цей код гарантує, що екран quick_menu відображається в грі, якщо гравець явно не приховав інтерфейс."
new "## Цей код гарантує, що екран «quick_menu» показується у грі, якщо гравець не приховав інтерфейс явно."
# gui/game/screens.rpy:280
old "## Main and Game Menu Screens"
@@ -119,7 +119,7 @@ translate ukrainian strings:
# gui/game/screens.rpy:285
old "## This screen is included in the main and game menus, and provides navigation to other menus, and to start the game."
new "## Цей екран включено в головне та ігрове меню та забезпечує навігацію до інших меню та початок гри."
new "## Цей екран включено в головне та ігрове меню і забезпечує навігацію до інших меню та початку гри."
# gui/game/screens.rpy:300
old "Start"
@@ -147,7 +147,7 @@ translate ukrainian strings:
# gui/game/screens.rpy:324
old "## Help isn't necessary or relevant to mobile devices."
new "## Допомога не є необхідною або актуальною для мобільних пристроїв."
new "## Довідка не є необхідною або доречною для мобільних пристроїв."
# gui/game/screens.rpy:325
old "Help"
@@ -155,7 +155,7 @@ translate ukrainian strings:
# gui/game/screens.rpy:329
old "## The quit button is banned on iOS and unnecessary on Android and Web."
new "## Кнопка виходу заборонена на iOS і непотрібна на Android і в Web."
new "## Кнопка виходу заборонена на iOS й непотрібна на Android та Web."
# gui/game/screens.rpy:330
old "Quit"
@@ -167,7 +167,7 @@ translate ukrainian strings:
# gui/game/screens.rpy:346
old "## Used to display the main menu when Ren'Py starts."
new "## Використовується для відображення головного меню під час запуску Ren'Py."
new "## Використовується для показу головного меню під час запуску Ren'Py."
# gui/game/screens.rpy:348
old "## https://www.renpy.org/doc/html/screen_special.html#main-menu"
@@ -183,19 +183,19 @@ translate ukrainian strings:
# gui/game/screens.rpy:361
old "## The use statement includes another screen inside this one. The actual contents of the main menu are in the navigation screen."
new "## Інструкція використання включає інший екран всередині цього. Фактичний вміст головного меню знаходиться на екрані навігації."
new "## Оператор «use» включає інший екран усередині цього. Фактичний вміст головного меню знаходиться на екрані навігації."
# gui/game/screens.rpy:406
old "## Game Menu screen"
new "## Екран меню гри"
new "## Екран ігрового меню"
# gui/game/screens.rpy:408
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 "## Це описує базову структуру екрана меню гри. Він викликається за допомогою заголовка екрана та відображає тло, заголовок і навігацію."
new "## Тут викладено основну загальну структуру екрана ігрового меню. Він викликається заголовком екрана і показує тло, заголовок і навігацію."
# 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."
new "## Параметр прокручування може бути None або одним із «viewport» чи «vpgrid». Цей екран призначений для використання з одним або декількома об’єктами, які включені (розміщені) всередині нього."
new "## Параметр «scroll» може мати значення «None» або один з «viewport» чи «vpgrid». Цей екран призначений для використання з одним або декількома об’єктами, які включені (розміщені) всередині нього."
# gui/game/screens.rpy:429
old "## Reserve space for the navigation section."
@@ -211,7 +211,7 @@ translate ukrainian strings:
# gui/game/screens.rpy:536
old "## This screen gives credit and copyright information about the game and Ren'Py."
new "## Цей екран містить інформацію про авторство та авторські права щодо гри та Ren'Py."
new "## Цей екран містить інформацію про авторів та авторські права щодо гри та Ren'Py."
# gui/game/screens.rpy:539
old "## There's nothing special about this screen, and hence it also serves as an example of how to make a custom screen."
@@ -219,7 +219,7 @@ translate ukrainian strings:
# gui/game/screens.rpy:546
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 "## Цей оператор використання включає екран «game_menu» всередині цього. Потім дочірній елемент «vbox» включається в область перегляду всередині екрана «game_menu»."
new "## Цей оператор «use» включає екран «game_menu» всередині цього. Потім дочірній елемент «vbox» буде включено до «viewport» всередині екрана «game_menu»."
# gui/game/screens.rpy:556
old "Version [config.version!t]\n"
@@ -227,7 +227,7 @@ translate ukrainian strings:
# gui/game/screens.rpy:558
old "## gui.about is usually set in options.rpy."
new "## «gui.about» зазвичай встановлюється в «options.rpy»."
new "## Значення «gui.about» зазвичай задається у файлі «options.rpy»."
# gui/game/screens.rpy:562
old "Made with {a=https://www.renpy.org/}Ren'Py{/a} [renpy.version_only].\n\n[renpy.license!t]"
@@ -259,7 +259,7 @@ translate ukrainian strings:
# gui/game/screens.rpy:604
old "## This ensures the input will get the enter event before any of the buttons do."
new "## Це гарантує, що введення отримає подію «enter» раніше, ніж будь-яка кнопка."
new "## Це гарантує, що введення отримає подію входу раніше, ніж будь-яка кнопка."
# gui/game/screens.rpy:608
old "## The page name, which can be edited by clicking on a button."
@@ -267,11 +267,11 @@ translate ukrainian strings:
# gui/game/screens.rpy:620
old "## The grid of file slots."
new "## Сітка комірок для файлів."
new "## Сітка комірок збережень."
# gui/game/screens.rpy:640
old "{#file_time}%A, %B %d %Y, %H:%M"
new "{#file_time}%A, %B %d %Y, %H:%M"
new "{#file_time}%A, %d %B %Y, %H:%M"
# gui/game/screens.rpy:640
old "empty slot"
@@ -279,7 +279,7 @@ translate ukrainian strings:
# gui/game/screens.rpy:648
old "## Buttons to access other pages."
new "## Кнопки для доступу до інших сторінок."
new "## Кнопки для відкриття інших сторінок."
# gui/game/screens.rpy:657
old "<"
@@ -295,7 +295,7 @@ translate ukrainian strings:
# gui/game/screens.rpy:665
old "## range(1, 10) gives the numbers from 1 to 9."
new "## range(1, 10) дає числа від 1 до 9."
new "## range(1, 10) повертає числа від 1 до 9."
# gui/game/screens.rpy:669
old ">"
@@ -339,11 +339,11 @@ translate ukrainian strings:
# gui/game/screens.rpy:737
old "## Additional vboxes of type \"radio_pref\" or \"check_pref\" can be added here, to add additional creator-defined preferences."
new "## Сюди можна долучити додаткові вікна vbox типу «radio_pref» або «check_pref», щоб долучити додаткові параметри, визначені творцем."
new "## Сюди можна додати додаткові vbox типу «radio_pref» або «check_pref», щоб додати додаткові налаштування, визначені автором."
# gui/game/screens.rpy:748
old "Text Speed"
new "Швидкість тексту"
new "Швидкість друку тексту"
# gui/game/screens.rpy:752
old "Auto-Forward Time"
@@ -355,7 +355,7 @@ translate ukrainian strings:
# gui/game/screens.rpy:766
old "Sound Volume"
new "Гучність звук. ефектів"
new "Гучність звукових ефектів"
# gui/game/screens.rpy:772
old "Test"
@@ -375,7 +375,7 @@ translate ukrainian strings:
# gui/game/screens.rpy:865
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 "## Це екран, на якому гравцеві відображається історія діалогів. Хоча в цьому екрані немає нічого особливого, він має доступ до історії діалогів, що зберігається в _history_list."
new "## Це екран, на якому гравцеві буде показано історію діалогів. Хоч й в цьому екрані немає нічого особливого, він має мати доступ до історії діалогів, що зберігається в «_history_list»."
# gui/game/screens.rpy:869
old "## https://www.renpy.org/doc/html/history.html"
@@ -383,15 +383,15 @@ translate ukrainian strings:
# gui/game/screens.rpy:875
old "## Avoid predicting this screen, as it can be very large."
new "## Не намагайтеся передбачити цей екран, оскільки він може бути дуже великим."
new "## Уникайте виклику цього екрану, оскільки він може бути дуже великим."
# gui/game/screens.rpy:886
old "## This lays things out properly if history_height is None."
new "## Тут все буде правильно, якщо history_height дорівнює None."
new "## Тут усе буде показано правильно, якщо «history_height» дорівнює «None»."
# gui/game/screens.rpy:896
old "## Take the color of the who text from the Character, if set."
new "## Бере колір тексту who з Character, якщо він заданий."
new "## Бере колір тексту «who» з «Character», якщо він заданий."
# gui/game/screens.rpy:905
old "The dialogue history is empty."
@@ -399,7 +399,7 @@ translate ukrainian strings:
# gui/game/screens.rpy:908
old "## This determines what tags are allowed to be displayed on the history screen."
new "## Це визначає теги, які можна відображати на екрані історії."
new "## Визначає, які теги дозволено показувати на екрані історії."
# gui/game/screens.rpy:953
old "## Help screen"
@@ -407,7 +407,7 @@ translate ukrainian strings:
# gui/game/screens.rpy:955
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 "## Екран, що надає інформацію про прив’язку клавіш і миші. Він використовує інші екрани (keyboard_help, mouse_help і gamepad_help), щоб відобразити фактичну довідку."
new "## Екран, що надає інформацію про призначення клавіш і миші. Він використовує інші екрани (keyboard_help, mouse_help та gamepad_help), щоб показати саму довідку."
# gui/game/screens.rpy:974
old "Keyboard"
@@ -439,7 +439,7 @@ translate ukrainian strings:
# gui/game/screens.rpy:999
old "Arrow Keys"
new "Клавіші зі стрілками"
new "Клавіші стрілок"
# gui/game/screens.rpy:1000
old "Navigate the interface."
@@ -451,7 +451,7 @@ translate ukrainian strings:
# gui/game/screens.rpy:1004
old "Accesses the game menu."
new "Доступ до меню гри."
new "Відкриває ігрове меню."
# gui/game/screens.rpy:1007
old "Ctrl"
@@ -467,7 +467,7 @@ translate ukrainian strings:
# gui/game/screens.rpy:1012
old "Toggles dialogue skipping."
new "Вмикає пропуск діалогу."
new "Перемикає пропуск діалогу."
# gui/game/screens.rpy:1015
old "Page Up"
@@ -475,7 +475,7 @@ translate ukrainian strings:
# gui/game/screens.rpy:1016
old "Rolls back to earlier dialogue."
new "Відкат до попереднього діалогу."
new "Відкатує до попереднього діалогу."
# gui/game/screens.rpy:1019
old "Page Down"
@@ -483,7 +483,7 @@ translate ukrainian strings:
# gui/game/screens.rpy:1020
old "Rolls forward to later dialogue."
new "Перехід до наступного діалогу."
new "Переходить до наступного діалогу."
# gui/game/screens.rpy:1024
old "Hides the user interface."
@@ -503,15 +503,15 @@ translate ukrainian strings:
# gui/game/screens.rpy:1042
old "Left Click"
new "ЛКМ"
new "Ліва кнопка миші"
# gui/game/screens.rpy:1046
old "Middle Click"
new "СКМ"
new "Середня кнопка миші"
# gui/game/screens.rpy:1050
old "Right Click"
new "ПКМ"
new "Права кнопка миші"
# gui/game/screens.rpy:1054
old "Mouse Wheel Up"
@@ -523,7 +523,7 @@ translate ukrainian strings:
# gui/game/screens.rpy:1065
old "Right Trigger\nA/Bottom Button"
new "Правий тригер\nA/Нижня кнопка"
new "Правий тригер\nКнопка A/Униз"
# gui/game/screens.rpy:1069
old "Left Trigger\nLeft Shoulder"
@@ -535,7 +535,7 @@ translate ukrainian strings:
# gui/game/screens.rpy:1078
old "D-Pad, Sticks"
new "Хрестовина, Стики"
new "Хрестовина, стики"
# gui/game/screens.rpy:1082
old "Start, Guide"
@@ -543,7 +543,7 @@ translate ukrainian strings:
# gui/game/screens.rpy:1086
old "Y/Top Button"
new "Y/Верхня кнопка"
new "Кнопка Y/Угору"
# gui/game/screens.rpy:1089
old "Calibrate"
@@ -551,7 +551,7 @@ translate ukrainian strings:
# gui/game/screens.rpy:1098
old "Start, Guide, B/Right Button"
new "Кнопка Start, Guide, B/Управо"
new "Start, Guide, Кнопка B/Управо"
# gui/game/screens.rpy:1117
old "## Additional screens"
@@ -563,7 +563,7 @@ translate ukrainian strings:
# gui/game/screens.rpy:1123
old "## The confirm screen is called when Ren'Py wants to ask the player a yes or no question."
new "## Екран підтвердження викликається, коли Ren'Py хоче поставити гравцеві запитання «Так» або «Ні»."
new "## Екран підтвердження викликається, коли Ren'Py хоче поставити гравцеві запитання з відповіддю «Так» або «Ні»."
# gui/game/screens.rpy:1126
old "## https://www.renpy.org/doc/html/screen_special.html#confirm"
@@ -571,7 +571,7 @@ translate ukrainian strings:
# gui/game/screens.rpy:1130
old "## Ensure other screens do not get input while this screen is displayed."
new "## Переконайтеся, що інші екрани не отримують введення, поки відображається цей екран."
new "## Переконайтеся, що на інші екранах не отримується введення під час показу цього екрана."
# gui/game/screens.rpy:1154
old "Yes"
@@ -583,7 +583,7 @@ translate ukrainian strings:
# gui/game/screens.rpy:1157
old "## Right-click and escape answer \"no\"."
new "## Клацніть ПКМ та вийдіть із відповіді «Ні»."
new "## Клацніть ПКМ й оберіть відповідь «Ні»."
# gui/game/screens.rpy:1184
old "## Skip indicator screen"
@@ -591,7 +591,7 @@ translate ukrainian strings:
# gui/game/screens.rpy:1186
old "## The skip_indicator screen is displayed to indicate that skipping is in progress."
new "## Екран skip_indicator відображається, щоб вказати, що триває пропуск."
new "## Екран «skip_indicator» показується, що вказати на те, що виконується пропуск."
# gui/game/screens.rpy:1189
old "## https://www.renpy.org/doc/html/screen_special.html#skip-indicator"
@@ -603,19 +603,19 @@ translate ukrainian strings:
# gui/game/screens.rpy:1208
old "## This transform is used to blink the arrows one after another."
new "## Це перетворення використовується для миготіння стрілок одна за одною."
new "## Це перетворення використовується для блимання стрілок одна за одною."
# gui/game/screens.rpy:1235
old "## We have to use a font that has the BLACK RIGHT-POINTING SMALL TRIANGLE glyph in it."
new "## Ми повинні використовувати шрифт із гліфом МАЛЕНЬКИЙ ЧОРНИЙ ТРИКУТНИК ВПРАВО."
new "## Ми маємо використовувати шрифт, в якому є гліф «BLACK RIGHT-POINTING SMALL TRIANGLE»."
# gui/game/screens.rpy:1240
old "## Notify screen"
new "## Екран сповіщень"
new "## Екран оповіщення"
# gui/game/screens.rpy:1242
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 "## Екран сповіщень використовується, щоб показати гравцеві повідомлення. (Наприклад, коли гра швидко збережена або зроблено знімок екрана.)"
new "## Екран оповіщення використовується, щоб показати гравцеві повідомлення. (Наприклад, коли гру збережено або зроблено знімок екрана)."
# gui/game/screens.rpy:1245
old "## https://www.renpy.org/doc/html/screen_special.html#notify-screen"
@@ -635,15 +635,15 @@ translate ukrainian strings:
# gui/game/screens.rpy:1294
old "## Displays dialogue in either a vpgrid or the vbox."
new "## Відображає діалог у vpgrid або vbox."
new "## Показує діалог у типі «vpgrid» або «vbox»."
# gui/game/screens.rpy:1307
old "## Displays the menu, if given. The menu may be displayed incorrectly if config.narrator_menu is set to True."
new "## Відображає меню, якщо є. Меню може відображатися неправильно, якщо для config.narrator_menu задано значення True."
new "## Показує меню, якщо його задано. Меню може показуватися некоректно, якщо «config.narrator_menu» має значення «True»."
# gui/game/screens.rpy:1337
old "## This controls the maximum number of NVL-mode entries that can be displayed at once."
new "## Це визначає максимальну кількість записів у режимі NVL, які можуть бути відображені одночасно."
new "## Цей параметр контролює максимальну кількість реплік у режимі NVL, які можуть бути показані одночасно."
# gui/game/screens.rpy:1399
old "## Mobile Variants"
@@ -669,11 +669,11 @@ translate ukrainian strings:
# gui/game/screens.rpy:1410
old "## Bubble screen"
new "## Екран з бульбашками"
new "## Екран бульбашок"
# 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 "## Екран бульбашок використовується для показу діалогу гравцеві під час використання мовних бульбашок. Екран бульбашок має ті самі параметри, що й екран слів, має створювати елемент відображення з ідентифікатором «what», а також може створювати елементи відображення з ідентифікаторами «namebox», «who» і «window»."
new "## Екран бульбашок використовується для показу діалогу гравцеві під час використання мовних бульбашок. Екран бульбашок має ті самі параметри, що й екран промови, має створювати об’єкт з ідентифікатором «what», а також може створювати об’єкти з ідентифікаторами «namebox», «who» і «window»."
# gui/game/screens.rpy:1417
old "## https://www.renpy.org/doc/html/bubble.html#bubble-screen"
+9 -9
View File
@@ -1,7 +1,7 @@
# У цьому файлі міститься скрипт гри.
# У цьому файлі міститься сценарій гри.
# Оголошення персонажів, які використовуються в цій грі. Колірний аргумент розфарбовує
# ім’я персонажа.
# Визначення персонажів для гри.
# Аргумент color змінює колір ім’я персонажа.
define e = Character("Ейлін")
@@ -10,23 +10,23 @@ define e = Character("Ейлін")
label start:
# Це показує тло. За стандратом використовується заповнювач, але ви можете
# Показ тла. Типово використовується заповнювач, але ви можете
# додати файл (з назвою «bg room.png» або «bg room.jpg») до
# теки images, щоб показати його.
scene bg room
# Це показує спрайт персонажа. Використовується заповнювач, але ви можете
# замінити його, додавши до зображень файл із назвою «eileen happy.png».
# до теки.
# Наступний рядок показує спрайт персонажа. Тут використано заповнювач,
# але ви можете замінити його, додавши файл з назвою «eileen happy.png»,
# до теки images.
show eileen happy
# Це репліки діалогу.
# Ці рядки показують репліки діалогу.
e "Ви створили нову гру Ren'Py."
e "Додавши історію, зображення та музику, ви можете оприлюднити це світові!"
e "Додавши сюжет, зображення та музику, ви зможете оприлюднити її світові!"
# На цьому гра закінчується.
+5 -5
View File
@@ -364,7 +364,7 @@
new "{b}Khuyến khích{/b} Một trình biên tập có giao diện thân thiện và chức năng hỗ trợ phát triển, chẳng hạn như kiểm tra lỗi chính tả. Editra hiện đang thiếu sự hỗ trợ IME cần thiết để nhập văn bản Trung Quốc, Nhật Bản, và Hàn Quốc. Với Linux Editra cần thêm wxPython."
# editor.rpy:167
old "This may have occured because wxPython is not installed on this system."
old "This may have occurred because wxPython is not installed on this system."
new "Lỗi xảy ra có thể là do wxPython chưa được cài đặt vào hệ thống."
# editor.rpy:169
@@ -380,7 +380,7 @@
new "Cần tải về 1.8 MB tập tin"
# editor.rpy:182
old "This may have occured because Java is not installed on this system."
old "This may have occurred because Java is not installed on this system."
new "Lỗi xảy ra có thể là do Java chưa được cài đặt vào hệ thống."
# editor.rpy:191
@@ -392,7 +392,7 @@
new "Chặn Ren'py mở một trình biên tập văn bản"
# editor.rpy:359
old "An exception occured while launching the text editor:\n[exception!q]"
old "An exception occurred while launching the text editor:\n[exception!q]"
new "Một lỗi xuất hiện khi đang mở trình biên tập văn bản:\n[exception!q]"
# editor.rpy:457
@@ -608,7 +608,7 @@
new "LỖI"
# interface.rpy:356
old "While [what!qt], an error occured:"
old "While [what!qt], an error occurred:"
new "Trong khi [what!qt], một lỗi xảy ra:"
# interface.rpy:356
@@ -1136,7 +1136,7 @@
new "Rìa gần nhất tới sự phát triển của Ren'Py. Nó có thể chứa các tính năng mới nhất hoặc chẳng chạy được luôn."
# updater.rpy:152
old "An error has occured:"
old "An error has occurred:"
new "Một lỗi đã xảy ra:"
# updater.rpy:154
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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
@@ -159,7 +159,7 @@ screen updater:
has vbox
if u.state == u.ERROR:
text _("An error has occured:")
text _("An error has occurred:")
elif u.state == u.CHECKING:
text _("Checking for updates.")
elif u.state == u.UPDATE_NOT_AVAILABLE:
+3 -3
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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
@@ -55,7 +55,7 @@ init -1 python in util:
for subdir, directories, files in os.walk(directory):
for fn in directories:
if not isinstance(fn, unicode):
if not isinstance(fn, str):
continue
fullfn = os.path.join(subdir, fn)
@@ -66,7 +66,7 @@ init -1 python in util:
yield relfn, True
for fn in files:
if not isinstance(fn, unicode):
if not isinstance(fn, str):
continue
fullfn = os.path.join(subdir, fn)
+11 -16
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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
@@ -440,13 +440,12 @@ init python:
# Find the presplash and copy it over.
presplash = None
if not PY2:
for fn in [ "web-presplash.png", "web-presplash.jpg", "web-presplash.webp" ]:
fullfn = os.path.join(project.current.path, fn)
for fn in [ "web-presplash.png", "web-presplash.jpg", "web-presplash.webp" ]:
fullfn = os.path.join(project.current.path, fn)
if os.path.exists(fullfn):
presplash = fn
break
if os.path.exists(fullfn):
presplash = fn
break
if presplash:
os.unlink(os.path.join(destination, "web-presplash.jpg"))
@@ -456,20 +455,16 @@ init python:
with io.open(os.path.join(WEB_PATH, "index.html"), encoding='utf-8') as f:
html = f.read()
if PY2:
html = html.replace("%%TITLE%%", display_name)
else:
html = html.replace("Ren'Py Web Game", display_name)
html = html.replace("Ren'Py Web Game", display_name)
if presplash:
html = html.replace("web-presplash.jpg", presplash)
if presplash:
html = html.replace("web-presplash.jpg", presplash)
with io.open(os.path.join(destination, "index.html"), "w", encoding='utf-8') as f:
f.write(html)
if not PY2:
generate_web_icons(p, destination)
prepare_pwa_files(p, destination)
generate_web_icons(p, destination)
prepare_pwa_files(p, destination)
# Zip up the game.
+12 -1
View File
@@ -17,6 +17,8 @@ root = ""
import renpy
class BannedException(Exception):
pass
class WebHandler(http.server.BaseHTTPRequestHandler):
@@ -59,7 +61,13 @@ class WebHandler(http.server.BaseHTTPRequestHandler):
None, in which case the caller has nothing further to do.
"""
path = self.translate_path(self.path)
try:
path = self.translate_path(self.path)
except BannedException:
self.send_error(403, "File not found")
return None
f = None
if os.path.isdir(path):
parts = urllib.parse.urlsplit(self.path)
@@ -192,6 +200,9 @@ class WebHandler(http.server.BaseHTTPRequestHandler):
path = root
for word in words:
if word.startswith("."):
raise BannedException("Invalid path.")
if os.path.dirname(word) or word in (os.curdir, os.pardir):
# Ignore components that are not a simple file/directory name
continue
-45
View File
@@ -1,45 +0,0 @@
_renpy gen/_renpy.c IMG_savepng.c core.c
_renpybidi gen/_renpybidi.c renpybidicore.c
renpy.audio.renpysound gen/renpy.audio.renpysound.c renpysound_core.c ffmedia.c
renpy.audio.filter gen/renpy.audio.filter.c
renpy.lexersupport gen/renpy.lexersupport.c
renpy.pydict gen/renpy.pydict.c
renpy.style gen/renpy.style.c
renpy.encryption gen/renpy.encryption.c
renpy.compat.dictviews gen/renpy.compat.dictviews.c
renpy.styledata.styleclass gen/renpy.styledata.styleclass.c
renpy.styledata.stylesets gen/renpy.styledata.stylesets.c
renpy.styledata.style_selected_hover_functions gen/renpy.styledata.style_selected_hover_functions.c
renpy.styledata.style_selected_idle_functions gen/renpy.styledata.style_selected_idle_functions.c
renpy.styledata.style_selected_insensitive_functions gen/renpy.styledata.style_selected_insensitive_functions.c
renpy.styledata.style_selected_functions gen/renpy.styledata.style_selected_functions.c
renpy.styledata.style_hover_functions gen/renpy.styledata.style_hover_functions.c
renpy.styledata.style_idle_functions gen/renpy.styledata.style_idle_functions.c
renpy.styledata.style_insensitive_functions gen/renpy.styledata.style_insensitive_functions.c
renpy.styledata.style_functions gen/renpy.styledata.style_functions.c
renpy.styledata.style_activate_functions gen/renpy.styledata.style_activate_functions.c
renpy.styledata.style_selected_activate_functions gen/renpy.styledata.style_selected_activate_functions.c
renpy.display.matrix gen/renpy.display.matrix.c
renpy.display.render gen/renpy.display.render.c
renpy.display.accelerator gen/renpy.display.accelerator.c
renpy.display.quaternion gen/renpy.display.quaternion.c
renpy.uguu.gl gen/renpy.uguu.gl.c
renpy.uguu.uguu gen/renpy.uguu.uguu.c
renpy.gl.gldraw gen/renpy.gl.gldraw.c
renpy.gl.gltexture gen/renpy.gl.gltexture.c
renpy.gl.glenviron_shader gen/renpy.gl.glenviron_shader.c
renpy.gl.glrtt_copy gen/renpy.gl.glrtt_copy.c
renpy.gl.glrtt_fbo gen/renpy.gl.glrtt_fbo.c
renpy.gl2.gl2mesh gen/renpy.gl2.gl2mesh.c
renpy.gl2.gl2mesh2 gen/renpy.gl2.gl2mesh2.c
renpy.gl2.gl2mesh3 gen/renpy.gl2.gl2mesh3.c
renpy.gl2.gl2polygon gen/renpy.gl2.gl2polygon.c
renpy.gl2.gl2model gen/renpy.gl2.gl2model.c
renpy.gl2.gl2draw gen/renpy.gl2.gl2draw.c
renpy.gl2.gl2texture gen/renpy.gl2.gl2texture.c
renpy.gl2.gl2shader gen/renpy.gl2.gl2shader.c
renpy.gl2.live2dmodel gen/renpy.gl2.live2dmodel.c
renpy.text.textsupport gen/renpy.text.textsupport.c
renpy.text.texwrap gen/renpy.text.texwrap.c
renpy.text.ftfont gen/renpy.text.ftfont.c ftsupport.c ttgsubtable.c
renpy.text.hbfont gen/renpy.text.hbfont.c
-1
View File
@@ -1 +0,0 @@
_renpytfd gen/_renpytfd.c tinyfiledialogs/tinyfiledialogs.c
-219
View File
@@ -1,219 +0,0 @@
#!/usr/bin/env python
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
# (the "Software"), to deal in the Software without restriction,
# including without limitation the rights to use, copy, modify, merge,
# publish, distribute, sublicense, and/or sell copies of the Software,
# and to permit persons to whom the Software is furnished to do so,
# subject to the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
from __future__ import print_function
import platform
import sys
import os
import subprocess
import future
# Change to the directory containing this file.
BASE = os.path.abspath(os.path.dirname(sys.argv[0]))
os.chdir(BASE)
# Create the gen directory if it doesn't exist.
try:
os.makedirs("gen")
except Exception:
pass
# Generate styles.
import generate_styles
generate_styles.generate()
# If RENPY_CC or RENPY_LD are in the environment, and CC or LD are not, use them.
def setup_env(name):
renpy_name = "RENPY_" + name
if (renpy_name in os.environ) and (name not in os.environ):
os.environ[name] = os.environ[renpy_name]
setup_env("CC")
setup_env("LD")
setup_env("CXX")
import setuplib
from setuplib import android, ios, emscripten, raspi, include, library, cython, cmodule, copyfile, find_unnecessary_gen, generate_all_cython, PY2
# These control the level of optimization versus debugging.
setuplib.extra_compile_args = [ "-Wno-unused-function" ]
setuplib.extra_link_args = [ ]
# Detect win32.
if platform.win32_ver()[0]:
windows = True
setuplib.extra_compile_args.append("-fno-strict-aliasing")
tfd_libs = [ "comdlg32", "ole32" ]
else:
windows = False
tfd_libs = [ ]
if raspi:
setuplib.extra_compile_args.append("-DRASPBERRY_PI")
include("zlib.h")
include("png.h")
include("SDL.h", directory="SDL2")
include("ft2build.h")
include("freetype/freetype.h", directory="freetype2", optional=True) or include("freetype.h", directory="freetype2") # type: ignore
include("libavutil/avstring.h", directory="ffmpeg", optional=True) or include("libavutil/avstring.h") # type: ignore
include("libavformat/avformat.h", directory="ffmpeg", optional=True) or include("libavformat/avformat.h") # type: ignore
include("libavcodec/avcodec.h", directory="ffmpeg", optional=True) or include("libavcodec/avcodec.h") # type: ignore
include("libswscale/swscale.h", directory="ffmpeg", optional=True) or include("libswscale/swscale.h") # type: ignore
include("GL/glew.h")
include("pygame_sdl2/pygame_sdl2.h", directory="python{}.{}".format(sys.version_info.major, sys.version_info.minor))
include("hb.h", directory="harfbuzz")
library("SDL2")
library("png")
library("avformat")
library("avcodec")
library("avutil")
has_avresample = library("avresample", optional=True)
has_swresample = library("swresample", optional=True)
has_swscale = library("swscale", optional=True)
library("freetype")
library("z")
has_libglew = library("GLEW", optional=True)
has_libglew32 = library("glew32", optional=True)
if android:
sdl = [ 'SDL2', 'GLESv2', 'log' ]
png = 'png16'
else:
sdl = [ 'SDL2' ]
png = 'png'
cubism = os.environ.get("CUBISM", None)
if cubism:
setuplib.include_dirs.append("{}/Core/include".format(cubism))
# Modules directory.
cython(
"_renpy",
[ "IMG_savepng.c", "core.c" ],
sdl + [ png, 'z', 'm' ])
cython("_renpybidi", [ "renpybidicore.c" ], [ "fribidi" ])
if not (android or ios or emscripten):
cython("_renpytfd", [ "tinyfiledialogs/tinyfiledialogs.c" ], libs=tfd_libs)
# Sound.
sound = [ "avformat", "avcodec", "avutil", "z" ]
macros = [ ]
if has_swresample:
sound.insert(3, "swresample")
if has_avresample:
sound.insert(0, "avresample")
macros.append(("HAS_RESAMPLE", 1))
if has_swscale:
sound.insert(0, "swscale")
cython(
"renpy.audio.renpysound",
[ "renpysound_core.c", "ffmedia.c" ],
libs=sdl + sound,
define_macros=macros,
compile_args=[ "-Wno-deprecated-declarations" ] if ("RENPY_FFMPEG_NO_DEPRECATED_DECLARATIONS" in os.environ) else [ ])
cython("renpy.audio.filter")
# renpy
cython("renpy.lexersupport")
cython("renpy.pydict")
cython("renpy.style")
cython("renpy.encryption")
# renpy.compat
if PY2:
cython("renpy.compat.dictviews")
# renpy.styledata
cython("renpy.styledata.styleclass")
cython("renpy.styledata.stylesets")
for p in generate_styles.prefixes:
cython("renpy.styledata.style_{}functions".format(p), pyx=setuplib.gen + "/style_{}functions.pyx".format(p))
# renpy.display
cython("renpy.display.matrix")
cython("renpy.display.render", libs=[ 'z', 'm' ])
cython("renpy.display.accelerator", libs=sdl + [ 'z', 'm' ])
cython("renpy.display.quaternion", libs=[ 'm' ])
cython("renpy.uguu.gl", libs=sdl)
cython("renpy.uguu.uguu", libs=sdl)
cython("renpy.gl.gldraw", libs=sdl)
cython("renpy.gl.gltexture", libs=sdl)
cython("renpy.gl.glenviron_shader", libs=sdl)
cython("renpy.gl.glrtt_copy", libs=sdl)
cython("renpy.gl.glrtt_fbo", libs=sdl)
cython("renpy.gl2.gl2mesh")
cython("renpy.gl2.gl2mesh2")
cython("renpy.gl2.gl2mesh3")
cython("renpy.gl2.gl2polygon")
cython("renpy.gl2.gl2model")
cython("renpy.gl2.gl2draw", libs=sdl)
cython("renpy.gl2.gl2texture", libs=sdl)
cython("renpy.gl2.gl2shader", libs=sdl)
if cubism:
cython("renpy.gl2.live2dmodel", libs=sdl)
# renpy.text
cython("renpy.text.textsupport")
cython("renpy.text.texwrap")
cython(
"renpy.text.ftfont",
[ "ftsupport.c", "ttgsubtable.c" ],
libs=sdl + [ 'freetype', 'z', 'm' ])
if not (PY2 and emscripten):
cython(
"renpy.text.hbfont",
[ "ftsupport.c" ],
libs=sdl + [ 'harfbuzz', 'freetype', 'z', 'm' ])
generate_all_cython()
find_unnecessary_gen()
# Figure out the version, and call setup.
sys.path.insert(0, '..')
import renpy
setuplib.setup("Ren'Py", renpy.version[7:].rstrip('un')) # @UndefinedVariable
+29 -4
View File
@@ -1,9 +1,9 @@
[tool.pyright]
include = [
"*.py",
"renpy/",
"module/"
include = [
"*.py",
"renpy/",
"src/"
]
exclude = [
@@ -21,3 +21,28 @@ reportOptionalIterable = false
reportOptionalContextManager = false
reportOptionalOperand = false
reportMissingModuleSource = false
[tool.cyright]
include = [
"*.py",
"renpy/",
"src/"
]
exclude = [
"module/build/",
]
ignore = [
"renpycoverage.py"
]
reportGeneralTypeIssues = false
reportOptionalSubscript = false
reportOptionalMemberAccess = false
reportOptionalCall = false
reportOptionalIterable = false
reportOptionalContextManager = false
reportOptionalOperand = false
reportMissingModuleSource = false
+1 -1
View File
@@ -3,7 +3,7 @@
# This file is part of Ren'Py. The license below applies to Ren'Py only.
# Games and other projects that use Ren'Py may use a different license.
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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
+201 -198
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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,60 +22,90 @@
# This file ensures that renpy packages will be imported in the right
# order.
from __future__ import division, absolute_import, with_statement, print_function, unicode_literals
from typing import Any
from __future__ import annotations
from typing import Any, NamedTuple
import sys
import os
import types
import site
# Set up the hook for any renpy __init__ modules to import binary modules from
# a libexec directory if it available.
# This is relevant only for development RenPy itself, when compiled binaries
# are stored in the libexec directory.
try:
import _renpy # type: ignore
if getattr(_renpy, "__file__", "built-in") != "built-in":
import importlib.util
libexec : str = os.path.dirname(_renpy.__file__)
class _LibExecFinder:
def __init__(self):
self.in_find_spec: bool = False
def find_spec(self, fullname: str, path, target=None, /):
if not fullname.startswith("renpy."):
return None
if self.in_find_spec:
return None
self.in_find_spec = True
try:
spec = importlib.util.find_spec(fullname)
finally:
self.in_find_spec = False
if spec is None:
return None
# Is a package.
if spec.submodule_search_locations is not None:
name = fullname.split(".")
spec.submodule_search_locations.append(os.path.join(libexec, *name))
return spec
sys.meta_path.insert(0, _LibExecFinder())
# Add the libexec directory to this module.
try:
__spec__.submodule_search_locations.append(os.path.join(libexec, "renpy"))
__path__ = list(__spec__.submodule_search_locations)
except Exception:
pass
except ImportError:
pass
# All imports should go below renpy.compat.
import renpy.compat.pickle as pickle
# Initial import of the __main__ module. This gets replaced in renpy.py
# whatever that module has been imported as.
import __main__
# All imports should go below renpy.compat.
# Backup object, as it'll be overwritten when renpy.object is imported.
_object = object # type: ignore
def update_path():
"""
Update the __path__ of package, to import binary modules from a libexec
directory.
"""
import sys
import os.path
name = sys._getframe(1).f_globals["__name__"]
package = sys.modules[name]
name = name.split(".")
try:
import _renpy
if hasattr(_renpy, '__file__') and _renpy.__file__ != "built-in":
libexec = os.path.dirname(_renpy.__file__)
package.__path__.append(os.path.join(libexec, *name))
except ImportError:
return
from renpy.compat import PY2, basestring, bchr, bord, chr, open, pystr, range, round, str, tobytes, unicode # *
update_path()
import renpy.compat.pickle as pickle
import sys
import os
import copy
import types
import site
from collections import namedtuple
################################################################################
# Version information
################################################################################
# Version numbers.
official: bool
nightly: bool
version_name: str
version: str
try:
from renpy.vc_version import official, nightly, version_name, version
from renpy.vc_version import ( # type: ignore
official,
nightly,
version_name,
version,
)
except ImportError:
import renpy.versions
version_dict = renpy.versions.get_version()
@@ -87,7 +117,13 @@ except ImportError:
official = official and getattr(site, "renpy_build_official", False)
VersionTuple = namedtuple("VersionTuple", ["major", "minor", "patch", "commit"])
class VersionTuple(NamedTuple):
major: int
minor: int
patch: int
commit: int
version_tuple = VersionTuple(*(int(i) for i in version.split(".")))
# A string giving the version number only (8.0.1.123), with a suffix if needed.
@@ -102,68 +138,31 @@ elif nightly:
version = "Ren'Py " + version_only
# Other versions.
script_version = 5003000
savegame_suffix = "-LT1.save"
bytecode_version = 1
script_version: int = 5003000
savegame_suffix: str = "-LT1.save"
bytecode_version: int = 1
################################################################################
# Platform Information
################################################################################
# Information about the platform we're running on. We break the platforms
# up into 5 groups - windows-like, mac-like, linux-like, android-like,
# and ios-like.
windows = False
macintosh = False
linux = False
android = False
ios = False
emscripten = False
# up into 6 groups - windows-like, mac-like, linux-like, android-like,
# ios-like and web (aka. emscripten).
windows: bool = False
macintosh: bool = False
linux: bool = False
android: bool = False
ios: bool = False
emscripten: bool = False
# Should we enable experimental features and debugging?
experimental = "RENPY_EXPERIMENTAL" in os.environ
import platform
def get_windows_version():
"""
When called on windows, returns the windows version.
"""
import ctypes
class OSVERSIONINFOEXW(ctypes.Structure):
_fields_ = [('dwOSVersionInfoSize', ctypes.c_ulong),
('dwMajorVersion', ctypes.c_ulong),
('dwMinorVersion', ctypes.c_ulong),
('dwBuildNumber', ctypes.c_ulong),
('dwPlatformId', ctypes.c_ulong),
('szCSDVersion', ctypes.c_wchar * 128),
('wServicePackMajor', ctypes.c_ushort),
('wServicePackMinor', ctypes.c_ushort),
('wSuiteMask', ctypes.c_ushort),
('wProductType', ctypes.c_byte),
('wReserved', ctypes.c_byte)]
try:
os_version = OSVERSIONINFOEXW() # type: ignore
os_version.dwOSVersionInfoSize = ctypes.sizeof(os_version)
retcode = ctypes.windll.Ntdll.RtlGetVersion(ctypes.byref(os_version)) # type: ignore
# Om failure, assume we have a newer version of windows
if retcode != 0:
return (10, 0)
return (os_version.dwMajorVersion, os_version.dwMinorVersion) # type: ignore
except Exception:
return (10, 0)
if platform.win32_ver()[0]:
windows = get_windows_version()
windows = True
elif os.environ.get("RENPY_PLATFORM", "").startswith("ios"):
ios = True
elif platform.mac_ver()[0]:
@@ -175,28 +174,28 @@ elif sys.platform == 'emscripten' or "RENPY_EMSCRIPTEN" in os.environ:
else:
linux = True
arch = os.environ.get("RENPY_PLATFORM", "unknown-unknown-unknown").rpartition("-")[2]
arch: str = os.environ.get("RENPY_PLATFORM", "unknown-unknown-unknown").rpartition("-")[2]
# A flag that's true if we're on a smartphone or tablet-like platform.
mobile = android or ios or emscripten
mobile: bool = android or ios or emscripten
# A flag that's set to true if the game directory is bundled inside a mac app.
macapp = False
macapp: bool = False
################################################################################
# Backup Data for Reload
################################################################################
# True if we're done with safe mode checks.
safe_mode_checked = False
safe_mode_checked: bool = False
# True if autoreload mode is enabled. This has to live here, because it
# needs to survive through an utter restart.
autoreload = False
autoreload: bool = False
# A dict that persists through utter restarts. Accessible to all code as
# renpy.session.
session = { }
session: dict[str, Any] = {}
# A list of modules beginning with "renpy" that we don't want
# to backup.
@@ -223,7 +222,6 @@ backup_blacklist = {
"renpy.test.testmouse",
"renpy.test.testparser",
"renpy.gl2",
"renpy.gl",
"renpycoverage",
}
@@ -243,6 +241,7 @@ name_blacklist = {
"renpy.savelocation.disk_lock",
"renpy.character.TAG_RE",
"renpy.display.im.cache",
"renpy.display.render.main_thread",
"renpy.display.render.blit_lock",
"renpy.display.render.IDENTITY",
"renpy.loader.auto_lock",
@@ -253,10 +252,13 @@ name_blacklist = {
"renpy.persistent.MP_instances",
"renpy.exports.sdl_dll",
"renpy.sl2.slast.serial",
"renpy.gl2.assimp.loader",
"renpy.gl2.assimp.loader_lock",
"renpy.gl2.gl2draw.default_position",
}
class Backup(_object):
class Backup:
"""
This represents a backup of all of the fields in the python modules
comprising Ren'Py, shortly after they were imported.
@@ -278,6 +280,7 @@ class Backup(_object):
# A map from module to the set of names in that module.
self.names = { }
def backup(self):
for m in sys.modules.values():
if m is None:
continue
@@ -357,14 +360,14 @@ class Backup(_object):
# A backup of the Ren'Py modules after initial import.
backup = None
backup = Backup()
################################################################################
# Import
################################################################################
def plog(level, even, *args):
def plog(depth, event, *args):
"""
Empty version of renpy.plog that is replaced by the real implementation
in import_all.
@@ -383,12 +386,12 @@ def import_all():
# Note: If we add a new module, it should be added at the bottom of this file so it shows up in
# code analysis.
import renpy # @UnresolvedImport
import renpy
import renpy.config
import renpy.log
import renpy.arguments # @UnresolvedImport
import renpy.arguments
import renpy.compat.fixes
@@ -396,7 +399,7 @@ def import_all():
import renpy.debug
# Should probably be early, as we will add it as a base to serialized things.
# Should probably be early, as we will add these as a base to serialized things.
import renpy.object
import renpy.game
@@ -405,14 +408,12 @@ def import_all():
# Adds in the Ren'Py loader.
import renpy.loader
if not PY2:
import renpy.py3analysis
else:
import renpy.py2analysis
import renpy.pyanalysis
import renpy.parameter
sys.modules["renpy.py3analysis"] = renpy.pyanalysis
import renpy.astsupport
import renpy.parameter
import renpy.ast
import renpy.atl
import renpy.curry
@@ -420,6 +421,7 @@ def import_all():
import renpy.easy
import renpy.encryption
import renpy.execution
import renpy.tokenizer
import renpy.lexer
import renpy.loadsave
import renpy.savelocation
@@ -438,14 +440,14 @@ def import_all():
import renpy.versions
global plog
plog = renpy.performance.log # type:ignore
plog = renpy.performance.log
import renpy.styledata
import renpy.style
renpy.styledata.import_style_functions()
sys.modules[pystr('renpy.styleclass')] = renpy.style
sys.modules['renpy.styleclass'] = renpy.style
import renpy.substitutions
import renpy.translation
@@ -477,9 +479,8 @@ def import_all():
import renpy.text.extras
import renpy.text.shader
sys.modules[pystr('renpy.display.text')] = renpy.text.text
sys.modules['renpy.display.text'] = renpy.text.text
import renpy.gl
import renpy.gl2
import renpy.display.layout
@@ -550,6 +551,7 @@ def import_all():
import renpy.gl2.gl2shader
import renpy.gl2.gl2texture
import renpy.gl2.live2d
import renpy.gl2.assimp
import renpy.minstore
import renpy.defaultstore
@@ -566,13 +568,10 @@ def import_all():
global six
import six
sys.modules[pystr('renpy.six')] = six
sys.modules['renpy.six'] = six
# Back up the Ren'Py modules.
global backup
backup = Backup()
backup.backup()
post_import()
@@ -583,7 +582,7 @@ def post_import():
of various modules.
"""
import renpy # @UnresolvedImport
import renpy
# Create the store.
renpy.python.create_store("store")
@@ -595,9 +594,13 @@ def post_import():
sys.modules['renpy.store'] = sys.modules['store']
import subprocess
sys.modules[pystr('renpy.subprocess')] = subprocess
sys.modules['renpy.subprocess'] = subprocess
for k, v in renpy.defaultstore.__dict__.items():
if k in ("__all__", "__name__", "__doc__", "__package__", "__loader__", "__spec__", "__file__", "__cached__"):
continue
renpy.store.__dict__.setdefault(k, v) # type: ignore
renpy.store.eval = renpy.defaultstore.eval # type: ignore
@@ -618,9 +621,6 @@ def reload_all():
returned.
"""
# if mobile:
# raise Exception("Reloading is not supported on mobile platforms.")
import renpy
# Quit audio.
@@ -666,7 +666,7 @@ def reload_all():
del sys.modules[i]
# Restore the state of all modules from backup.
backup.restore() # type: ignore
backup.restore()
renpy.python.old_py_compile_cache = py_compile_cache
@@ -677,76 +677,79 @@ def reload_all():
# Re-initialize the importer.
renpy.loader.init_importer()
if 1 == 0:
store = None # type: Any
# renpy.store and sub-modules can have names of any type inside.
store: Any = None
# Generated by scripts/relative_imports.py, do not edit below this line.
if 1 == 0:
from . import add_from
from . import arguments
from . import ast
from . import atl
from . import audio
from . import bootstrap
from . import character
from . import color
from . import compat
from . import config
from . import curry
from . import debug
from . import defaultstore
from . import display
from . import dump
from . import easy
from . import editor
from . import encryption
from . import error
from . import execution
from . import exports
from . import game
from . import gl
from . import gl2
from . import lexer
from . import lexersupport
from . import lint
from . import loader
from . import loadsave
from . import log
from . import main
from . import memory
from . import minstore
from . import object
from . import parameter
from . import parser
from . import performance
from . import persistent
from . import preferences
from . import py2analysis
from . import py3analysis
from . import pyanalysis
from . import pydict
from . import python
from . import revertable
from . import rollback
from . import savelocation
from . import savetoken
from . import screenlang
from . import script
from . import scriptedit
from . import sl2
from . import statements
from . import style
from . import styledata
from . import substitutions
from . import test
from . import text
from . import translation
from . import uguu
from . import ui
from . import update
from . import util
from . import vc_version
from . import versions
from . import warp
from . import webloader
import typing
if typing.TYPE_CHECKING:
from . import add_from as add_from
from . import arguments as arguments
from . import ast as ast
from . import astsupport as astsupport
from . import atl as atl
from . import audio as audio
from . import bootstrap as bootstrap
from . import character as character
from . import color as color
from . import compat as compat
from . import config as config
from . import cslots as cslots
from . import curry as curry
from . import debug as debug
from . import defaultstore as defaultstore
from . import display as display
from . import dump as dump
from . import easy as easy
from . import editor as editor
from . import encryption as encryption
from . import error as error
from . import execution as execution
from . import exports as exports
from . import game as game
from . import gl2 as gl2
from . import lexer as lexer
from . import lexersupport as lexersupport
from . import lint as lint
from . import loader as loader
from . import loadsave as loadsave
from . import log as log
from . import main as main
from . import memory as memory
from . import minstore as minstore
from . import object as object
from . import parameter as parameter
from . import parser as parser
from . import performance as performance
from . import persistent as persistent
from . import preferences as preferences
from . import pyanalysis as pyanalysis
from . import pydict as pydict
from . import python as python
from . import revertable as revertable
from . import rollback as rollback
from . import savelocation as savelocation
from . import savetoken as savetoken
from . import screenlang as screenlang
from . import script as script
from . import scriptedit as scriptedit
from . import sl2 as sl2
from . import statements as statements
from . import style as style
from . import styledata as styledata
from . import substitutions as substitutions
from . import test as test
from . import text as text
from . import tokenizer as tokenizer
from . import translation as translation
from . import uguu as uguu
from . import ui as ui
from . import update as update
from . import util as util
from . import vc_version as vc_version
from . import versions as versions
from . import warp as warp
from . import webloader as webloader
+33 -36
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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,26 +19,23 @@
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
from __future__ import division, absolute_import, with_statement, print_function, unicode_literals
from renpy.compat import PY2, basestring, bchr, bord, chr, open, pystr, range, round, str, tobytes, unicode # *
import collections
from collections import defaultdict
from pathlib import Path
import renpy
import os
# A map from filename to position, target label pairs.
missing = collections.defaultdict(list)
missing = defaultdict[str, list[tuple[int, str]]](list)
def report_missing(target, filename, position):
def report_missing(target: str, filename: str, number: int):
"""
Reports that the call statement ending at `position` in `filename`
is missing a from clause.
"""
missing[filename].append((position, target))
missing[filename].append((number, target))
# Labels that we've created while running add_from.
@@ -69,44 +66,43 @@ def generate_label(target):
return label
def process_file(fn):
def process_file(fn: str, full_fn: str):
"""
Adds missing from clauses to `fn`.
"""
if not os.path.exists(fn):
path = Path(full_fn)
if not path.exists():
return
if (lines := renpy.scriptedit.ensure_loaded(full_fn)) is None:
return
edits = missing[fn]
edits.sort()
edits = iter(edits)
next_edit, target = next(edits)
with open(fn, "rb") as f:
data = f.read().decode("utf-8")
new_lines = []
for lineno, line in lines.items():
if lineno == next_edit:
code = f" from {generate_label(target)}"
full_text = line.with_added_code(code)
else:
full_text = line.full_text
# How much of the input has been consumed.
consumed = 0
new_lines.append(full_text)
# The output.
output = u""
new_path = path.with_suffix(f"{path.suffix}.new")
with new_path.open("w", encoding="utf-8") as f:
f.write("\ufeff")
f.writelines(new_lines)
for position, target in edits:
output += data[consumed:position]
consumed = position
bak_path = path.with_suffix(f"{path.suffix}.bak")
bak_path.unlink(missing_ok=True)
output += " from {}".format(generate_label(target))
output += data[consumed:]
with open(fn + ".new", "wb") as f:
f.write(output.encode("utf-8"))
try:
os.unlink(fn + ".bak")
except Exception:
pass
os.rename(fn, fn + ".bak")
os.rename(fn + ".new", fn)
path.rename(bak_path)
new_path.rename(path)
def add_from():
@@ -114,8 +110,9 @@ def add_from():
renpy.arguments.takes_no_arguments("Adds from clauses to call statements that are missing them.")
for fn in missing:
if fn.startswith(renpy.config.gamedir):
process_file(fn)
full_fn = renpy.parser.unelide_filename(fn)
if full_fn.startswith(renpy.config.gamedir):
process_file(fn, full_fn)
return False
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 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
+1263 -1012
View File
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