Compare commits

...

53 Commits

Author SHA1 Message Date
Tom Rothamel 50828cb688 Run fix_translations. 2021-11-28 16:32:02 -05:00
Tom Rothamel c1f5401101 Update changelog. 2021-11-28 16:31:57 -05:00
Tom Rothamel a508a6c5fa Always run an unfocused handler when a displayable remains shown.
Ren'Py will now always run an `unhovered` action when a displayable (or its
replacement) remains shown, and the focus changes. Previously, the unhovered
action would not run when the loss of focus was caused by showing a second
screen.

This traces back to LSF PM 295318 (and the rest of that thread.)
2021-11-28 16:31:20 -05:00
loliconazter a2fc6e4a97 Update developer.rpy 2021-11-28 16:28:51 -05:00
loliconazter 348accd819 Update common.rpy 2021-11-28 16:28:46 -05:00
loliconazter a5d44c5f6d Update launcher.rpy
fixing some translation and some translation "renpyweb" section
2021-11-28 16:28:41 -05:00
Tom Rothamel b9acd8bf0b Prevent pausebehavior from timing out with a modal above. 2021-11-28 16:28:37 -05:00
Tom Rothamel a8baa0fc2a Remove use of renpy.angle.
It wasn't used for much anymore, now that angle support goes
through uguu.
2021-11-28 16:28:29 -05:00
Tom Rothamel cc59f46f97 live2d: If a curve ends early, repeat the last segement.
This prevents rounding errors or bad curves from resetting portions
of a motion.
2021-11-28 16:27:59 -05:00
Tom Rothamel 162f22d6f5 Do not trigger timers on modal TIMEEVENTs. 2021-11-28 16:27:54 -05:00
Tom Rothamel 9e28b55ea9 Continue processing modal timeevents. 2021-11-28 16:27:51 -05:00
Tom Rothamel a38803ec71 Ensure replaces is of the correct type.
Fixes #3138.
2021-11-28 16:27:47 -05:00
Tom Rothamel 6eca382a5a Separate out invalidation and deallocation of renders.
Fixes #3135, which was caused by invalidation at the start of a
screen.
2021-11-28 16:27:40 -05:00
kigyo 002d7aadf2 Update German translation in common.rpy
I noticed many of the "German" translations were left in English. I tried to fix as many as I could, but a few I was still unsure about. ("Clipboard voicing", for example.)
In general, these older translation files seem to be missing strings from the renderer (shift+G) screen.
2021-11-28 16:27:29 -05:00
loliconazter b6550ada06 Update launcher.rpy 2021-11-28 16:23:41 -05:00
Tom Rothamel 7f9b9d32cf sl2: Re-fix scopes.
This reintroduces some of the reverted fixes, but at the same time,
avoids th problems those fixes caused by storing the scope given
to the screen in the main context, meaning that it's no longer
required that scope remain the same object as the game changes.

(In practice, there were enough things that could changes the main
scope that it was hard to keep object identity stable.)
2021-11-28 16:23:38 -05:00
Tom Rothamel 2a7d629d04 Revert "sl2: Reuse the scope object in use w/o parameters."
This reverts commit 3f7e65ae84.
2021-11-28 16:23:33 -05:00
Tom Rothamel 00a9d2ec80 Revert "Remove debug print."
This reverts commit 315451b1c5.
2021-11-28 16:22:16 -05:00
Tom Rothamel d76978f1b2 Revert "sl2: Store the scope as part of the screen cache."
This reverts commit 0a55f8a9ee.
2021-11-28 16:22:16 -05:00
Tom Rothamel 357e53a1ab Revert "Ensure that current_screen.scope is the scope that the screen is executing in."
This reverts commit 095e94cfff.
2021-11-28 16:21:38 -05:00
Tom Rothamel 64acbf5adf Ensure that current_screen.scope is the scope that the screen is executing in.
Fixes parts of #3131's third comment.
2021-11-28 16:21:09 -05:00
Tom Rothamel da38eed1ae Synchro start should only unpause if a channel is not playing.
This keeps unpause_all from starting channels that it should not.

Fixes #3136.
2021-11-28 16:21:02 -05:00
Tom Rothamel e9a1a02135 Upgrade _seen_audio on load.
Fixes #3134.
2021-11-28 16:20:45 -05:00
Tom Rothamel b2d7232d31 Store the string giving the filename into _seen_audio, when AudioData is involved.
Per #3134.
2021-11-28 16:20:40 -05:00
Tom Rothamel 3fbf27a6fa Set the renpy.export.platform variables properly. 2021-11-28 16:20:34 -05:00
Tom Rothamel 759ef31065 Use the variant to set the rollback side.
renpy.exports.platform is set too late to be useful.
2021-11-28 16:20:25 -05:00
Tom Rothamel c18b987e17 Make the emulated keyboard transparent.
This makes it possible to see the console in the emulator.
2021-11-28 16:19:12 -05:00
Tom Rothamel ddd0d1b30d Fix a problem with menus and config.log.
Fixes #3133.
2021-11-28 16:18:43 -05:00
Tom Rothamel 91c730cb2d Update the included games to use gui.variant. 2021-11-28 16:18:24 -05:00
Tom Rothamel 99496696bd Add gui.variant.
This is a decorator that calls a function when a variant is
active, and then again each time the gui is rebuilt.

Addresses the second issue in #3130.
2021-11-28 16:18:17 -05:00
Tom Rothamel 859d34994e Use the emulated mobile variable for the rollback side preference.
This matches the rollback side the emulator uses.
2021-11-28 16:18:10 -05:00
Tom Rothamel bb0c2028bf sl2: Store the scope as part of the screen cache.
This means that the same scope objecty can be reused, which
is necessary for the new uses_scope work.

Per #3131.
2021-11-28 16:16:21 -05:00
Tom Rothamel 56aa271554 web: Check for progressive downloads once per frame.
This is up from once per interaction, and only when Ren'Py is idle.
This allows progressive downloads to be loaded in the middle of
an interaction.

Fixes #3125.
2021-11-16 22:18:55 -05:00
Tom Rothamel cda38a4aca live2d: Always fade when switching from one motion to another. 2021-11-16 22:18:55 -05:00
Tom Rothamel 509e0ed2f2 Remove a debug print. 2021-11-16 22:18:55 -05:00
Tom Rothamel 116ccc9c3c live2d: Remove debug print. 2021-11-16 22:18:55 -05:00
Tom Rothamel 0ff3b243c5 live2d: Do not prevent seamless motions from looping. 2021-11-16 22:18:55 -05:00
Tom Rothamel 92ca5e9add Update the changelong. 2021-11-16 22:18:55 -05:00
Tom Rothamel 9651cc2ed8 live2d: Move to using saturation arithmetic for models.
This is an attempt to better implement the live2d fading semantics,
found at:

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

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

Fixes #3126.
2021-11-16 22:18:55 -05:00
Tom Rothamel 39350f4778 gl2: Use GL_LEQUALS rather than GL_LESS when gl_depth is true.
This reduces astonishment by making the behavior equal to what
Ren'Py would do normally.

Per p547953.

Not compatted, because gl_depth is probably fairly new when it
comes to use, and it's probably best to treat the behavior up
to now as undefined.
2021-11-16 22:18:55 -05:00
Tom Rothamel 72f3798741 Remove debug print. 2021-11-16 22:18:55 -05:00
Tom Rothamel 98e06eaba9 sl2: Reuse the scope object in use w/o parameters.
This ensures the object keeps the same identity, which means
that use without parameters works with the changes to uses_scope
in 43403e787e .

Fixes #195.
2021-11-09 23:11:30 -05:00
Tom Rothamel 34dbd3f5f8 Changelog more of the things. 2021-11-08 20:56:42 -05:00
Tom Rothamel 8011545b88 Update sponsors. 2021-11-08 19:29:05 -05:00
Tom Rothamel ba0ffeb7d0 Lower version to 7.4.11. 2021-11-07 20:43:47 -05:00
Tom Rothamel f32c448d02 Remove the 7.5 changelog. 2021-11-07 20:08:00 -05:00
Tom Rothamel 3c0c1ffb84 Revert "Tweak the priority of compat, so it can better address styles and common."
This reverts commit 0f8610c8af.
2021-11-07 19:55:27 -05:00
Tom Rothamel 5d167a881d Revert "Change the default for style.drag.focus_mask to False."
This reverts commit c9e3ac12bc.
2021-11-07 19:55:13 -05:00
Tom Rothamel 1d3b6ffdf0 Revert "Add config.mouse_focus_clickthrough."
This reverts commit 0192c3bfdb.
2021-11-07 19:54:07 -05:00
Tom Rothamel 5c63d9cee8 Revert "Enable config.mouse_focus_clickthrough in the launcher."
This reverts commit b7e53ccf74.
2021-11-07 19:53:11 -05:00
48 changed files with 681 additions and 2912 deletions
+4 -5
View File
@@ -416,13 +416,15 @@ init python:
## This increases the size of the quick buttons to make them easier to
## touch on tablets and phones.
if renpy.variant("touch"):
@gui.variant
def touch():
gui.quick_button_borders = Borders(gui.scale(40), gui.scale(14), gui.scale(40), gui.scale(0))
## This changes the size and spacing of various GUI elements to ensure
## they are easily visible on phones.
if renpy.variant("small"):
@gui.variant
def small():
## Font sizes.
gui.text_size = gui.scale(30)
@@ -471,6 +473,3 @@ init python:
gui.nvl_button_width = gui.scale(1240)
gui.nvl_button_xpos = gui.scale(20)
-4
View File
@@ -406,13 +406,9 @@ init python:
# Enable the special launcher translation mode.
define config.translate_launcher = True
# Allow clicks that focus the window to be processed.
define config.mouse_focus_clickthrough = True
# Reduce the rate of screen updates.
default preferences.gl_powersave = True
# Disable steam.
python early:
config.enable_steam = False
+52 -52
View File
@@ -3,71 +3,71 @@ translate german strings:
# 00action_file.rpy:26
old "{#weekday}Monday"
new "{#weekday}Monday"
new "{#weekday}Montag"
# 00action_file.rpy:26
old "{#weekday}Tuesday"
new "{#weekday}Tuesday"
new "{#weekday}Dienstag"
# 00action_file.rpy:26
old "{#weekday}Wednesday"
new "{#weekday}Wednesday"
new "{#weekday}Mittwoch"
# 00action_file.rpy:26
old "{#weekday}Thursday"
new "{#weekday}Thursday"
new "{#weekday}Donnerstag"
# 00action_file.rpy:26
old "{#weekday}Friday"
new "{#weekday}Friday"
new "{#weekday}Freitag"
# 00action_file.rpy:26
old "{#weekday}Saturday"
new "{#weekday}Saturday"
new "{#weekday}Samstag"
# 00action_file.rpy:26
old "{#weekday}Sunday"
new "{#weekday}Sunday"
new "{#weekday}Sonntag"
# 00action_file.rpy:37
old "{#weekday_short}Mon"
new "{#weekday_short}Mon"
new "{#weekday_short}Mo"
# 00action_file.rpy:37
old "{#weekday_short}Tue"
new "{#weekday_short}Tue"
new "{#weekday_short}Di"
# 00action_file.rpy:37
old "{#weekday_short}Wed"
new "{#weekday_short}Wed"
new "{#weekday_short}Mi"
# 00action_file.rpy:37
old "{#weekday_short}Thu"
new "{#weekday_short}Thu"
new "{#weekday_short}Do"
# 00action_file.rpy:37
old "{#weekday_short}Fri"
new "{#weekday_short}Fri"
new "{#weekday_short}Fr"
# 00action_file.rpy:37
old "{#weekday_short}Sat"
new "{#weekday_short}Sat"
new "{#weekday_short}Sa"
# 00action_file.rpy:37
old "{#weekday_short}Sun"
new "{#weekday_short}Sun"
new "{#weekday_short}So"
# 00action_file.rpy:47
old "{#month}January"
new "{#month}January"
new "{#month}Januar"
# 00action_file.rpy:47
old "{#month}February"
new "{#month}February"
new "{#month}Februar"
# 00action_file.rpy:47
old "{#month}March"
new "{#month}March"
new "{#month}März"
# 00action_file.rpy:47
old "{#month}April"
@@ -75,15 +75,15 @@ translate german strings:
# 00action_file.rpy:47
old "{#month}May"
new "{#month}May"
new "{#month}Mai"
# 00action_file.rpy:47
old "{#month}June"
new "{#month}June"
new "{#month}Juni"
# 00action_file.rpy:47
old "{#month}July"
new "{#month}July"
new "{#month}Juli"
# 00action_file.rpy:47
old "{#month}August"
@@ -95,7 +95,7 @@ translate german strings:
# 00action_file.rpy:47
old "{#month}October"
new "{#month}October"
new "{#month}Oktober"
# 00action_file.rpy:47
old "{#month}November"
@@ -103,7 +103,7 @@ translate german strings:
# 00action_file.rpy:47
old "{#month}December"
new "{#month}December"
new "{#month}Dezember"
# 00action_file.rpy:63
old "{#month_short}Jan"
@@ -115,7 +115,7 @@ translate german strings:
# 00action_file.rpy:63
old "{#month_short}Mar"
new "{#month_short}Mar"
new "{#month_short}Mär"
# 00action_file.rpy:63
old "{#month_short}Apr"
@@ -123,7 +123,7 @@ translate german strings:
# 00action_file.rpy:63
old "{#month_short}May"
new "{#month_short}May"
new "{#month_short}Mai"
# 00action_file.rpy:63
old "{#month_short}Jun"
@@ -143,7 +143,7 @@ translate german strings:
# 00action_file.rpy:63
old "{#month_short}Oct"
new "{#month_short}Oct"
new "{#month_short}Okt"
# 00action_file.rpy:63
old "{#month_short}Nov"
@@ -151,7 +151,7 @@ translate german strings:
# 00action_file.rpy:63
old "{#month_short}Dec"
new "{#month_short}Dec"
new "{#month_short}Dez"
# 00action_file.rpy:235
old "%b %d, %H:%M"
@@ -187,19 +187,19 @@ translate german strings:
# 00gui.rpy:233
old "Are you sure you want to end the replay?"
new "Are you sure you want to end the replay?"
new "Sind Sie sicher, dass sie die Szenen-Wiederholung beenden möchten?"
# 00gui.rpy:234
old "Are you sure you want to begin skipping?"
new "Sind Sie sicher, dass Sie vorspulen möchten?"
new "Sind Sie sicher, dass Sie Text überspringen möchten?"
# 00gui.rpy:235
old "Are you sure you want to skip to the next choice?"
new "Sind Sie sicher, dass Sie zur nächsten Auswahl vorspulen möchten?"
new "Sind Sie sicher, dass Sie zur nächsten Auswahl springen möchten?"
# 00gui.rpy:236
old "Are you sure you want to skip unseen dialogue to the next choice?"
new "Are you sure you want to skip unseen dialogue to the next choice?"
new "Sind Sie sicher, dass sie ungesehenen Dialog bis zur nächsten Entscheidung überspringen möchten?"
# 00keymap.rpy:250
old "Saved screenshot as %s."
@@ -207,7 +207,7 @@ translate german strings:
# 00library.rpy:142
old "Self-voicing disabled."
new "Self-voicing disabled."
new "Sprachausgabe deaktiviert."
# 00library.rpy:143
old "Clipboard voicing enabled. "
@@ -215,15 +215,15 @@ translate german strings:
# 00library.rpy:144
old "Self-voicing enabled. "
new "Self-voicing enabled. "
new "Sprachausgabe aktiviert. "
# 00library.rpy:179
old "Skip Mode"
new "Vorspulen"
new "Skip-Modus"
# 00library.rpy:262
old "This program contains free software under a number of licenses, including the MIT License and GNU Lesser General Public License. A complete list of software, including links to full source code, can be found {a=https://www.renpy.org/l/license}here{/a}."
new "This program contains free software under a number of licenses, including the MIT License and GNU Lesser General Public License. A complete list of software, including links to full source code, can be found {a=https://www.renpy.org/l/license}here{/a}."
new "Dieses Programm enthält kostenlose Software unter einer Reihe von Lizenzen, einschließlich der MIT License und der GNU Lesser General Public License. Eine vollständige Liste aller Software, inklusive Links zum vollständigen Quellcode, kann {a=https://www.renpy.org/l/license}hier{/a} gefunden werden."
# 00preferences.rpy:422
old "Clipboard voicing enabled. Press 'shift+C' to disable."
@@ -231,47 +231,47 @@ translate german strings:
# 00preferences.rpy:424
old "Self-voicing would say \"[renpy.display.tts.last]\". Press 'alt+shift+V' to disable."
new "Self-voicing would say \"[renpy.display.tts.last]\". Press 'alt+shift+V' to disable."
new "Sprachausgabe würde \"[renpy.display.tts.last]\" sagen. Zum deaktivieren 'alt+shift+V' drücken."
# 00preferences.rpy:426
old "Self-voicing enabled. Press 'v' to disable."
new "Self-voicing enabled. Press 'v' to disable."
new "Sprachausgabe aktiviert. Zum deaktivieren 'v' drücken."
# 00iap.rpy:217
old "Contacting App Store\nPlease Wait..."
new "Contacting App Store\nPlease Wait..."
new "Kontaktiert App Store\nBitte warten..."
# 00updater.rpy:367
old "The Ren'Py Updater is not supported on mobile devices."
new "The Ren'Py Updater is not supported on mobile devices."
new "Der Ren'Py Updater wird auf Mobilgeräten nicht unterstützt."
# 00updater.rpy:486
old "An error is being simulated."
new "An error is being simulated."
new "Ein Error wird simuliert."
# 00updater.rpy:662
old "Either this project does not support updating, or the update status file was deleted."
new "Either this project does not support updating, or the update status file was deleted."
new "Entweder unterstützt dieses Projekt keine Updates, oder die Update-Status-Datei wurde gelöscht."
# 00updater.rpy:676
old "This account does not have permission to perform an update."
new "This account does not have permission to perform an update."
new "Dieser Account hat keine Erlaubnis, Updates durchzuführen."
# 00updater.rpy:679
old "This account does not have permission to write the update log."
new "This account does not have permission to write the update log."
new "Dieser Account hat keine Erlaubnis, Update-Logs zu schreiben."
# 00updater.rpy:704
old "Could not verify update signature."
new "Could not verify update signature."
new "Konnte die Update-Signatur nicht verifizieren."
# 00updater.rpy:975
old "The update file was not downloaded."
new "The update file was not downloaded."
new "Die Update-Datei wurde nicht heruntergeladen."
# 00updater.rpy:993
old "The update file does not have the correct digest - it may have been corrupted."
new "The update file does not have the correct digest - it may have been corrupted."
new "Die Update-Datei hat nicht das richtige Format - sie wurde möglicherweise beschädigt."
# 00updater.rpy:1049
old "While unpacking {}, unknown type {}."
@@ -283,7 +283,7 @@ translate german strings:
# 00updater.rpy:1404
old "This program is up to date."
new "Dieses Programm ist aktuell."
new "Dieses Programm ist auf dem neuesten Stand."
# 00updater.rpy:1406
old "[u.version] is available. Do you want to install it?"
@@ -291,27 +291,27 @@ translate german strings:
# 00updater.rpy:1408
old "Preparing to download the updates."
new "Vorbereiten, um die Aktualisierungen herunterzuladen."
new "Bereitet das Herunterladen der Updates vor."
# 00updater.rpy:1410
old "Downloading the updates."
new "Aktualisierungen werden heruntergeladen."
new "Updates werden heruntergeladen."
# 00updater.rpy:1412
old "Unpacking the updates."
new "Aktualisierungen werden entpackt."
new "Updates werden entpackt."
# 00updater.rpy:1416
old "The updates have been installed. The program will restart."
new "Die Aktualisierungen wurden installiert. Das Programm wird nun neustarten."
new "Die Updates wurden installiert. Das Programm wird nun neu gestartet."
# 00updater.rpy:1418
old "The updates have been installed."
new "Die Aktualisierungen wurden installiert."
new "Die Updates wurden installiert."
# 00updater.rpy:1420
old "The updates were cancelled."
new "Die Aktualisierungen wurden abgebrochen."
new "Die Updates wurden abgebrochen."
# 00gallery.rpy:563
old "Image [index] of [count] locked."
+31 -32
View File
@@ -62,7 +62,7 @@
# 00action_file.rpy:47
old "{#month}February"
new "{#month}Febuari"
new "{#month}Februari"
# 00action_file.rpy:47
old "{#month}March"
@@ -118,7 +118,7 @@
# 00action_file.rpy:63
old "{#month_short}Apr"
new "{#month_short}Aprl"
new "{#month_short}Apr"
# 00action_file.rpy:63
old "{#month_short}May"
@@ -134,7 +134,7 @@
# 00action_file.rpy:63
old "{#month_short}Aug"
new "{#month_short}Agust"
new "{#month_short}Agu"
# 00action_file.rpy:63
old "{#month_short}Sep"
@@ -238,11 +238,11 @@
# 00iap.rpy:217
old "Contacting App Store\nPlease Wait..."
new "Contacting App Store\nPlease Wait..."
new "Contacting App Store\nTunggu sebenatar..."
# 00updater.rpy:367
old "The Ren'Py Updater is not supported on mobile devices."
new "Ren'Py Updater tidak di support di perangkat handphone."
new "Pembaru Ren'Py tidak di support di perangkat handphone."
# 00updater.rpy:486
old "An error is being simulated."
@@ -250,39 +250,39 @@
# 00updater.rpy:662
old "Either this project does not support updating, or the update status file was deleted."
new "Antara proyek tidak mendukung update, atau file status update di hapus."
new "Antara proyek tidak mendukung pembaharuan, atau status file pembaharuan di hapus."
# 00updater.rpy:676
old "This account does not have permission to perform an update."
new "Akun ini tidak memiliki izin untuk melakukan update."
new "Akun ini tidak memiliki izin untuk melakukan pembaharuan."
# 00updater.rpy:679
old "This account does not have permission to write the update log."
new "Akun ini tidak memiliki izin untuk menulis log update."
new "Akun ini tidak memiliki izin untuk menulis log pembaharuan."
# 00updater.rpy:704
old "Could not verify update signature."
new "Tidak dapat memverifikasi tandatangan update."
new "Tidak dapat memverifikasi tandatangan pembaharuan."
# 00updater.rpy:975
old "The update file was not downloaded."
new "File update tidak di download."
new "File pembaharuan tidak di unduh."
# 00updater.rpy:993
old "The update file does not have the correct digest - it may have been corrupted."
new "File update tiidak memiliki digest yang benar - mungkin file corrupt."
new "File pembaharuan tidak memiliki digest yang benar - mungkin file corrupt/rusak."
# 00updater.rpy:1049
old "While unpacking {}, unknown type {}."
new "Ketika unppack {}, tipe tidak diketahui {}."
new "Ketika unpack {}, tipe tidak diketahui {}."
# 00updater.rpy:1393
old "Updater"
new "Updater"
new "Pembaru"
# 00updater.rpy:1404
old "This program is up to date."
new "Program ini sudah up to date."
new "Program ini sudah up to date(terbaru)."
# 00updater.rpy:1406
old "[u.version] is available. Do you want to install it?"
@@ -290,27 +290,27 @@
# 00updater.rpy:1408
old "Preparing to download the updates."
new "Bersiap untuk mendownload update."
new "Bersiap untuk mengunduh pembaharuan."
# 00updater.rpy:1410
old "Downloading the updates."
new "Mendownload update."
new "Mengunduh pembaharuan."
# 00updater.rpy:1412
old "Unpacking the updates."
new "Meng unpack update."
new "Mengunpack pembaharuan."
# 00updater.rpy:1416
old "The updates have been installed. The program will restart."
new "Update sudah terpasang. Program akan melakukan restart."
new "Pembaharuan telah terpasang. Program akan melakukan restart."
# 00updater.rpy:1418
old "The updates have been installed."
new "Update sudah terpasang."
new "Pembaharuan telah terpasang."
# 00updater.rpy:1420
old "The updates were cancelled."
new "Proses update di batalkan."
new "Proses pembaharuan di batalkan."
# 00gallery.rpy:563
old "Image [index] of [count] locked."
@@ -353,23 +353,23 @@ translate indonesian strings:
# 00director.rpy:1471
old "(attributes)"
new "(attributes)"
new "(atribut)"
# 00director.rpy:1472
old "(transform)"
new "(tramsform)"
new "(tramsformasi)"
# 00director.rpy:1497
old "(transition)"
new "(transition)"
new "(transisi)"
# 00director.rpy:1509
old "(channel)"
new "(channel)"
new "(kanal)"
# 00director.rpy:1510
old "(filename)"
new "(filename)"
new "(namafile)"
# 00director.rpy:1535
old "Change"
@@ -397,11 +397,11 @@ translate indonesian strings:
# 00director.rpy:1631
old "Transforms:"
new "Transforms:"
new "Transformasi:"
# 00director.rpy:1650
old "Behind:"
new "Di Belakang:"
new "Dibelakang:"
# 00director.rpy:1669
old "Transition:"
@@ -409,7 +409,7 @@ translate indonesian strings:
# 00director.rpy:1687
old "Channel:"
new "Channel:"
new "Kanal:"
# 00director.rpy:1705
old "Audio Filename:"
@@ -421,13 +421,12 @@ translate indonesian strings:
# _developer\developer.rpym:67
old "Show Texture Size"
new "Tampilkan Ukuran Textur"
new "Tampilkan Ukuran Tekstur"
# _developer\developer.rpym:70
old "Hide Texture size"
new "Sembunyikan Ukuran Textur"
new "Sembunyikan Ukuran Tekstur"
# _developer\developer.rpym:569
old "{size_mb:,.1f} MB in {count} textures."
new "{size_mb:,.1f} MB pada {count} textur."
new "{size_mb:,.1f} MB pada {count} tekstur."
+8 -9
View File
@@ -7,7 +7,7 @@ translate indonesian strings:
# _developer/developer.rpym:43
old "Reload Game (Shift+R)"
new "Reload Game (Shift+R)"
new "Muat Ulang Game (Shift+R)"
# _developer/developer.rpym:45
old "Console (Shift+O)"
@@ -15,19 +15,19 @@ translate indonesian strings:
# _developer/developer.rpym:47
old "Variable Viewer"
new "Viewer variabel"
new "Peneliti variabel"
# _developer/developer.rpym:49
old "Theme Test"
new "Test Tema"
new "Coba Tema"
# _developer/developer.rpym:51
old "Image Location Picker"
new "Pemilih LokasI Gambar"
new "Pemilih Lokasi Gambar"
# _developer/developer.rpym:53
old "Filename List"
new "List Nama File"
new "Daftar Nama File"
# _developer/developer.rpym:57
old "Show Image Load Log"
@@ -127,7 +127,7 @@ translate indonesian strings:
# 00console.rpy:398
old "help: show this help"
new "help: menampilkan bantuan"
new "help: tampilkan bantuan"
# 00console.rpy:403
old "commands:\n"
@@ -143,7 +143,7 @@ translate indonesian strings:
# 00console.rpy:423
old "clear: clear the console history"
new "clear: membersikan histori konsol"
new "clear: membersihkan histori konsol"
# 00console.rpy:427
old "exit: exit the console"
@@ -159,7 +159,7 @@ translate indonesian strings:
# 00console.rpy:459
old "reload: reloads the game, refreshing the scripts"
new "reload: reload game, me refresh script"
new "reload: reload game, memuat ulang script"
# 00console.rpy:467
old "watch <expression>: watch a python expression"
@@ -176,4 +176,3 @@ translate indonesian strings:
# 00console.rpy:536
old "jump <label>: jumps to label"
new "jump <label>: lompat ke label"
+32 -28
View File
@@ -31,23 +31,23 @@ translate indonesian strings:
# android.rpy:30
old "To build Android packages, please download RAPT, unzip it, and place it into the Ren'Py directory. Then restart the Ren'Py launcher."
new "Untuk membuat package Android, silahkan download RAPT, unzip/extrak, dan taruh di direktori Ren,Py. Dan restart launcher Ren'Py."
new "Untuk membangun(package) ke versi Android, silahkan unduh RAPT, unzip/ekstrak, dan taruh di direktori Ren,Py. Dan muat ulang launcher Ren'Py."
# android.rpy:31
old "An x86 Java Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html}download and install the JDK{/a}, then restart the Ren'Py launcher."
new "Java Development Kit 32-bit di perlukan untuk membuat package Android di Windows, JDK itu berbeda dari JRE, jadi sangat mungkin kamu memiliki java tanpa JDK\n\nTolong {a=http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html}Download dan install JDK{/a}, lalu restart launcher Ren'Py "
new "x86 Java Development Kit diperlukan untuk membangun(package) ke versi Android di Windows, JDK berbeda dengan JRE, jadi sangat mungkin kamu memiliki java tanpa JDK\n\nTolong {a=http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html}Unduh dan pasang JDK{/a}, lalu muat ulang launcher Ren'Py "
# android.rpy:32
old "RAPT has been installed, but you'll need to install the Android SDK before you can build Android packages. Choose Install SDK to do this."
new "RAPT sudah terinstall, tapi kamu harus menginstall Android SDK sebelum kamu dapat membuat package Android. Untuk Melakukan Ini Pilih Install SDK"
new "RAPT sudah terpasang, tapi kamu harus memasang Android SDK sebelum kamu dapat membangun package Android. Untuk Melakukan Ini Pilih Install SDK"
# android.rpy:33
old "RAPT has been installed, but a key hasn't been configured. Please create a new key, or restore android.keystore."
new "RAPT sudah terinstall, tapi kunci/key belum di configurasi. Silahkan buat kunci/key baru, atau restore android.keystore"
new "RAPT sudah terpasang, tapi kunci/key belum di konfigurasi. Silahkan buat kunci/key baru, atau restore android.keystore"
# android.rpy:34
old "The current project has not been configured. Use \"Configure\" to configure it before building."
new "Projek ini belum di configurasi. Gunakan \"Konfigurasi\" untuk mengkonfigurasi sebelum membuat build."
new "Projek ini belum dikonfigurasi. Gunakan \"Konfigurasi\" untuk mengkonfigurasi sebelum membuat build."
# android.rpy:35
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."
@@ -55,7 +55,7 @@ translate indonesian strings:
# android.rpy:37
old "Attempts to emulate an Android phone.\n\nTouch input is emulated through the mouse, but only when the button is held down. Escape is mapped to the menu button, and PageUp is mapped to the back button."
new "Mencoba untuk mengemulasi perangkat Android.\n\nInput sentuhan di emulasikan melalui mouse, tapi hanya ketika tombol di tahan. Escape di mapped ke tombol menu, dan PageUp di mapped ke tombol back."
new "Uji coba pada perangkat Android.\n\nInput sentuhan di emulasikan melalui mouse, tapi hanya ketika tombol ditahan. Escape di mapped ke tombol menu, dan PageUp di mapped ke tombol back."
# android.rpy:38
old "Attempts to emulate an Android tablet.\n\nTouch input is emulated through the mouse, but only when the button is held down. Escape is mapped to the menu button, and PageUp is mapped to the back button."
@@ -67,7 +67,7 @@ translate indonesian strings:
# android.rpy:41
old "Downloads and installs the Android SDK and supporting packages. Optionally, generates the keys required to sign the package."
new "Download dan pasang Android SDK dan paket pendukung. Opsional, mengenerate key/kunci yang di butuhkan untuk menandatangani paket."
new "Unduh dan pasang Android SDK dan paket pendukung. Opsional, mengenerate key/kunci yang dibutuhkan untuk menandatangani paket."
# android.rpy:42
old "Configures the package name, version, and other information about this project."
@@ -167,7 +167,7 @@ translate indonesian strings:
# android.rpy:437
old "Before packaging Android apps, you'll need to download RAPT, the Ren'Py Android Packaging Tool. Would you like to download RAPT now?"
new "Sebelum mempackage aplikasi Android, kamu harus mendownload RAPT, Ren'Py Android Packaging Tool. Maukah kamu mendownload RAPT sekarang?"
new "Sebelum membangun(package) ke aplikasi Android, kamu harus mengunduh RAPT, Ren'Py Android Packaging Tool. unduh RAPT sekarang?"
# android.rpy:496
old "Remote ADB Address"
@@ -239,7 +239,7 @@ translate indonesian strings:
# distribute.rpy:459
old "Building distributions failed:\n\nThe build.directory_name variable may not include the space, colon, or semicolon characters."
new "Membangun distribusi gagal:\n\nVariabel build.directory_name mungkin tidak menginclude spasi ,tanda kutip ,atau titik koma."
new "Membangun distribusi gagal:\n\nVariabel build.directory_name mungkin tidak memasukan(include) spasi ,tanda kutip ,atau titik koma."
# distribute.rpy:504
old "No packages are selected, so there's nothing to do."
@@ -247,7 +247,7 @@ translate indonesian strings:
# distribute.rpy:516
old "Scanning Ren'Py files..."
new "Scanning file Ren'Py..."
new "Memindai file Ren'Py..."
# distribute.rpy:569
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."
@@ -507,7 +507,7 @@ translate indonesian strings:
# front_page.rpy:256
old "Extract Dialogue"
new "Extrak Dialog"
new "Ekstrak Dialog"
# front_page.rpy:272
old "Checking script for potential problems..."
@@ -719,7 +719,7 @@ translate indonesian strings:
# ios.rpy:345
old "Before packaging iOS apps, you'll need to download renios, Ren'Py's iOS support. Would you like to download renios now?"
new "Sebelum mem package aplikasi iOS, Kamu harus mendownload renios, Ren'Py iOS support. Maukah kamu mendownload renios sekarang?"
new "Sebelum membangun ke aplikasi iOS, Kamu harus mengunduh renios, Ren'Py iOS support.unduh renios sekarang?"
# ios.rpy:354
old "XCODE PROJECTS DIRECTORY"
@@ -883,7 +883,7 @@ translate indonesian strings:
# preferences.rpy:96
old "Not Set"
new "Belum di Set"
new "Belum diatur"
# preferences.rpy:111
old "Text Editor:"
@@ -959,7 +959,7 @@ translate indonesian strings:
# project.rpy:229
old "Launching the project failed."
new "Gagal menjalankan proyek."
new "Proyek gagal dijalankan."
# project.rpy:229
old "Please ensure that your project launches normally before running this command."
@@ -967,7 +967,7 @@ translate indonesian strings:
# project.rpy:242
old "Ren'Py is scanning the project..."
new "Ren'Py sedang menscan proyek..."
new "Ren'Py sedang memindai proyek..."
# project.rpy:568
old "Launching"
@@ -1007,7 +1007,7 @@ translate indonesian strings:
# translations.rpy:168
old "Extract String Translations"
new "Extrak Terjemahan String"
new "Ekstrak Terjemahan String"
# translations.rpy:170
old "Merge String Translations"
@@ -1027,7 +1027,7 @@ translate indonesian strings:
# translations.rpy:200
old "The extract command allows you to extract string translations from an existing project into a temporary file.\n\nThe merge command merges extracted translations into another project."
new "Perintah extrak memungkinkan kamu untuk mengextrak terjemahan string dari proyek ke file sementara.\n\nPerintah merge menyatukan terjemahan yang di extrak ke proyek lain."
new "Perintah ekstrak memungkinkan kamu untuk mengekstrak string terjemahan dari proyek ke file sementara.\n\nPerintah merge menyatukan terjemahan yang di ekstrak ke proyek lain."
# translations.rpy:224
old "Ren'Py is generating translations...."
@@ -1111,7 +1111,7 @@ translate indonesian strings:
# updater.rpy:102
old "Prerelease"
new "Prerelease"
new "Prarilis"
# updater.rpy:108
old "A preview of the next version of Ren'Py that can be used for testing and taking advantage of new features, but not for final releases of games."
@@ -1139,11 +1139,11 @@ translate indonesian strings:
# updater.rpy:154
old "Checking for updates."
new "Mencek untuk update."
new "Mencek pembaharuan."
# updater.rpy:156
old "Ren'Py is up to date."
new "Renpy sudah up to date."
new "Renpy sudah up to date (terbaru)."
# updater.rpy:158
old "[u.version] is now available. Do you want to install it?"
@@ -1151,15 +1151,15 @@ translate indonesian strings:
# updater.rpy:160
old "Preparing to download the update."
new "Bersiap mendownload update."
new "Bersiap mengunduh pembaharuan."
# updater.rpy:162
old "Downloading the update."
new "Mendownload update."
new "Pengunduhan pembaharuan."
# updater.rpy:164
old "Unpacking the update."
new "Meng unpack update."
new "Meng unpack pembaharuan."
# updater.rpy:166
old "Finishing up."
@@ -1167,19 +1167,19 @@ translate indonesian strings:
# updater.rpy:168
old "The update has been installed. Ren'Py will restart."
new "Update telah terpasang. Ren'Py akan restart."
new "Pembaharuan telah terpasang. Ren'Py akan restart."
# updater.rpy:170
old "The update has been installed."
new "Update telah di pasang."
new "Pembaharuan telah di pasang."
# updater.rpy:172
old "The update was cancelled."
new "Update telah di batalkan."
new "Pembaharuan telah di batalkan."
# updater.rpy:189
old "Ren'Py Update"
new "Update Ren'Py."
new "Perbaharui Ren'Py."
# updater.rpy:195
old "Proceed"
@@ -1302,7 +1302,7 @@ translate indonesian strings:
# game/install.rpy:144
old "Live2D in Ren'Py doesn't support the Web, Android x86_64 (including emulators and Chrome OS), and must be added to iOS projects manually. Live2D must be reinstalled after upgrading Ren'Py or installing Android support."
new "Live2D di Ren'py dukung mendukung versi web, Android x86_64 (termsuk emulator dan Chrome OS), dan harus ditambahkan secara manual/terpisah pada iOS. Live2D harus dipasang ulang apabila melakukan pemuktahiran(upgrade) Ren'py atau pada dukungan tambahan pada Androidnya."
new "Live2D di Ren'py tidak mendukung versi web, Android x86_64 (termsuk emulator dan Chrome OS), dan harus ditambahkan secara manual/terpisah pada iOS. Live2D harus dipasang ulang apabila melakukan pemuktahiran(upgrade) Ren'py atau pada dukungan tambahan pada Androidnya."
# game/install.rpy:151
old "Install Steam Support"
@@ -1319,3 +1319,7 @@ translate indonesian strings:
# game/web.rpy:242
old "Preparing progressive download"
new "Persiapan unduh"
# web.rpy:194
old "Before packaging web apps, you'll need to download RenPyWeb, Ren'Py's web support. Would you like to download RenPyWeb now?"
new "Sebelum membangun renpy ke versi web,kamu perlu mengunduh RenpyWeb (Ren'Py's web support),unduh sekarang?"
+4 -4
View File
@@ -887,7 +887,7 @@ void RPS_pause(int channel, int pause) {
}
void RPS_unpause_all(void) {
void RPS_unpause_all_at_start(void) {
int i;
@@ -895,7 +895,7 @@ void RPS_unpause_all(void) {
Py_BEGIN_ALLOW_THREADS
for (i = 0; i < num_channels; i++) {
if (channels[i].playing && channels[i].paused) {
if (channels[i].playing && channels[i].paused && channels[i].pos == 0) {
media_wait_ready(channels[i].playing);
}
}
@@ -903,8 +903,8 @@ void RPS_unpause_all(void) {
Py_END_ALLOW_THREADS
for (i = 0; i < num_channels; i++) {
channels[i].paused = 0;
if (channels[i].playing) {
if (channels[i].playing && channels[i].pos == 0) {
channels[i].paused = 0;
media_pause(channels[i].playing, 0);
}
}
+1 -1
View File
@@ -35,7 +35,7 @@ int RPS_queue_depth(int channel);
PyObject *RPS_playing_name(int channel);
void RPS_fadeout(int channel, int ms);
void RPS_pause(int channel, int pause);
void RPS_unpause_all(void);
void RPS_unpause_all_at_start(void);
void RPS_set_endevent(int channel, int event);
int RPS_get_pos(int channel);
double RPS_get_duration(int channel);
-2
View File
@@ -98,8 +98,6 @@ library("z")
has_libglew = library("GLEW", optional=True)
has_libglew32 = library("glew32", optional=True)
has_angle = windows and library("EGL", optional=True) and library("GLESv2", optional=True)
if android:
sdl = [ 'SDL2', 'GLESv2', 'log' ]
png = 'png16'
+2 -3
View File
@@ -81,10 +81,10 @@ official = official and getattr(site, "renpy_build_official", False)
if PY2:
# The tuple giving the version number.
version_tuple = (7, 5, 0, vc_version)
version_tuple = (7, 4, 11, vc_version)
# The name of this version.
version_name = "TBD"
version_name = "Lucky Beckoning Cat"
else:
@@ -466,7 +466,6 @@ def import_all():
import renpy.gl
import renpy.gl2
import renpy.angle
import renpy.display.layout
import renpy.display.viewport
-4
View File
@@ -1,4 +0,0 @@
# This file was automatically generated from renpy/gl/__init__.py
from __future__ import print_function
# Modifications will be automatically overwritten.
-1578
View File
File diff suppressed because it is too large Load Diff
-802
View File
@@ -1,802 +0,0 @@
import os
import renpy
cdef int check_errors
check_errors = int(os.environ.get("RENPY_GL_CHECK_ERRORS", 0))
cdef int glActiveTextureARB(GLenum a0) except? 0:
if check_errors & 4:
renpy.display.log.write('glActiveTextureARB')
cdef GLenum error
realGlActiveTextureARB(a0)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glActiveTextureARB' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glAttachObjectARB(GLhandleARB a0, GLhandleARB a1) except? 0:
if check_errors & 4:
renpy.display.log.write('glAttachObjectARB')
cdef GLenum error
realGlAttachObjectARB(a0, a1)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glAttachObjectARB' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glBindFramebufferEXT(GLenum a0, GLuint a1) except? 0:
if check_errors & 4:
renpy.display.log.write('glBindFramebufferEXT')
cdef GLenum error
realGlBindFramebufferEXT(a0, a1)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glBindFramebufferEXT' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glBindRenderbufferEXT(GLenum a0, GLuint a1) except? 0:
if check_errors & 4:
renpy.display.log.write('glBindRenderbufferEXT')
cdef GLenum error
realGlBindRenderbufferEXT(a0, a1)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glBindRenderbufferEXT' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glBindTexture(GLenum a0, GLuint a1) except? 0:
if check_errors & 4:
renpy.display.log.write('glBindTexture')
cdef GLenum error
realGlBindTexture(a0, a1)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glBindTexture' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glBlendFunc(GLenum a0, GLenum a1) except? 0:
if check_errors & 4:
renpy.display.log.write('glBlendFunc')
cdef GLenum error
realGlBlendFunc(a0, a1)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glBlendFunc' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glClear(GLbitfield a0) except? 0:
if check_errors & 4:
renpy.display.log.write('glClear')
cdef GLenum error
with nogil:
realGlClear(a0)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glClear' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glClearColor(GLclampf a0, GLclampf a1, GLclampf a2, GLclampf a3) except? 0:
if check_errors & 4:
renpy.display.log.write('glClearColor')
cdef GLenum error
realGlClearColor(a0, a1, a2, a3)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glClearColor' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glCompileShaderARB(GLhandleARB a0) except? 0:
if check_errors & 4:
renpy.display.log.write('glCompileShaderARB')
cdef GLenum error
realGlCompileShaderARB(a0)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glCompileShaderARB' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glCopyTexImage2D(GLenum a0, GLint a1, GLenum a2, GLint a3, GLint a4, GLsizei a5, GLsizei a6, GLint a7) except? 0:
if check_errors & 4:
renpy.display.log.write('glCopyTexImage2D')
cdef GLenum error
realGlCopyTexImage2D(a0, a1, a2, a3, a4, a5, a6, a7)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glCopyTexImage2D' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glCopyTexSubImage2D(GLenum a0, GLint a1, GLint a2, GLint a3, GLint a4, GLint a5, GLsizei a6, GLsizei a7) except? 0:
if check_errors & 4:
renpy.display.log.write('glCopyTexSubImage2D')
cdef GLenum error
realGlCopyTexSubImage2D(a0, a1, a2, a3, a4, a5, a6, a7)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glCopyTexSubImage2D' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef GLhandleARB glCreateProgramObjectARB() except? 0:
if check_errors & 4:
renpy.display.log.write('glCreateProgramObjectARB')
cdef GLenum error
cdef GLhandleARB rv = realGlCreateProgramObjectARB()
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glCreateProgramObjectARB' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return rv
cdef GLhandleARB glCreateShaderObjectARB(GLenum a0) except? 0:
if check_errors & 4:
renpy.display.log.write('glCreateShaderObjectARB')
cdef GLenum error
cdef GLhandleARB rv = realGlCreateShaderObjectARB(a0)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glCreateShaderObjectARB' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return rv
cdef int glDeleteFramebuffersEXT(GLsizei a0, GLuint * a1) except? 0:
if check_errors & 4:
renpy.display.log.write('glDeleteFramebuffersEXT')
cdef GLenum error
realGlDeleteFramebuffersEXT(a0, a1)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glDeleteFramebuffersEXT' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glDeleteProgram(GLuint a0) except? 0:
if check_errors & 4:
renpy.display.log.write('glDeleteProgram')
cdef GLenum error
realGlDeleteProgram(a0)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glDeleteProgram' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glDeleteRenderbuffersEXT(GLsizei a0, GLuint * a1) except? 0:
if check_errors & 4:
renpy.display.log.write('glDeleteRenderbuffersEXT')
cdef GLenum error
realGlDeleteRenderbuffersEXT(a0, a1)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glDeleteRenderbuffersEXT' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glDeleteShader(GLuint a0) except? 0:
if check_errors & 4:
renpy.display.log.write('glDeleteShader')
cdef GLenum error
realGlDeleteShader(a0)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glDeleteShader' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glDeleteTextures(GLsizei a0, GLuint * a1) except? 0:
if check_errors & 4:
renpy.display.log.write('glDeleteTextures')
cdef GLenum error
realGlDeleteTextures(a0, a1)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glDeleteTextures' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glDisable(GLenum a0) except? 0:
if check_errors & 4:
renpy.display.log.write('glDisable')
cdef GLenum error
realGlDisable(a0)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glDisable' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glDisableVertexAttribArrayARB(GLuint a0) except? 0:
if check_errors & 4:
renpy.display.log.write('glDisableVertexAttribArrayARB')
cdef GLenum error
realGlDisableVertexAttribArrayARB(a0)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glDisableVertexAttribArrayARB' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glDrawArrays(GLenum a0, GLint a1, GLsizei a2) except? 0:
if check_errors & 4:
renpy.display.log.write('glDrawArrays')
cdef GLenum error
realGlDrawArrays(a0, a1, a2)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glDrawArrays' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glEnable(GLenum a0) except? 0:
if check_errors & 4:
renpy.display.log.write('glEnable')
cdef GLenum error
realGlEnable(a0)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glEnable' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glEnableVertexAttribArrayARB(GLuint a0) except? 0:
if check_errors & 4:
renpy.display.log.write('glEnableVertexAttribArrayARB')
cdef GLenum error
realGlEnableVertexAttribArrayARB(a0)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glEnableVertexAttribArrayARB' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glFinish() except? 0:
if check_errors & 4:
renpy.display.log.write('glFinish')
cdef GLenum error
realGlFinish()
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glFinish' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glFramebufferRenderbufferEXT(GLenum a0, GLenum a1, GLenum a2, GLuint a3) except? 0:
if check_errors & 4:
renpy.display.log.write('glFramebufferRenderbufferEXT')
cdef GLenum error
realGlFramebufferRenderbufferEXT(a0, a1, a2, a3)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glFramebufferRenderbufferEXT' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glFramebufferTexture2DEXT(GLenum a0, GLenum a1, GLenum a2, GLuint a3, GLint a4) except? 0:
if check_errors & 4:
renpy.display.log.write('glFramebufferTexture2DEXT')
cdef GLenum error
realGlFramebufferTexture2DEXT(a0, a1, a2, a3, a4)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glFramebufferTexture2DEXT' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glGenFramebuffersEXT(GLsizei a0, GLuint * a1) except? 0:
if check_errors & 4:
renpy.display.log.write('glGenFramebuffersEXT')
cdef GLenum error
realGlGenFramebuffersEXT(a0, a1)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glGenFramebuffersEXT' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glGenRenderbuffersEXT(GLsizei a0, GLuint * a1) except? 0:
if check_errors & 4:
renpy.display.log.write('glGenRenderbuffersEXT')
cdef GLenum error
realGlGenRenderbuffersEXT(a0, a1)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glGenRenderbuffersEXT' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glGenTextures(GLsizei a0, GLuint * a1) except? 0:
if check_errors & 4:
renpy.display.log.write('glGenTextures')
cdef GLenum error
realGlGenTextures(a0, a1)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glGenTextures' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef GLint glGetAttribLocationARB(GLhandleARB a0, GLchar * a1) except? 0:
if check_errors & 4:
renpy.display.log.write('glGetAttribLocationARB')
cdef GLenum error
cdef GLint rv = realGlGetAttribLocationARB(a0, a1)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glGetAttribLocationARB' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return rv
cdef int glGetIntegerv(GLenum a0, GLint * a1) except? 0:
if check_errors & 4:
renpy.display.log.write('glGetIntegerv')
cdef GLenum error
realGlGetIntegerv(a0, a1)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glGetIntegerv' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glGetProgramInfoLog(GLhandleARB a0, GLsizei a1, GLsizei * a2, GLchar * a3) except? 0:
if check_errors & 4:
renpy.display.log.write('glGetProgramInfoLog')
cdef GLenum error
realGlGetProgramInfoLog(a0, a1, a2, a3)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glGetProgramInfoLog' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glGetProgramiv(GLuint a0, GLenum a1, GLint * a2) except? 0:
if check_errors & 4:
renpy.display.log.write('glGetProgramiv')
cdef GLenum error
realGlGetProgramiv(a0, a1, a2)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glGetProgramiv' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glGetShaderInfoLog(GLhandleARB a0, GLsizei a1, GLsizei * a2, GLchar * a3) except? 0:
if check_errors & 4:
renpy.display.log.write('glGetShaderInfoLog')
cdef GLenum error
realGlGetShaderInfoLog(a0, a1, a2, a3)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glGetShaderInfoLog' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glGetShaderiv(GLuint a0, GLenum a1, GLint * a2) except? 0:
if check_errors & 4:
renpy.display.log.write('glGetShaderiv')
cdef GLenum error
realGlGetShaderiv(a0, a1, a2)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glGetShaderiv' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef GLchar * glGetString(GLenum a0) except? NULL:
if check_errors & 4:
renpy.display.log.write('glGetString')
cdef GLenum error
cdef GLchar * rv = realGlGetString(a0)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glGetString' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return rv
cdef GLint glGetUniformLocationARB(GLhandleARB a0, GLchar * a1) except? 0:
if check_errors & 4:
renpy.display.log.write('glGetUniformLocationARB')
cdef GLenum error
cdef GLint rv = realGlGetUniformLocationARB(a0, a1)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glGetUniformLocationARB' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return rv
cdef int glLinkProgramARB(GLhandleARB a0) except? 0:
if check_errors & 4:
renpy.display.log.write('glLinkProgramARB')
cdef GLenum error
realGlLinkProgramARB(a0)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glLinkProgramARB' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glReadPixels(GLint a0, GLint a1, GLsizei a2, GLsizei a3, GLenum a4, GLenum a5, GLubyte * a6) except? 0:
if check_errors & 4:
renpy.display.log.write('glReadPixels')
cdef GLenum error
realGlReadPixels(a0, a1, a2, a3, a4, a5, a6)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glReadPixels' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glRenderbufferStorageEXT(GLenum a0, GLenum a1, GLsizei a2, GLsizei a3) except? 0:
if check_errors & 4:
renpy.display.log.write('glRenderbufferStorageEXT')
cdef GLenum error
realGlRenderbufferStorageEXT(a0, a1, a2, a3)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glRenderbufferStorageEXT' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glScissor(GLint a0, GLint a1, GLsizei a2, GLsizei a3) except? 0:
if check_errors & 4:
renpy.display.log.write('glScissor')
cdef GLenum error
realGlScissor(a0, a1, a2, a3)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glScissor' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glShaderSourceARB(GLhandleARB a0, GLsizei a1, GLchar * * a2, GLint * a3) except? 0:
if check_errors & 4:
renpy.display.log.write('glShaderSourceARB')
cdef GLenum error
realGlShaderSourceARB(a0, a1, a2, a3)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glShaderSourceARB' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glTexImage2D(GLenum a0, GLint a1, GLint a2, GLsizei a3, GLsizei a4, GLint a5, GLenum a6, GLenum a7, GLubyte * a8) except? 0:
if check_errors & 4:
renpy.display.log.write('glTexImage2D')
cdef GLenum error
realGlTexImage2D(a0, a1, a2, a3, a4, a5, a6, a7, a8)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glTexImage2D' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glTexParameteri(GLenum a0, GLenum a1, GLint a2) except? 0:
if check_errors & 4:
renpy.display.log.write('glTexParameteri')
cdef GLenum error
realGlTexParameteri(a0, a1, a2)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glTexParameteri' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glTexSubImage2D(GLenum a0, GLint a1, GLint a2, GLint a3, GLsizei a4, GLsizei a5, GLenum a6, GLenum a7, GLubyte * a8) except? 0:
if check_errors & 4:
renpy.display.log.write('glTexSubImage2D')
cdef GLenum error
realGlTexSubImage2D(a0, a1, a2, a3, a4, a5, a6, a7, a8)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glTexSubImage2D' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glUniform1fARB(GLint a0, GLfloat a1) except? 0:
if check_errors & 4:
renpy.display.log.write('glUniform1fARB')
cdef GLenum error
realGlUniform1fARB(a0, a1)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glUniform1fARB' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glUniform1iARB(GLint a0, GLint a1) except? 0:
if check_errors & 4:
renpy.display.log.write('glUniform1iARB')
cdef GLenum error
realGlUniform1iARB(a0, a1)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glUniform1iARB' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glUniform2fARB(GLint a0, GLfloat a1, GLfloat a2) except? 0:
if check_errors & 4:
renpy.display.log.write('glUniform2fARB')
cdef GLenum error
realGlUniform2fARB(a0, a1, a2)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glUniform2fARB' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glUniform4fARB(GLint a0, GLfloat a1, GLfloat a2, GLfloat a3, GLfloat a4) except? 0:
if check_errors & 4:
renpy.display.log.write('glUniform4fARB')
cdef GLenum error
realGlUniform4fARB(a0, a1, a2, a3, a4)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glUniform4fARB' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glUniformMatrix4fvARB(GLint a0, GLsizei a1, GLboolean a2, GLfloat * a3) except? 0:
if check_errors & 4:
renpy.display.log.write('glUniformMatrix4fvARB')
cdef GLenum error
realGlUniformMatrix4fvARB(a0, a1, a2, a3)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glUniformMatrix4fvARB' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glUseProgramObjectARB(GLhandleARB a0) except? 0:
if check_errors & 4:
renpy.display.log.write('glUseProgramObjectARB')
cdef GLenum error
realGlUseProgramObjectARB(a0)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glUseProgramObjectARB' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glVertexAttribPointerARB(GLuint a0, GLint a1, GLenum a2, GLboolean a3, GLsizei a4, GLubyte * a5) except? 0:
if check_errors & 4:
renpy.display.log.write('glVertexAttribPointerARB')
cdef GLenum error
realGlVertexAttribPointerARB(a0, a1, a2, a3, a4, a5)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glVertexAttribPointerARB' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
cdef int glViewport(GLint a0, GLint a1, GLsizei a2, GLsizei a3) except? 0:
if check_errors & 4:
renpy.display.log.write('glViewport')
cdef GLenum error
realGlViewport(a0, a1, a2, a3)
if check_errors:
error = realGlGetError()
if error:
message = 'GL error %x in glViewport' % error
if check_errors & 1:
renpy.display.log.write('%s', message)
if check_errors & 2:
raise Exception(message)
return 1
-51
View File
@@ -1,51 +0,0 @@
# This file was automatically generated from renpy/gl/glblacklist.py
# Modifications will be automatically overwritten.
# Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
# (the "Software"), to deal in the Software without restriction,
# including without limitation the rights to use, copy, modify, merge,
# publish, distribute, sublicense, and/or sell copies of the Software,
# and to permit persons to whom the Software is furnished to do so,
# subject to the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
# The blacklist of OpenGL cards. Fields are:
# - A substring of the Renderer.
# - A substring of the Version.
# - True to allow shader rendering.
# - True to allow fixed-function rendering.
# If both of the last two entries are false, GL refuses to
# start.
from __future__ import print_function
BLACKLIST = [
# Crashes for Mugenjohncel.
("S3 Graphics DeltaChrome", "1.4 20.00", False, False),
# A bug in Mesa 7.9 and 7.10 (before 7.10.3) causes the system to
# fail to initialize the GLSL compiler.
# https://bugs.freedesktop.org/show_bug.cgi?id=35603
("Mesa", "Mesa 7.9", False, True),
("Mesa", "Mesa 7.10.3", True, True),
("Mesa", "Mesa 7.10", False, True),
# Default to allowing everything.
("", "", True, True),
]
+2 -2
View File
@@ -653,7 +653,7 @@ class Channel(object):
for filename in filenames:
filename, _, _ = self.split_filename(filename, False)
renpy.game.persistent._seen_audio[filename] = True # @UndefinedVariable
renpy.game.persistent._seen_audio[str(filename)] = True # @UndefinedVariable
if not loop_only:
@@ -1096,7 +1096,7 @@ def periodic_pass():
need_ss = True
if need_ss:
renpysound.unpause_all()
renpysound.unpause_all_at_start()
for c in all_channels:
c.synchro_start = False
+4 -5
View File
@@ -63,7 +63,7 @@ cdef extern from "renpysound_core.h":
object RPS_playing_name(int channel)
void RPS_fadeout(int channel, int ms)
void RPS_pause(int channel, int pause)
void RPS_unpause_all()
void RPS_unpause_all_at_start()
int RPS_get_pos(int channel)
double RPS_get_duration(int channel)
void RPS_set_endevent(int channel, int event)
@@ -224,12 +224,12 @@ def unpause(channel):
RPS_pause(channel, 0)
check_error()
def unpause_all():
def unpause_all_at_start():
"""
Unpauses all channels that are paused.
Unpauses all channels that are paused at the start.
"""
RPS_unpause_all()
RPS_unpause_all_at_start()
def fadeout(channel, delay):
"""
@@ -430,4 +430,3 @@ def sample_surfaces(rgb, rgba):
RPS_sample_surfaces(rgb, rgba)
# When changing this API, change webaudio.py, too!
+2 -3
View File
@@ -160,12 +160,12 @@ def unpause(channel):
call("unpause", channel)
def unpause_all():
def unpause_all_at_start():
"""
Unpauses all channels that are paused.
"""
call("unpause_all")
call("unpauseAllAtStart")
def fadeout(channel, delay):
@@ -350,4 +350,3 @@ def sample_surfaces(rgb, rgba):
"""
return
+4 -4
View File
@@ -19,7 +19,7 @@
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
init -1100 python:
init -1900 python:
# This is called when script_version is set, to immediately
# run code in response to a script_version change.
@@ -225,8 +225,8 @@ init -1100 python:
config.relative_transform_size = False
config.tts_front_to_back = False
if version <= (7, 5, 0):
style.drag.focus_mask = True
if version <= (7, 4, 10):
config.always_unfocus = False
# The version of Ren'Py this script is intended for, or
# None if it's intended for the current version.
@@ -275,7 +275,7 @@ init -1000 python hide:
except:
pass
init 1100 python hide:
init 1900 python hide:
# This returns true if the script_version is <= the
# script_version supplied. Give it the last script version
+39 -8
View File
@@ -76,6 +76,36 @@ init -1100 python in gui:
if persistent._gui_preference_default is None:
persistent._gui_preference_default = { }
# A list of variant, function tuples.
variant_functions = [ ]
def variant(f, variant=None):
"""
:doc: gui
A decorator that causes a function to be called when the gui is first
initialized, and again each time the gui is rebuilt. This is intended
to be used as a function decorator, of the form::
@gui.variant
def small():
gui.text_size = 30
# ...
It can also be called with `f` (a function) and `variant` (a string),
giving the variant name.
"""
if variant is None:
variant = f.__name__
variant_functions.append((variant, f))
if renpy.variant(variant):
f()
return f
def rebuild():
"""
:doc: gui
@@ -85,8 +115,17 @@ init -1100 python in gui:
Note: This is a very slow function.
"""
global variant_functions
old_variant_functions = variant_functions
renpy.ast.redefine([ "store.gui" ])
variant_functions = old_variant_functions
for variant, f in variant_functions:
if renpy.variant(variant):
f()
for i in config.translate_clean_stores:
renpy.python.clean_store_backup.backup_one("store." + i)
@@ -584,11 +623,3 @@ init -1100 python in gui:
return False
renpy.arguments.register_command("gui_images", _gui_images)
+1 -1
View File
@@ -437,7 +437,7 @@ init -1500 python:
elif name == _("rollback side"):
if value in [ "left", "right", "disable" ]:
if renpy.mobile:
if renpy.variant("mobile"):
field = "mobile_rollback_side"
else:
field = "desktop_rollback_side"
+1 -1
View File
@@ -362,7 +362,7 @@ init -1800:
yfill False
style drag:
focus_mask None
focus_mask True
# Out-of-game menu root windows
+8 -4
View File
@@ -115,6 +115,7 @@ let start_playing = (c) => {
}
p.started = context.currentTime;
p.started_once = true;
};
@@ -190,7 +191,8 @@ renpyAudio.queue = (channel, file, name, paused, fadein, tight, start, end) =>
started : null,
fadein : fadein,
fadeout: null,
tight : tight
tight : tight,
started_once : false
};
if (c.playing === null) {
@@ -315,9 +317,11 @@ renpyAudio.unpause = (channel) => {
};
renpyAudio.unpauseAll = () => {
for (let i of Object.entries(channel)) {
start_playing(i[1]);
renpyAudio.unpauseAllAtStart = () => {
for (let i of Object.entries(channels)) {
if (i[1].playing && ! i[1].playing.started_once ) {
start_playing(i[1]);
}
}
};
+4
View File
@@ -1192,6 +1192,10 @@ debug_prediction = False
# Should mouse events that cause a window to gain focus be passed through.
mouse_focus_clickthrough = False
# Should the current displayable always run its unfocus handler, even when
# focus is taken away by default.
always_unfocus = True
del os
del collections
+9 -3
View File
@@ -513,6 +513,9 @@ class PauseBehavior(renpy.display.layout.Null):
def event(self, ev, x, y, st):
if ev.type == renpy.display.core.TIMEEVENT and ev.modal:
return
if st >= self.delay:
if self.voice and renpy.config.nw_voice:
@@ -634,7 +637,7 @@ class SayBehavior(renpy.display.layout.Null):
if not renpy.config.enable_rollback_side:
rollback_side = "disable"
if renpy.exports.mobile:
if renpy.exports.variant("mobile"):
rollback_side = renpy.game.preferences.mobile_rollback_side
else:
rollback_side = renpy.game.preferences.desktop_rollback_side
@@ -2258,13 +2261,16 @@ class Timer(renpy.display.layout.Null):
# Did we start the timer?
self.started = False
if replaces is not None:
if isinstance(replaces, Timer):
self.state = replaces.state
else:
self.state = TimerState()
def event(self, ev, x, y, st):
if ev.type == renpy.display.core.TIMEEVENT and ev.modal:
return
state = self.state
if not state.started:
@@ -2304,7 +2310,7 @@ class MouseArea(renpy.display.core.Displayable):
# Are we hovered right now?
self.is_hovered = False
if replaces is not None:
if isinstance(replaces, MouseArea):
self.is_hovered = replaces.is_hovered
# Taken from the render.
+21 -22
View File
@@ -1346,20 +1346,27 @@ class SceneLists(renpy.object.Object):
rv.append_scene_list(self.layers[layer])
rv.layer_name = layer
rv._duplicatable = False
rv._layer_at_list = self.layer_at_list[layer]
rv._camera_list = self.camera_list[layer]
return rv
def transform_layer(self, layer, d):
def transform_layer(self, layer, d, layer_at_list=None, camera_list=None):
"""
When `d` is a layer created with make_layer, returns `d` with the
various at_list transformas applied to it.
various at_list transforms applied to it.
"""
if layer_at_list is None:
layer_at_list = self.layer_at_list[layer]
if camera_list is None:
camera_list = self.camera_list[layer]
rv = d
# Layer at list.
time, at_list = self.layer_at_list[layer]
time, at_list = layer_at_list
old_transform = self.layer_transform.get(layer, None)
new_transform = None
@@ -1387,7 +1394,7 @@ class SceneLists(renpy.object.Object):
# Camera list.
time, at_list = self.camera_list[layer]
time, at_list = camera_list
old_transform = self.camera_transform.get(layer, None)
new_transform = None
@@ -2270,9 +2277,6 @@ class Interface(object):
pygame.display.hint("SDL_MOUSE_TOUCH_EVENTS", "0")
pygame.display.hint("SDL_EMSCRIPTEN_ASYNCIFY", "0")
if renpy.config.mouse_focus_clickthrough:
pygame.display.hint("SDL_MOUSE_FOCUS_CLICKTHROUGH", "1")
pygame.display.set_screensaver(renpy.config.allow_screensaver)
# Needed for Ubuntu Unity.
@@ -3401,21 +3405,13 @@ class Interface(object):
self.consider_gc()
step += 1
# Step 2: Load downloaded resources
# Step 2: Push textures to GPU.
elif step == 2:
if renpy.emscripten or os.environ.get('RENPY_SIMULATE_DOWNLOAD', False):
renpy.webloader.process_downloaded_resources()
step += 1
# Step 3: Push textures to GPU.
elif step == 3:
renpy.display.draw.ready_one_texture()
step += 1
# Step 4: Predict more images.
elif step == 4:
# Step 3: Predict more images.
elif step == 3:
if not self.prediction_coroutine:
step += 1
@@ -3436,16 +3432,16 @@ class Interface(object):
if not expensive:
step += 1
# Step 5: Preload images (on emscripten)
elif step == 5:
# Step 4: Preload images (on emscripten)
elif step == 4:
if expensive and renpy.emscripten:
renpy.display.im.cache.preload_thread_pass()
step += 1
# Step 6: Autosave.
elif step == 6:
# Step 5: Autosave.
elif step == 5:
if not self.did_autosave:
renpy.loadsave.autosave()
@@ -3800,6 +3796,9 @@ class Interface(object):
# Check for autoreload.
renpy.loader.check_autoreload()
if renpy.emscripten or os.environ.get('RENPY_SIMULATE_DOWNLOAD', False):
renpy.webloader.process_downloaded_resources()
for i in renpy.config.needs_redraw_callbacks:
if i():
needs_redraw = True
+2 -2
View File
@@ -309,7 +309,7 @@ class Drag(renpy.display.core.Displayable, renpy.python.RevertableObject):
# A z index that's changed when something is raised or lowered.
self.z = 0
if replaces is not None:
if isinstance(replaces, Drag):
self.x = replaces.x
self.y = replaces.y
self.at = replaces.at
@@ -804,7 +804,7 @@ class DragGroup(renpy.display.layout.MultiBox):
self.sorted = False
if replaces is not None:
if isinstance(replaces, DragGroup):
self.positions = renpy.python.RevertableDict(replaces.positions)
self.sensitive = replaces.sensitive
self.z_serial = replaces.z_serial
+8 -2
View File
@@ -123,7 +123,7 @@ def dynamic_keyboard(st, at):
if keyboard is None:
keyboard = renpy.store.Fixed(
renpy.store.Solid("#000", yalign=1.0, ymaximum=.625),
renpy.store.Solid("#0008", yalign=1.0, ymaximum=.625),
renpy.store.Text("On-Screen Keyboard", xalign=.5, yalign=.75),
)
null = renpy.store.Null()
@@ -169,7 +169,13 @@ def init_emulator():
emulator = null_emulator
overlay = [ ]
if emulator is not null_emulator:
def early_init_emulator():
name = os.environ.get("RENPY_EMULATOR", "")
if name:
renpy.exports.windows = False
renpy.exports.linux = False
renpy.exports.macintosh = False
+6 -1
View File
@@ -278,6 +278,7 @@ def before_interact(roots):
current = get_focused()
current = replaced_by.get(id(current), current)
old_current = current
# Update the grab.
grab = replaced_by.get(id(grab), None)
@@ -332,7 +333,11 @@ def before_interact(roots):
if f is not current:
renpy.display.screen.push_current_screen(screen)
try:
f.unfocus(default=default)
if (f is old_current) and renpy.config.always_unfocus:
f.unfocus(default=False)
else:
f.unfocus(default=default)
finally:
renpy.display.screen.pop_current_screen()
+3 -1
View File
@@ -593,6 +593,7 @@ def check_modal(modal, ev, x, y, w, h):
if modal(ev, x, y, w, h):
if (ev is not None) and (ev.type == renpy.display.core.TIMEEVENT):
ev.modal = True
return False
return True
@@ -685,7 +686,8 @@ class MultiBox(Container):
if new_d is not old_d:
changed = True
new_d = renpy.game.context().scene_lists.transform_layer(layer, new_d)
new_d = renpy.game.context().scene_lists.transform_layer(layer, new_d, layer_at_list=old_d._layer_at_list, camera_list=old_d._camera_list)
rv.layers[layer] = new_d
else:
new_d = self.layers[layer]
+1 -1
View File
@@ -24,7 +24,7 @@ from renpy.display.matrix cimport Matrix, Matrix2D
cdef class Render:
cdef public bint mark, cache_killed
cdef public bint mark, cache_killed, killed
cdef public float width, height
cdef public object layer_name
+36 -6
View File
@@ -538,7 +538,7 @@ def mark_sweep():
for r in live_renders:
if not r.mark:
r.kill_cache()
r.kill()
else:
r.mark = False
@@ -603,6 +603,9 @@ cdef class Render:
# Is has this render been removed from the cache?
self.cache_killed = False
# Has this render been completely killed?
self.killed = False
self.width = width
self.height = height
@@ -728,8 +731,15 @@ cdef class Render:
live_renders.append(self)
def __repr__(self): #@DuplicatedSignature
if self.killed:
live = "dead "
elif self.cache_killed:
live = "cache-killed "
else:
live = ""
return "<{}Render {:x} of {!r}>".format(
("dead " if self.cache_killed else ""),
live,
id(self),
self.render_of)
@@ -1081,6 +1091,30 @@ cdef class Render:
for i in list(self.parents):
i.kill_cache()
for ro in self.render_of:
id_ro = id(ro)
cache = render_cache[id_ro]
for k, v in list(cache.items()):
if v is self:
del cache[k]
if not cache:
del render_cache[id_ro]
def kill(self):
"""
Prepares this render and its parents for deallocation.
"""
if self.killed:
return
self.killed = True
for i in list(self.parents):
i.kill()
self.parents.clear()
for i in list(self.depends_on_list):
@@ -1117,10 +1151,6 @@ cdef class Render:
self.cached_texture = None
self.cached_model = None
def kill(self):
"""
Retained for compatibility, but does not need to be called.
"""
def add_focus(self, d, arg=None, x=0, y=0, w=None, h=None, mx=None, my=None, mask=None):
"""
+7 -6
View File
@@ -19,10 +19,8 @@
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
# This file contains functions that are exported to the script namespace.
# Functions defined in this file can be updated by the user to change
# their behavior, while functions imported in are probably best left
# alone as part of the api.
# This file contains functions that are exported to the script namespace as
# the renpy namespace. (So renpy.say, renpy.pause, and so on.)
from __future__ import division, absolute_import, with_statement, print_function, unicode_literals
from renpy.compat import *
@@ -1298,8 +1296,12 @@ def display_menu(items,
rv = renpy.ui.interact(mouse='menu', type=type, roll_forward=roll_forward)
for label, val in items:
if isinstance(val, renpy.ui.ChoiceReturn):
val = val.value
if rv == val:
log("User chose: " + label)
log("Player chose: " + label)
break
else:
log("No choice chosen.")
@@ -4258,4 +4260,3 @@ def request_permission(permission):
return False
return get_sdl_dll().SDL_AndroidRequestPermission(permission.encode("utf-8"))
+2 -5
View File
@@ -449,10 +449,7 @@ cdef class GL2Draw:
if not fullscreen:
renpy.game.preferences.physical_size = self.get_physical_size()
if renpy.mobile:
print("Screen sizes: virtual=%r physical=%r drawable=%r" % (self.virtual_size, self.physical_size, self.drawable_size))
else:
renpy.display.log.write("Screen sizes: virtual=%r physical=%r drawable=%r" % (self.virtual_size, self.physical_size, self.drawable_size))
renpy.display.log.write("Screen sizes: virtual=%r physical=%r drawable=%r" % (self.virtual_size, self.physical_size, self.drawable_size))
if renpy.config.adjust_view_size is not None:
view_width, view_height = renpy.config.adjust_view_size(pwidth, pheight)
@@ -1296,7 +1293,7 @@ cdef class GL2DrawingContext:
if depth:
glClear(GL_DEPTH_BUFFER_BIT)
glEnable(GL_DEPTH_TEST)
glDepthFunc(GL_LESS)
glDepthFunc(GL_LEQUAL)
properties["has_depth"] = True
+27 -4
View File
@@ -706,6 +706,11 @@ class Live2D(renpy.display.core.Displayable):
# Determine the current motion.
motion_st = st
if st_fade is not None:
motion_st = st - st_fade
for m in self.motions:
motion = common.motions.get(m, None)
@@ -715,6 +720,10 @@ class Live2D(renpy.display.core.Displayable):
if motion.duration > st:
break
elif (motion.duration > motion_st) and not common.is_seamless(m):
break
motion_st -= motion.duration
st -= motion.duration
current_index += 1
@@ -722,9 +731,18 @@ class Live2D(renpy.display.core.Displayable):
if motion is None:
return None
if not self.loop:
if (not self.loop) or (not motion.duration):
st = motion.duration
last_frame = True
elif (st_fade is not None) and not common.is_seamless(m):
# This keeps a motion from being restarted after it would have
# been faded out.
motion_start = motion_st - motion_st % motion.duration
if (st - motion_start) > motion.duration:
st = motion.duration
last_frame = True
if motion is None:
return None
@@ -754,7 +772,7 @@ class Live2D(renpy.display.core.Displayable):
if (last_name == current_name) and common.is_seamless(current_name):
do_fade_in = False
if (next_name == current_name) and common.is_seamless(current_name):
if (next_name == current_name) and common.is_seamless(current_name) and (st_fade is None):
do_fade_out = False
# Apply the motion.
@@ -870,14 +888,19 @@ class Live2D(renpy.display.core.Displayable):
model.reset_parameters()
if fade:
old_redraw = state.old.update(common, renpy.display.interface.frame_time - state.old_base_time, st)
t = renpy.display.interface.frame_time - state.new_base_time
else:
old_redraw = None
t = st
new_redraw = self.update(common, t, None)
if fade:
old_redraw = state.old.update(common, renpy.display.interface.frame_time - state.old_base_time, st)
else:
old_redraw = None
model.finish_parameters()
# Apply the expressions.
expression_redraw = self.update_expressions(st)
+25 -7
View File
@@ -119,6 +119,7 @@ class Parameter(object):
self.minimum = minimum
self.maximum = maximum
self.default = default
self.remaining = 1.0
class Part(object):
@@ -126,6 +127,7 @@ class Part(object):
self.index = index
self.name = name
self.default_opacity = default_opacity
self.remaining = 1.0
cdef class Live2DModel:
"""
@@ -263,11 +265,17 @@ cdef class Live2DModel:
csmUpdateModel(self.model)
def reset_parameters(self):
"""
Resets the parameters, and resets the remaining weight to 1.0.
"""
for i in self.parameters.values():
self.parameter_values[i.index] = i.default
self.parameter_values[i.index] = 0.0
i.remaining = 1.0
for i in self.parts.values():
self.part_opacities[i.index] = i.default_opacity
self.part_opacities[i.index] = 0.0
i.remaining = 1.0
def set_part_opacity(self, name, value):
@@ -278,7 +286,8 @@ cdef class Live2DModel:
self.set_part_opacity(i, value)
return
self.part_opacities[part.index] = value
self.part_opacities[part.index] += value * part.remaining
part.remaining = 0.0
def set_parameter(self, name, value, weight=1.0):
parameter = self.parameters.get(name, None)
@@ -288,8 +297,20 @@ cdef class Live2DModel:
self.set_parameter(i, value, weight=weight)
return
weight = min(weight, parameter.remaining)
old = self.parameter_values[parameter.index]
self.parameter_values[parameter.index] = old + weight * (value - old)
self.parameter_values[parameter.index] += weight * value
parameter.remaining -= weight
def finish_parameters(self):
for i in self.parameters.values():
self.parameter_values[i.index] += i.default * i.remaining
i.remaining = 0.0
for i in self.parts.values():
self.part_opacities[i.index] += i.default_opacity * i.remaining
i.remaining = 0.0
def blend_parameter(self, name, blend, value, weight=1.0):
@@ -330,9 +351,6 @@ cdef class Live2DModel:
csmUpdateModel(self.model)
# Render the model.
# w = self.pixel_size.X
# h = self.pixel_size.Y
w = int(zoom * self.pixel_size.X)
h = int(zoom * self.pixel_size.Y)
+6
View File
@@ -219,6 +219,7 @@ class Motion(object):
factor = max(factor, 0.0)
t = st
i = None
for i in segments:
if t <= i.duration:
@@ -228,6 +229,11 @@ class Motion(object):
t -= i.duration
else:
if i is not None:
t = i.duration
rv[k] = (factor, i.get(t))
return rv
def wait(self, st, fade_st, do_fade_in, do_fade_out):
+1
View File
@@ -161,6 +161,7 @@ def choose_variants():
if "RENPY_VARIANT" in os.environ:
renpy.config.variants = list(os.environ["RENPY_VARIANT"].split()) + [ None ]
renpy.display.emulator.early_init_emulator()
return
renpy.config.variants = [ None ]
+2
View File
@@ -99,6 +99,8 @@ class Persistent(object):
if not self._seen_audio:
self._seen_audio = { }
self._seen_audio = { str(i) : True for i in self._seen_audio }
# The set of seen translate identifiers.
if not self._seen_translates:
self._seen_translates = set()
+17 -3
View File
@@ -96,6 +96,9 @@ class SLContext(renpy.ui.Addable):
# The local scope that python code is evaluated in.
self.scope = { }
# The scope of the top-level screen.
self.root_scope = self.scope
# The global scope that python code is evaluated in.
self.globals = { }
@@ -785,6 +788,9 @@ class SLDisplayable(SLBlock):
for i, local_scope, context_scope in cache.constant_uses_scope:
if context_scope is None:
context_scope = context.root_scope
if local_scope:
scope = dict(context_scope)
scope.update(local_scope)
@@ -1139,7 +1145,10 @@ class SLDisplayable(SLBlock):
if i in ctx.scope:
local_scope[i] = ctx.scope[i]
ctx.uses_scope.append((main, local_scope, ctx.scope))
if ctx.scope is context.root_scope:
ctx.uses_scope.append((main, local_scope, None))
else:
ctx.uses_scope.append((main, local_scope, ctx.scope))
cache.constant_uses_scope = ctx.uses_scope
@@ -1901,7 +1910,9 @@ class SLUse(SLNode):
if args:
raise Exception("Screen {} does not take positional arguments. ({} given)".format(self.target, len(args)))
scope = context.scope.copy()
scope = ctx.old_cache.get("scope", None) or ctx.miss_cache.get("scope", None) or { }
scope.clear()
scope.update(context.scope)
scope.update(kwargs)
scope["_scope"] = scope
@@ -2153,7 +2164,9 @@ class SLCustomUse(SLNode):
if args:
raise Exception("Screen {} does not take positional arguments. ({} given)".format(self.target, len(args)))
scope = context.scope.copy()
scope = ctx.old_cache.get("scope", None) or ctx.miss_cache.get("scope", None) or { }
scope.clear()
scope.update(context.scope)
scope.update(kwargs)
scope["_scope"] = scope
@@ -2400,6 +2413,7 @@ class SLScreen(SLBlock):
context = SLContext()
context.scope = scope
context.root_scope = scope
context.globals = renpy.python.store_dicts["store"]
context.debug = debug
context.predicting = renpy.display.predict.predicting
+1 -1
View File
@@ -1590,7 +1590,7 @@ class Text(renpy.display.core.Displayable):
self.start = None
self.end = None
if replaces is not None:
if isinstance(replaces, Text):
self.slow = replaces.slow
self.slow_done = replaces.slow_done
self.ctc = replaces.ctc
+2 -7
View File
@@ -202,7 +202,8 @@ def enqueue(relpath, rtype, data):
def process_downloaded_resources():
global queue, to_unlink
reload_needed = False
if not queue:
return
with queue_lock:
@@ -230,7 +231,6 @@ def process_downloaded_resources():
# mark for deletion
fullpath = os.path.join(renpy.config.gamedir,rr.relpath)
to_unlink[fullpath] = time.time()
reload_needed = True
elif rr.rtype == 'music':
# - just wait for the 0.5s placeholder to finish,
@@ -250,11 +250,6 @@ def process_downloaded_resources():
finally:
queue = postponed + todo
if reload_needed:
# Refresh the screen and re-load images flushed from cache
# Note: done at next Ren'Py interaction (prediction reset)
renpy.display.render.free_memory()
# Free files from memory once they are loaded
# Due to search-path dups and derived images (including image-based animations)
# files can't be removed right after actual load
+1 -1
View File
@@ -1262,6 +1262,6 @@ in the parent. This is because a displayable may have only one position, and
a position that is actively set takes precedence. These properties may be set in
multiple ways - for example, :tpref:`xalign` sets xpos and xanchor.
Finally, when a ``show`` statement does not include and ``at`` clause, the
Finally, when a ``show`` statement does not include an ``at`` clause, the
same displayables are used, so no inheritence is necessary. To prevent inheritance,
show and then hide the displayable.
+101 -26
View File
@@ -2,40 +2,110 @@
Changelog (Ren'Py 7.x-)
=======================
.. _renpy-7.5.0:
7.5
===
ChromeOS
--------
When running as an Android application on a ChromeOS device, the "chromeos"
variant will be selected.
Features
--------
The new :var:`config.mouse_focus_clickthrough` variable determines if clicks that
cause the game window to be focused will be processed normally.
The launcher now runs with :var:`config.mouse_focus_clickthrough` true, which
means that it will only take a single click to launch the game.
The :propref:`focus_mask` style property now defaults to None for drag displayables.
This improves performance, but means that the displayable can be dragged by
transparent pixels.
.. _renpy-7.4.11:
7.4.11
======
The gui.variant Decorator
-------------------------
A new gui.variant decorator has been added to Ren'Py. This should be used
to decorate a function with the name of a variant, and causes that function
to be run, if the variant is active, when the game is first started, and then
each time the gui is rebuilt (which happens when :func:`gui.rebuild` is called,
when a gui preference is changed, or when the translation changes.)
This is expected to be used like::
init python:
@gui.variant
def small():
## Font sizes.
gui.text_size = gui.scale(30)
gui.name_text_size = gui.scale(36)
# ...
as a replacement for::
init python:
if renpy.variant("small"):
## Font sizes.
gui.text_size = gui.scale(30)
gui.name_text_size = gui.scale(36)
# ...
Which only runs once, and lost the changes if the gui was ever rebuilt.
Fixes
-----
When a Live2D motion contains a curve with a shorter duration then the motion
it is part of, the last value of the curve is retained to the end of the
motion.
Rare issues with a displayable being replaced by a displayable of a different
type are now guarded against. This should only occur when a game is updated
between saves.
Modal displayables now prevent pauses from ending.
An issue that could cause images to not display in some cases (when a displayable
was invalidated) has been fixed.
Starting a movie no longer causes paused sounds to unpause.
AudioData objects are no longer stored in the persistent data. Such objects
are removed when persistent data is loaded, if present.
Platform variables like renpy.android and renpy.ios are now set to follow
the emulated platform, when Ren'Py is emulating ios or android.
When in the iOS and Android emulator, the mobile rollback side is used.
Ren'Py will now always run an `unhovered` action when a displayable (or its
replacement) remains shown, and the focus changes. Previously, the unhovered
action would not run when the loss of focus was caused by showing a second
screen.
When :var:`config.log` is true, the selected choice is now logged properly.
The new :func:`gui.variant` function makes it possible to work around
an issue in the standard gui where the calling :func:`gui.rebuild` would cause
gui variants to reset.
The web browser now checks for progressively downloaded images once per
frame, allowing images to be loaded into the middle of an animation.
Live2D now uses saturation arithmetic to combine motion fadeins and fadeouts,
such that if the fadein contributes 80% of a parameter value, and the
fadeout contributes 20% of the value, 100% of the value comes from
the two motions. (Previously, the fadein and fadeout were applied
independently, such that together, the fadein and fadeout would
contribute 84% of the value, with the remaining 16% taken from
the default.)
When fading from one sequence of Live2D motions to another, the original
sequence ends when a motion fades out.
When preserving screens in the old state for a transition, the later_at_list
and camera lists are taken from the old state, preventing unexpected changes.
The :tpref:`gl_depth` property now causes Ren'Py to use GL_LEQUALS,
which more closely matches Ren'Py's semantics.
The 4-component constructor for matrices has been fixed.
Ren'Py now cleans out the android build directories when producing a Android
App Bundle (AAB) file, preventing problems that might be caused when packaging
multiple games, or a single game where files are deleted.
Live2d now properly handles seamless animation when the same motion is repeated
in a displayable. (For example, ``show eileen m1 m1 m2`` where ``m1`` is seamless.)
Mouse motion is now tracked on Chrome OS devices. This prevents the mouse cursor
from being hidden between clicks.
@@ -56,6 +126,11 @@ A new :var:`config.debug_prediction` variable has been split out of
prediction errors to the console and log.txt, making the latter
variable act as documented.
Translations
------------
The German, Indonesian, Polish, and Russian translations have been updated.
.. _renpy-7.4.10:
-5
View File
@@ -1360,11 +1360,6 @@ Rarely or Internally Used
name of a label to use as a replacement for the missing label, or None
to cause Ren'Py to raise an exception.
.. var:: config.mouse_focus_clickthrough = False
If true, clicks that cause a window to be focused will be processed
normally. If false, such clicks will be ignored.
.. var:: config.mouse_hide_time = 30
The mouse is hidden after this number of seconds has elapsed
+7 -11
View File
@@ -12,20 +12,16 @@ features.
Incompatible changes to the GUI are documented at :ref:`gui-changes`, as
such changes only take effect when the GUI is regenerated.
.. _incompatible-7.4.11:
7.5.0
-----
7.4.11
------
The :propref:`focus_mask` style property now defaults to None for drag displayables.
This improves performance, but means that the displayable can be dragged by
transparent pixels. To revert this, the focus_mask property can be set to True
for individual drags, or globally with::
style drag:
focus_mask True
Both options reduce performance.
Ren'Py will now run a button's unhovered property even when focus is
changed by default, such as when a screen is shown or unshown. To
revert to the old behavior, use:
define config.always_unfocus = False
.. _incompatible-7.4.9:
+189 -185
View File
@@ -1,29 +1,29 @@
<ul class='sponsors'>
<li> 3uliusG33zer (7.4.37.4.10)
<li> 3uliusG33zer (7.4.37.4.11)
<li> __skwrl__ (6.99.14.37.3.0)
<li> Adam Wright (7.47.4.8)
<li> Adam Wright (7.4.97.4.10)
<li> Adam Wright (7.4.97.4.11)
<li> Adia Alderson (6.99.137.1.2)
<li> Aegis (7.4)
<li> Alec (7.4.37.4.5)
<li> Alec H (7.4.97.4.10)
<li> Alec H (7.4.97.4.11)
<li> Aleema (6.99.137.4.3)
<li> <a href="http://alexdodge.net/" rel="nofollow">Alex Dodge</a> (6.99.147.3.0)
<li> <a href="https://rabidb.com/" rel="nofollow">AlexSSZ</a> (6.99.137.4)
<li> <a href="https://alic-szecsei.com" rel="nofollow">Alic Szecsei</a> (6.99.14.37.4.10)
<li> Alicia (7.1, 7.27.4.10)
<li> <a href="https://alic-szecsei.com" rel="nofollow">Alic Szecsei</a> (6.99.14.37.4.11)
<li> Alicia (7.1, 7.27.4.11)
<li> Almost Human (7.27.3.0)
<li> Almost Human (7.3.07.4.10)
<li> Almost Human (7.3.07.4.11)
<li> Alward Sciröck (7.4)
<li> Andrealphus Games (7.4)
<li> <a href="https://andrealphus.itch.io/leap-of-love-safe-edition" rel="nofollow">Andrealphus Games</a> (7.47.4.10)
<li> <a href="https://andrealphus.itch.io/leap-of-love-safe-edition" rel="nofollow">Andrealphus Games</a> (7.47.4.11)
<li> Andrew (7.47.4.2)
<li> Andrew Paris (7.4)
<li> Andurin (7.1.27.4)
<li> Anne Camlin (7.07.4.10)
<li> Anne Camlin (7.07.4.11)
<li> aphrodisia (7.3.37.4.9)
<li> <a href="https://lemmasoft.renai.us/forums/viewtopic.php?f=51&t=34131" rel="nofollow">AR09FQF-AQ09FRF</a> (6.99.14.17.0)
<li> Ariane Barnes (7.3.07.3.3, 7.4.17.4.10)
<li> Ariane Barnes (7.3.07.3.3, 7.4.17.4.11)
<li> Asatiir (6.99.137.0)
<li> Ashley (7.3.07.4)
<li> <a href="https://www.renpy.org/agegate?url=https://www.patreon.com/ASLPro3D" rel="nofollow">ASLPro3D</a> (7.07.3.0)
@@ -33,68 +33,68 @@
<li> Barry B (7.3.3)
<li> Belfort and Bastion (6.99.137.1)
<li> <a href="https://www.renpy.org/agegate?url=https://store.steampowered.com/dev/Belgerum" rel="nofollow">Belgerum Games</a> ()
<li> BigMan03 (7.4.67.4.10)
<li> BigMan03 (7.4.67.4.11)
<li> Biotikos Development (6.99.137.4)
<li> Bob (6.99.137.0)
<li> <a href="https://bobcgames.itch.io" rel="nofollow">Bob Conway</a> (6.99.14.17.4)
<li> Bob Reus (7.17.4)
<li> bob_xxii (7.27.4.10)
<li> Bogdan (7.4.17.4.10)
<li> Booom313's tinker corner (6.99.147.4.10)
<li> Boreas Bear (6.99.137.4.10)
<li> bob_xxii (7.27.4.11)
<li> Bogdan (7.4.17.4.11)
<li> Booom313's tinker corner (6.99.147.4.11)
<li> Boreas Bear (6.99.137.4.11)
<li> <a href="http://boyslaughplus.moe" rel="nofollow">Boys Laugh +</a> (6.99.137.4)
<li> Brad (7.47.4.3)
<li> <a href="https://github.com/EchoFrost" rel="nofollow">Brad Whitesell (EchoFrost)</a> (6.99.14.27.2, 7.47.4.10)
<li> <a href="https://github.com/EchoFrost" rel="nofollow">Brad Whitesell (EchoFrost)</a> (6.99.14.27.2, 7.47.4.11)
<li> Brett Douglas (6.99.146.99.14.3)
<li> <a href="https://www.renpy.org/agegate?url=https://www.brunimultimedia.com" rel="nofollow">Bruni Multimedia</a> (6.99.147.4.10)
<li> <a href="https://www.renpy.org/agegate?url=https://www.brunimultimedia.com" rel="nofollow">Bruni Multimedia</a> (6.99.147.4.11)
<li> <a href="http://www.bura.cl" rel="nofollow">BURA</a> (6.99.13)
<li> c7v0tnrw7a51 (7.4.67.4.10)
<li> Cameron Woodard (6.99.14.37.4.10)
<li> c7v0tnrw7a51 (7.4.67.4.11)
<li> Cameron Woodard (6.99.14.37.4.11)
<li> Cara Hillstock (6.99.137.3.3)
<li> Cara Hillstock (7.3.37.4)
<li> <a href="https://www.catmpro.com/" rel="nofollow">CatMoun-P</a> (7.3.07.3.3)
<li> <a href="https://www.celebrityhunter.com.br" rel="nofollow">Celebrity Hunter</a> (7.17.4.5)
<li> Charlene Gilbert (6.99.137.4.10)
<li> Charlene Gilbert (6.99.137.4.11)
<li> <a href="http://charliethegoldfish.com" rel="nofollow">Charlie Francis Cassidy</a> (6.99.137.3.3)
<li> Chekhov's Ghost (7.17.2)
<li> Cherry Kiss Games (6.99.14.17.4.10)
<li> Cherry Kiss Games (6.99.14.17.4.11)
<li> Chris (7.4.37.4.5)
<li> Christopher Mahon (7.47.4.10)
<li> Christopher Mahon (7.47.4.11)
<li> Christopher S. Ma (7.3.0)
<li> Chroniton (7.4.17.4.10)
<li> Chrysoula (6.99.137.4.10)
<li> Chroniton (7.4.17.4.11)
<li> Chrysoula (6.99.137.4.11)
<li> <a href="https://cloverfirefly.itch.io" rel="nofollow">cloverfirefly</a> (6.99.137.4)
<li> Clyde Duensing III (7.3.07.3.3)
<li> Clyde Duensing III (7.3.37.4.10)
<li> CobaltCore (7.1.17.4.10)
<li> Clyde Duensing III (7.3.37.4.11)
<li> CobaltCore (7.1.17.4.11)
<li> CobraPL (7.17.4.7)
<li> <a href="https://store.steampowered.com/app/1159660/Moe_Era/" rel="nofollow">Comfy Company (Moe Era)</a> (7.4)
<li> <a href="https://www.renpy.org/agegate?url=https://obscurasoft.com/" rel="nofollow">Coming Out On Top</a> (6.99.137.4)
<li> <a href="http://www.computerart.club/" rel="nofollow">computerart.club</a> (6.99.147.4)
<li> Cookie NomNom (7.1.17.4)
<li> Crazy Cactus (6.99.14.37.4.10)
<li> <a href="https://www.renpy.org/agegate?url=http://cricketbat.me" rel="nofollow">cricketbat_</a> (7.07.4.10)
<li> Crazy Cactus (6.99.14.37.4.11)
<li> <a href="https://www.renpy.org/agegate?url=http://cricketbat.me" rel="nofollow">cricketbat_</a> (7.07.4.11)
<li> <a href="http://cultofape.com" rel="nofollow">CultOfApe</a> (6.99.147.0)
<li> Culture4Jam (6.99.137.4)
<li> <a href="https://github.com/l30nard0s0n" rel="nofollow">D. Zubitashvili</a> (7.47.4.10)
<li> Daiko Fextar (7.4.57.4.10)
<li> Dan Gretton (7.3.07.4.10)
<li> <a href="https://github.com/l30nard0s0n" rel="nofollow">D. Zubitashvili</a> (7.47.4.11)
<li> Daiko Fextar (7.4.57.4.11)
<li> Dan Gretton (7.3.07.4.11)
<li> Dan Lazar (7.4)
<li> Dana Jackson (7.4.77.4.10)
<li> Dana Jackson (7.4.77.4.11)
<li> Daniel Burns (7.17.2)
<li> <a href="https://www.renpy.org/agegate?url=http://www.darkministry.net" rel="nofollow">Dark Ministry</a> (7.27.3.0)
<li> <a href="http://dark-aii.net" rel="nofollow">Dark-Aii</a> (6.99.14.16.99.14.3)
<li> DarkDrake1371 (7.3.07.3.3)
<li> <a href="http://www.darksirengames.com" rel="nofollow">DarkSirenGames</a> (6.99.137.4.10)
<li> <a href="https://www.renpy.org/agegate?url=https://darktoz.com/" rel="nofollow">Darktoz</a> (7.4.57.4.10)
<li> <a href="http://www.darksirengames.com" rel="nofollow">DarkSirenGames</a> (6.99.137.4.11)
<li> <a href="https://www.renpy.org/agegate?url=https://darktoz.com/" rel="nofollow">Darktoz</a> (7.4.57.4.11)
<li> Darryl Taylor (7.07.4)
<li> Dave Pickett (7.4.97.4.10)
<li> Dave Pickett (7.4.97.4.11)
<li> David Koster (6.99.147.4)
<li> David Maiman - Chaos Cute Soft (7.4)
<li> David Yingling (6.99.14.17.4.10)
<li> <a href="https://www.renpy.org/agegate?url=https://dizzy.works" rel="nofollow">DavieZwei</a> (7.4.77.4.10)
<li> David Yingling (6.99.14.17.4.11)
<li> <a href="https://www.renpy.org/agegate?url=https://dizzy.works" rel="nofollow">DavieZwei</a> (7.4.77.4.11)
<li> <a href="https://twitter.com/DEADRKGK" rel="nofollow">DEADRKGK</a> (7.4)
<li> DecentMonkey (7.4.57.4.10)
<li> DecentMonkey (7.4.57.4.11)
<li> Decopauge123 (7.4)
<li> Dee (7.17.4.7)
<li> Denny Cheng (6.99.14.27.3.3)
@@ -103,274 +103,278 @@
<li> DinoMan21779 (7.3.37.4.5)
<li> DJ_Light (7.3.37.4)
<li> Donald (7.47.4.9)
<li> Dosya (7.4.97.4.10)
<li> Dosya (7.4.97.4.11)
<li> Drake Wells (7.3.07.4)
<li> Drifty (7.4.10)
<li> <a href="http://coriginate.com" rel="nofollow">Ds110</a> (6.99.137.4.10)
<li> DuoDevelopers (7.1.17.4.10)
<li> Duprès Eric (7.47.4.10)
<li> DV Enterprises Development (7.3.37.4.10)
<li> Drifty (7.4.107.4.11)
<li> <a href="http://coriginate.com" rel="nofollow">Ds110</a> (6.99.137.4.11)
<li> DuoDevelopers (7.1.17.4.11)
<li> Duprès Eric (7.47.4.11)
<li> DV Enterprises Development (7.3.37.4.11)
<li> E. William Brown (6.99.137.3.0)
<li> <a href="https://www.eccentric-gaming.com/" rel="nofollow">Eccentric Satyr</a> (7.47.4.5)
<li> Eileen K (7.3.07.4.10)
<li> <a href="https://www.youtube.com/c/ElaineDoesCoding" rel="nofollow">ElaineDoesCoding</a> (7.07.4.10)
<li> Eli Berg-Maas (7.4.77.4.10)
<li> Eileen K (7.3.07.4.11)
<li> <a href="https://www.youtube.com/c/ElaineDoesCoding" rel="nofollow">ElaineDoesCoding</a> (7.07.4.11)
<li> Eli Berg-Maas (7.4.77.4.11)
<li> Elun GAMES (7.4)
<li> eric chi hung ng (7.07.3.0)
<li> Erik Moeller (7.4.37.4.10)
<li> Erik Moeller (7.4.37.4.11)
<li> Eris Discordia (7.4.3)
<li> Ertal Games (7.1.17.3.3)
<li> <a href="https://www.patreon.com/henissart" rel="nofollow">Estate : Dominate</a> (7.47.4.10)
<li> Euan 'Xolf' Robertson (6.99.137.4.10)
<li> <a href="https://www.patreon.com/henissart" rel="nofollow">Estate : Dominate</a> (7.47.4.11)
<li> Euan 'Xolf' Robertson (6.99.137.4.11)
<li> Eve Hallows (6.99.136.99.14)
<li> <a href="https://www.renpy.org/agegate?url=https://www.patreon.com/exiscoming" rel="nofollow">Exiscoming</a> (6.99.147.4.10)
<li> <a href="https://www.renpy.org/agegate?url=https://www.patreon.com/exiscoming" rel="nofollow">Exiscoming</a> (6.99.147.4.11)
<li> Eyzi (7.07.3.0, 7.4)
<li> FightingFox Studio (7.47.4.6)
<li> FlorgaRec (7.4)
<li> Fluffy (7.4.17.4.10)
<li> Fulcrum-E (6.99.147.4.10)
<li> Fluffy (7.4.17.4.11)
<li> Fulcrum-E (6.99.147.4.11)
<li> Fuseblower (7.07.2)
<li> gamefang (7.4.17.4.10)
<li> <a href="https://twitter.com/Patch_Games" rel="nofollow">GB Patch Games</a> (7.47.4.10)
<li> gamefang (7.4.17.4.11)
<li> <a href="https://twitter.com/Patch_Games" rel="nofollow">GB Patch Games</a> (7.47.4.11)
<li> George (7.17.4)
<li> <a href="http://www.gtbono.com" rel="nofollow">Giovanni Tempobono</a> (7.17.1.2)
<li> Glib Gentleman (6.99.147.4, 7.4.67.4.10)
<li> gogu (7.47.4.10)
<li> <a href="https://goldengamebarn.com/" rel="nofollow">Golden Game Barn</a> (6.99.137.4.10)
<li> <a href="https://twitter.com/goodtalesvn" rel="nofollow">Good Tales</a> (7.17.4.10)
<li> Great Chicken Studio (6.99.147.4.10)
<li> Glib Gentleman (6.99.147.4, 7.4.67.4.11)
<li> gogu (7.47.4.11)
<li> <a href="https://goldengamebarn.com/" rel="nofollow">Golden Game Barn</a> (6.99.137.4.11)
<li> <a href="https://twitter.com/goodtalesvn" rel="nofollow">Good Tales</a> (7.17.4.11)
<li> Great Chicken Studio (6.99.147.4.11)
<li> Gunso (6.99.137.2)
<li> HAG Productions (7.1.17.4)
<li> <a href="http://www.hanakogames.com/" rel="nofollow">Hanako Games</a> (7.3.37.4.10)
<li> <a href="http://hanb.jp" rel="nofollow">HanbitGaram (MOEWORK Entertainment)</a> (7.17.4.10)
<li> <a href="http://www.hanakogames.com/" rel="nofollow">Hanako Games</a> (7.3.37.4.11)
<li> <a href="http://hanb.jp" rel="nofollow">HanbitGaram (MOEWORK Entertainment)</a> (7.17.4.11)
<li> Happimochi (6.99.136.99.14)
<li> Hasse Svensson (7.4)
<li> Hermit Jones (HJ) (7.3.37.4.10)
<li> <a href="https://www.renpy.org/agegate?url=https://komisari.itch.io/heros-harem-guild" rel="nofollow">Hero's Harem Guild</a> (7.47.4.10)
<li> HoarRaven (7.4.10)
<li> HopesGaming (7.1.17.4.10)
<li> Hyperion Thunder (7.47.4.10)
<li> Hermit Jones (HJ) (7.3.37.4.11)
<li> <a href="https://www.renpy.org/agegate?url=https://komisari.itch.io/heros-harem-guild" rel="nofollow">Hero's Harem Guild</a> (7.47.4.11)
<li> HoarRaven (7.4.107.4.11)
<li> HopesGaming (7.1.17.4.11)
<li> Hyperion Thunder (7.47.4.11)
<li> <a href="https://ijemin.com" rel="nofollow">I_Jemin</a> (6.99.137.0)
<li> Ianvs (7.3.37.4.10)
<li> <a href="https://www.renpy.org/agegate?url=https://www.teamsadcrab.com" rel="nofollow">Innocent Witches</a> (7.17.4.10)
<li> Ianvs (7.3.37.4.11)
<li> <a href="https://www.renpy.org/agegate?url=https://www.teamsadcrab.com" rel="nofollow">Innocent Witches</a> (7.17.4.11)
<li> <a href="https://www.irinakuksova.ie" rel="nofollow">Irina Kuksova</a> (7.3.07.4)
<li> <a href="https://irredeemable.net/" rel="nofollow">Irredeemable Games</a> (6.99.147.4)
<li> ITRoy (7.4.37.4.10)
<li> J. C. Holder (6.99.137.4.10)
<li> J. Webb (7.4.57.4.10)
<li> <a href="https://www.renpy.org/agegate?url=https://m.twitch.tv/jackofallart" rel="nofollow">Jack of All Art</a> (7.4.57.4.10)
<li> ITRoy (7.4.37.4.11)
<li> J. C. Holder (6.99.137.4.11)
<li> J. Webb (7.4.57.4.11)
<li> <a href="https://www.renpy.org/agegate?url=https://m.twitch.tv/jackofallart" rel="nofollow">Jack of All Art</a> (7.4.57.4.11)
<li> Jacob Munro (7.4)
<li> Jacob Sporrong (6.99.137.4.10)
<li> James Gretchen (7.4.10)
<li> Jacob Sporrong (6.99.137.4.11)
<li> James Gretchen (7.4.107.4.11)
<li> James Tyner (6.99.137.1)
<li> Jamie Wahls (7.47.4.10)
<li> Jan Mašek (7.17.4.10)
<li> JeongPyo Lee (6.99.137.4.10)
<li> Joanna B (6.99.137.4.10)
<li> Jamie Wahls (7.47.4.11)
<li> Jan Mašek (7.17.4.11)
<li> JeongPyo Lee (6.99.137.4.11)
<li> Joanna B (6.99.137.4.11)
<li> JohD (7.4)
<li> JohnnyOmaha (7.4.37.4.10)
<li> Jokeman (7.4.57.4.10)
<li> JohnnyOmaha (7.4.37.4.11)
<li> Jokeman (7.4.57.4.11)
<li> Jonas Kyratzes (7.1.17.4.7)
<li> jonnymelabo (6.99.137.4.10)
<li> jonnymelabo (6.99.137.4.11)
<li> Josh Kaplan (6.99.136.99.14.2)
<li> Juanito_Santos (7.4)
<li> Kampmichi (7.1.17.4.5)
<li> Katryna Starks (7.2.17.4.10)
<li> Katryna Starks (7.2.17.4.11)
<li> Kayde Initials (6.99.137.4)
<li> Keul (7.3.37.4)
<li> Kevin Clack (7.4.67.4.10)
<li> <a href="http://kexboy.com" rel="nofollow">KEXBOY</a> (6.99.137.4.10)
<li> Khailz (7.47.4.10)
<li> Kikai Digital (7.07.4.10)
<li> <a href="http://www.gamesbykinmoku.com" rel="nofollow">Kinmoku</a> (6.99.137.4.10)
<li> <a href="http://krsm94.web.fc2.com/" rel="nofollow">Klast Halc (crAsm)</a> (6.99.14.27.4.10)
<li> <a href="https://twitter.com/koda_v4" rel="nofollow">koda</a> (7.47.4.10)
<li> Kosmos Games (6.99.147.4.10)
<li> Kevin Clack (7.4.67.4.11)
<li> <a href="http://kexboy.com" rel="nofollow">KEXBOY</a> (6.99.137.4.11)
<li> Khailz (7.47.4.11)
<li> Kikai Digital (7.07.4.11)
<li> <a href="http://www.gamesbykinmoku.com" rel="nofollow">Kinmoku</a> (6.99.137.4.11)
<li> <a href="http://krsm94.web.fc2.com/" rel="nofollow">Klast Halc (crAsm)</a> (6.99.14.27.4.11)
<li> <a href="https://twitter.com/koda_v4" rel="nofollow">koda</a> (7.47.4.11)
<li> Kosmos Games (6.99.147.4.11)
<li> <a href="https://de.koubaibu.tech/" rel="nofollow">Koubaibu Technology Group</a> (7.17.1.2)
<li> Kraig Halfpap (6.99.14.27.3.3)
<li> Kthulian (7.4.67.4.10)
<li> Kthulian (7.4.67.4.11)
<li> L C (7.27.4)
<li> l8eral Jack (7.4.17.4.10)
<li> l8eral Jack (7.4.17.4.11)
<li> <a href="https://www.renpy.org/agegate?url=https://la-cucaracha-studios.itch.io/" rel="nofollow">La Cucaracha Studios</a> (7.1.27.4.6)
<li> <a href="http://waltz.moe/portfolio/" rel="nofollow">Laiska</a> (7.27.4)
<li> <a href="https://lernakow.itch.io/" rel="nofollow">Lernakow</a> (6.99.14.37.4, 7.4.97.4.10)
<li> Lettuce (7.4.37.4.10)
<li> <a href="https://lernakow.itch.io/" rel="nofollow">Lernakow</a> (6.99.14.37.4, 7.4.97.4.11)
<li> Lettuce (7.4.37.4.11)
<li> LewdKitty (7.07.2)
<li> LewdKitty (7.2.17.4)
<li> <a href="https://www.renpy.org/agegate?url=https://www.lewdlab.com/" rel="nofollow">Lewdlab</a> (6.99.14.17.4.10)
<li> <a href="https://www.renpy.org/agegate?url=https://www.lewdlab.com/" rel="nofollow">Lewdlab</a> (6.99.14.17.4.11)
<li> Lictor (6.99.14.27.1.2)
<li> Lingrimm (7.3.37.4)
<li> Little Napoleon (7.17.4.10)
<li> Lockheart (7.47.4.10)
<li> Little Napoleon (7.17.4.11)
<li> Lockheart (7.47.4.11)
<li> <a href="http://trash.moe/" rel="nofollow">Lore</a> (6.99.137.3.3)
<li> Luke Hartley (7.4.11)
<li> Luke Jackson (6.99.137.4)
<li> Lunar Parade (7.47.4.10)
<li> Lunar Parade (7.47.4.11)
<li> <a href="http://luscious-spirit-studios.tumblr.com/" rel="nofollow">Luscious Spirit Studios</a> (6.99.137.3.0)
<li> <a href="https://www.renpy.org/agegate?url=https://www.patreon.com/Luxee" rel="nofollow">Luxee</a> (6.99.14.37.4.10)
<li> Luxuria Games (7.4.67.4.10)
<li> <a href="https://www.renpy.org/agegate?url=https://www.patreon.com/VoodooMonkey" rel="nofollow">Lyla's Curse</a> (7.47.4.10)
<li> <a href="https://www.renpy.org/agegate?url=https://www.patreon.com/Luxee" rel="nofollow">Luxee</a> (6.99.14.37.4.11)
<li> Luxuria Games (7.4.67.4.11)
<li> <a href="https://www.renpy.org/agegate?url=https://www.patreon.com/VoodooMonkey" rel="nofollow">Lyla's Curse</a> (7.47.4.11)
<li> Maeve Bandruid (6.99.137.4)
<li> MagicNuts (7.47.4.10)
<li> Mama J (7.4.67.4.10)
<li> <a href="https://www.renpy.org/agegate?url=https://www.patreon.com/manitu" rel="nofollow">MANITU Games CO.</a> (6.99.137.4.10)
<li> ManorStories (6.99.147.4, 7.4.37.4.10)
<li> <a href="http://www.marionettecode.com/" rel="nofollow">Marionette</a> (6.99.147.4.10)
<li> Mary Macapagal (7.3.37.4.10)
<li> MagicNuts (7.47.4.11)
<li> Mama J (7.4.67.4.11)
<li> <a href="https://www.renpy.org/agegate?url=https://www.patreon.com/manitu" rel="nofollow">MANITU Games CO.</a> (6.99.137.4.11)
<li> ManorStories (6.99.147.4, 7.4.37.4.11)
<li> <a href="https://www.patreon.com/marcialart" rel="nofollow">MarcialART</a> (7.4.11)
<li> <a href="http://www.marionettecode.com/" rel="nofollow">Marionette</a> (6.99.147.4.11)
<li> Mary Macapagal (7.3.37.4.11)
<li> Matt (7.4.17.4.2)
<li> Matt Sequeira (7.4)
<li> Matthew (7.3.37.4)
<li> Matthew Preston (7.2)
<li> Matthew Preston (7.27.4.10)
<li> Matthew Vimislik (6.99.14.27.4.10)
<li> Matthew Preston (7.27.4.11)
<li> Matthew Vimislik (6.99.14.27.4.11)
<li> MAW.3D.Art (6.99.13)
<li> Max J Sher (6.99.137.4)
<li> MCatter Dev (7.17.4.10)
<li> <a href="https://meagantrott.com" rel="nofollow">Meagan Trott</a> (6.99.137.4.10)
<li> Meyvol (6.99.14.17.4.10)
<li> <a href="https://store.steampowered.com/developer/mia" rel="nofollow">Mia Blais-Côté</a> (7.3.07.3.3)
<li> Michael Lewis (7.27.4.10)
<li> Michael Simon (7.1.17.4.10)
<li> Michaela Amanda Laws (6.99.137.4.10)
<li> Mikolaj Kupiec (7.07.4.10)
<li> MCatter Dev (7.17.4.11)
<li> <a href="https://meagantrott.com" rel="nofollow">Meagan Trott</a> (6.99.137.4.11)
<li> Meyvol (6.99.14.17.4.11)
<li> Mia Blais-Côté (7.3.07.3.3, 7.4.11)
<li> Michael Lewis (7.27.4.11)
<li> Michael Simon (7.1.17.4.11)
<li> Michaela Amanda Laws (6.99.137.4.11)
<li> Mikolaj Kupiec (7.07.4.11)
<li> <a href="http://www.milkteestudios.com" rel="nofollow">Milktee Studios</a> (7.07.1)
<li> Miss Skizzors (7.07.4.10)
<li> model mili (7.4.77.4.10)
<li> Moogs Parfait (6.99.137.4.10)
<li> Miss Skizzors (7.07.4.11)
<li> model mili (7.4.77.4.11)
<li> Moogs Parfait (6.99.137.4.11)
<li> MrValdez (7.07.4, 7.4.37.4.8)
<li> <a href="https://ms45.itch.io" rel="nofollow">Ms .45</a> (6.99.13)
<li> Ms DOS (7.3.07.4)
<li> <a href="https://www.patreon.com/muplur" rel="nofollow">MUPLUR</a> (7.3.07.4.2)
<li> Mychal robinson (7.4)
<li> Narutuzu (7.47.4.10)
<li> nasredin (6.99.14.37.4.10)
<li> Narutuzu (7.47.4.11)
<li> nasredin (6.99.14.37.4.11)
<li> Natalie Van Sistine (7.07.3.3)
<li> Naughty Road (7.4.17.4.10)
<li> Naughty Road (7.4.17.4.11)
<li> <a href="https://cafe.naver.com/vmo.cafe" rel="nofollow">Naver cafe VMO</a> (7.17.4)
<li> <a href="http://cafe.naver.com/vmo" rel="nofollow">NaverCafe VMO</a> (6.99.137.1)
<li> Neigan (7.0)
<li> Nicholas Beard (7.4.3)
<li> <a href="https://www.patreon.com/nikraria" rel="nofollow">nikraria</a> (6.99.137.4.10)
<li> <a href="https://www.patreon.com/nikraria" rel="nofollow">nikraria</a> (6.99.137.4.11)
<li> niktwazny (7.4.5)
<li> Ninecrux (7.4.77.4.10)
<li> NOODLEMANNY (7.4.97.4.10)
<li> Ninecrux (7.4.77.4.11)
<li> NOODLEMANNY (7.4.97.4.11)
<li> Nova Alamak (6.99.14.37.3.3)
<li> <a href="http://devety.com" rel="nofollow">Oleksii olety Kyrylchuk</a> (6.99.14.16.99.14.2)
<li> Oppai-Man (7.4.57.4.10)
<li> Panda Penguin Games (7.27.4.10)
<li> Oppai-Man (7.4.57.4.11)
<li> Panda Penguin Games (7.27.4.11)
<li> Panthera Morag (6.99.137.2)
<li> Passion City (7.4)
<li> Patchwork Princess (7.17.3.0)
<li> Patricia (6.99.137.1.1)
<li> <a href="https://store.steampowered.com/app/1327540/Cross_the_Moon/" rel="nofollow">Patrick Rainville</a> (7.4.57.4.10)
<li> <a href="https://store.steampowered.com/app/1327540/Cross_the_Moon/" rel="nofollow">Patrick Rainville</a> (7.4.57.4.11)
<li> Paul Birchenough (7.3.0)
<li> <a href="http://peachpattch.com/" rel="nofollow">peachpattch</a> (6.99.147.4)
<li> Pete Goodwin (7.3.07.4.10)
<li> philat (6.99.14.17.4.10)
<li> Pete Goodwin (7.3.07.4.11)
<li> philat (6.99.14.17.4.11)
<li> Pi3shark (7.27.4)
<li> <a href="https://store.steampowered.com/search/?publisher=Pingfang%20Games" rel="nofollow">Pingfang Games</a> (7.47.4.10)
<li> plasterbrain (6.99.137.4.10)
<li> <a href="https://store.steampowered.com/search/?publisher=Pingfang%20Games" rel="nofollow">Pingfang Games</a> (7.47.4.11)
<li> plasterbrain (6.99.137.4.11)
<li> Ploppertje (6.99.136.99.14.3)
<li> <a href="https://about.plus9.io/renpy/" rel="nofollow">Plus9</a> (7.4.9)
<li> Podge (6.99.137.4)
<li> Prometheus (7.3.37.4)
<li> PublicLewdness (7.4.11)
<li> Puriwit Sesupaponphong (6.99.13)
<li> Puriwit Sesupaponphong (6.99.137.1)
<li> Pyonkotchi (7.17.4.9)
<li> Pyonkotchi (7.17.4.9, 7.4.11)
<li> Pólyí Konrád (7.17.1.1)
<li> quakefultales (7.47.4.10)
<li> quakefultales (7.47.4.11)
<li> <a href="http://www.cottoncandycyanide.com/" rel="nofollow">Quantum Suicide</a> (7.17.2)
<li> <a href="https://www.nintendo.com/games/detail/a-summer-with-the-shiba-inu-switch/" rel="nofollow">Quill Game Studios</a> (7.47.4.10)
<li> Rachel (6.99.137.4.10)
<li> <a href="http://ratalaikagames.com/renpybanner.php" rel="nofollow">Ratalaika Games</a> (7.47.4.10)
<li> <a href="http://razzartvisual.com/" rel="nofollow">Razz</a> (6.99.137.4.10)
<li> <a href="https://www.nintendo.com/games/detail/a-summer-with-the-shiba-inu-switch/" rel="nofollow">Quill Game Studios</a> (7.47.4.11)
<li> Rachel (6.99.137.4.11)
<li> <a href="http://ratalaikagames.com/renpybanner.php" rel="nofollow">Ratalaika Games</a> (7.47.4.11)
<li> <a href="http://razzartvisual.com/" rel="nofollow">Razz</a> (6.99.137.4.11)
<li> <a href="https://twitter.com/ragnarhomsar" rel="nofollow">Realga</a> (7.07.1)
<li> Red Lotus Designz (7.3.07.4.10)
<li> René Dudfield (6.99.137.4.10)
<li> Richard (6.99.147.4.10)
<li> Red Lotus Designz (7.3.07.4.11)
<li> René Dudfield (6.99.137.4.11)
<li> Richard (6.99.147.4.11)
<li> <a href="http://impqueen.com/" rel="nofollow">Rinmaru</a> (6.99.137.3.0)
<li> Rizia Praja (6.99.14.17.4)
<li> <a href="https://robcolton.com/games" rel="nofollow">Rob Colton</a> (7.27.4.10)
<li> <a href="https://robcolton.com/games" rel="nofollow">Rob Colton</a> (7.27.4.11)
<li> robert Vince Jr (7.4)
<li> <a href="https://www.renpy.org/agegate?url=https://f95zone.to/threads/rocking-robin-v0-5b-robbery1211.26188/" rel="nofollow">Rocking Robin</a> (7.47.4.10)
<li> <a href="https://www.renpy.org/agegate?url=https://f95zone.to/threads/rocking-robin-v0-5b-robbery1211.26188/" rel="nofollow">Rocking Robin</a> (7.47.4.11)
<li> <a href="http://sunkoiwish.com/" rel="nofollow">Royce A Xaiyeon</a> (6.99.137.2)
<li> Rui Jiang (7.3.07.4)
<li> <a href="https://ub4q.itch.io/" rel="nofollow">ruqiyah</a> (7.3.37.4.10)
<li> <a href="https://ub4q.itch.io/" rel="nofollow">ruqiyah</a> (7.3.37.4.11)
<li> Ryan Whited (6.99.147.1)
<li> <a href="https://www.patreon.com/Sad_Crab" rel="nofollow">Sad Crab Company</a> (7.47.4.10)
<li> <a href="https://www.patreon.com/Sad_Crab" rel="nofollow">Sad Crab Company</a> (7.47.4.11)
<li> <a href="https://saiffyros.wordpress.com/" rel="nofollow">Saiffyros</a> (6.99.147.4.9)
<li> Sam Yang (6.99.137.3.0)
<li> Samantha (7.47.4.5)
<li> Samibotss CONET (7.4.11)
<li> scandis (7.3.37.4)
<li> <a href="https://github.com/scj643" rel="nofollow">scj643</a> (7.47.4.10)
<li> SG Game Design (7.4.97.4.10)
<li> <a href="https://twitter.com/SilkenSail" rel="nofollow">Silken Sail Entertainment</a> (7.47.4.10)
<li> <a href="https://github.com/scj643" rel="nofollow">scj643</a> (7.47.4.11)
<li> SG Game Design (7.4.97.4.11)
<li> <a href="https://twitter.com/SilkenSail" rel="nofollow">Silken Sail Entertainment</a> (7.47.4.11)
<li> Simply Aria (6.99.147.2)
<li> SkinnGames (7.47.4.10)
<li> <a href="https://www.skybeargames.com" rel="nofollow">Sky Bear Games</a> (7.3.07.4.10)
<li> SkyCloudGames (7.4.97.4.10)
<li> <a href="http://sleepyagents.co.uk" rel="nofollow">Sleepy Agents</a> (6.99.137.4.10)
<li> SkinnGames (7.47.4.11)
<li> <a href="https://www.skybeargames.com" rel="nofollow">Sky Bear Games</a> (7.3.07.4.11)
<li> SkyCloudGames (7.4.97.4.11)
<li> <a href="http://sleepyagents.co.uk" rel="nofollow">Sleepy Agents</a> (6.99.137.4.11)
<li> <a href="https://twitter.com/slyestial" rel="nofollow">Slyestial</a> (7.4)
<li> Snowlocke (7.07.4.10)
<li> Snowlocke (7.07.4.11)
<li> <a href="http://store.steampowered.com/app/570350/Sorry_Entschuldigung__A_Psychological_Horror_Visual_Novel/" rel="nofollow">Sorry. (Entschuldigung)</a> (6.99.14.27.1)
<li> <a href="https://store.steampowered.com/app/1706470/Space_to_Grow/" rel="nofollow">Space to Grow</a> (6.99.137.4.10)
<li> speedycalm (7.47.4.10)
<li> <a href="https://store.steampowered.com/app/1706470/Space_to_Grow/" rel="nofollow">Space to Grow</a> (6.99.137.4.11)
<li> speedycalm (7.47.4.11)
<li> Spyros Panagiotopoulos (6.99.147.1)
<li> Steamgirl (6.99.136.99.14, 7.27.4.10)
<li> Steamgirl (6.99.136.99.14, 7.27.4.11)
<li> Steamlynx (6.99.14.17.4)
<li> Stefan Gagne (6.99.137.4.10)
<li> Stephen Theyer (7.4.97.4.10)
<li> Stefan Gagne (6.99.137.4.11)
<li> Stephen Theyer (7.4.97.4.11)
<li> steven (7.47.4.9)
<li> STEVEN HOWARD (7.4)
<li> <a href="https://www.renpy.org/agegate?url=http://www.patreon.com/errilhl" rel="nofollow">Studio Errilhl</a> (6.99.14.37.4.3)
<li> <a href="https://www.renpy.org/agegate?url=https://www.patreon.com/studioerrilhl" rel="nofollow">Studio Errilhl</a> (7.4.37.4.10)
<li> Studio Lupiesoft (6.99.137.4.10)
<li> <a href="https://vnstudioelan.com/" rel="nofollow">Studio Élan</a> (7.2.17.4.10)
<li> <a href="https://www.renpy.org/agegate?url=https://www.patreon.com/studioerrilhl" rel="nofollow">Studio Errilhl</a> (7.4.37.4.11)
<li> Studio Lupiesoft (6.99.137.4.11)
<li> <a href="https://vnstudioelan.com/" rel="nofollow">Studio Élan</a> (7.2.17.4.11)
<li> Sugar Joe (7.27.4.3)
<li> <a href="https://play.google.com/store/apps/developer?id=Suhaimizs&hl=en" rel="nofollow">Suhaimizs</a> (7.2)
<li> <a href="https://ladyisak.itch.io/" rel="nofollow">Sych Games</a> (7.3.07.4)
<li> SYH (7.47.4.10)
<li> SYH (7.47.4.11)
<li> Sébastien Irola (7.47.4.5)
<li> T-Patch (7.3.07.4.7)
<li> Team Borsch (7.3.07.4.10)
<li> Team Borsch (7.3.07.4.11)
<li> Teofilo Hurtado (6.99.147.1.1)
<li> TERNOX (7.47.4.5)
<li> TERNOX (7.4.57.4.10)
<li> <a href="https://TheClimateTrail.com" rel="nofollow">The Climate Trail</a> (7.47.4.10)
<li> the66 (7.27.4.10)
<li> Thibaut de la Chapelle (7.3.37.4.10)
<li> TERNOX (7.4.57.4.11)
<li> <a href="https://TheClimateTrail.com" rel="nofollow">The Climate Trail</a> (7.47.4.11)
<li> the66 (7.27.4.11)
<li> Thibaut de la Chapelle (7.3.37.4.11)
<li> Thomas Charlie (6.99.137.2)
<li> Timothy Young (6.99.14.17.4.10)
<li> Timothy Young (6.99.14.17.4.11)
<li> TJ Huckabee (6.99.137.4)
<li> ToastCrust (6.99.136.99.14)
<li> Tobias Wüthrich (6.99.136.99.14.3)
<li> <a href="http://www.shadowpath.com" rel="nofollow">Tom Dowd</a> (7.3.37.4.10)
<li> <a href="http://www.shadowpath.com" rel="nofollow">Tom Dowd</a> (7.3.37.4.11)
<li> Tonny33 (7.4)
<li> <a href="https://www.renpy.org/agegate?url=https://www.patreon.com/tremmiGames" rel="nofollow">tremmiGames</a> (7.07.4.10)
<li> trooper6 (6.99.137.4.10)
<li> <a href="https://www.renpy.org/agegate?url=https://www.patreon.com/tremmiGames" rel="nofollow">tremmiGames</a> (7.07.4.11)
<li> trooper6 (6.99.137.4.11)
<li> TropeCode (7.47.4.2)
<li> <a href="https://www.youtube.com/tryinmorning" rel="nofollow">tryinmorning</a> (6.99.137.4.9)
<li> tryinmorning (6.99.137.4.9, 7.4.11)
<li> Tsad (7.47.4.9)
<li> Ven Jacobs (7.4.37.4.10)
<li> Vikks Hallowhaunt (7.3.37.4.10)
<li> ViNovella (7.47.4.10)
<li> Ven Jacobs (7.4.37.4.11)
<li> Vikks Hallowhaunt (7.3.37.4.11)
<li> ViNovella (7.47.4.11)
<li> VJ (7.3.3)
<li> Vollschauer (6.99.136.99.14)
<li> <a href="http://vxlloyd.com" rel="nofollow">VX Lloyd</a> (6.99.14.37.0)
<li> Wayne Wollesen (6.99.14.37.1.1)
<li> <a href="https://www.facebook.com/weeabooriot" rel="nofollow">Weeabooriot Cosplay</a> (6.99.137.4.10)
<li> <a href="https://www.renpy.org/agegate?url=https://www.whitephantomgames.co.uk/" rel="nofollow">White Phantom Games</a> (7.4.97.4.10)
<li> <a href="https://www.facebook.com/weeabooriot" rel="nofollow">Weeabooriot Cosplay</a> (6.99.137.4.11)
<li> <a href="https://www.renpy.org/agegate?url=https://www.whitephantomgames.co.uk/" rel="nofollow">White Phantom Games</a> (7.4.97.4.11)
<li> William (7.4)
<li> <a href="https://arcaniinteractive.com/" rel="nofollow">William Lucht</a> (7.07.4.5)
<li> William McGowen (7.47.4.10)
<li> William McGowen (7.47.4.11)
<li> William Tumeo (6.99.137.1.2)
<li> <a href="http://winterwolves.com/ambersmagicshop.htm" rel="nofollow">Winter Wolves</a> (6.99.137.4.10)
<li> <a href="https://www.wolfbiteinteractive.com/" rel="nofollow">WolfBite Interactive</a> (7.27.4.10)
<li> <a href="http://winterwolves.com/ambersmagicshop.htm" rel="nofollow">Winter Wolves</a> (6.99.137.4.11)
<li> <a href="https://www.wolfbiteinteractive.com/" rel="nofollow">WolfBite Interactive</a> (7.27.4.11)
<li> wtx (7.4.17.4.3)
<li> Xiphear (7.3.37.4)
<li> xoeleox (7.4.67.4.10)
<li> xoeleox (7.4.67.4.11)
<li> Y Press Games (7.27.4)
<li> Y Press Games (7.47.4.10)
<li> <a href="http://astralore.com/" rel="nofollow">Yakmala!</a> (6.99.137.4.10)
<li> Zanith (7.47.4.10)
<li> Y Press Games (7.47.4.11)
<li> <a href="http://astralore.com/" rel="nofollow">Yakmala!</a> (6.99.137.4.11)
<li> Zanith (7.47.4.11)
<li> <a href="https://zimoncoldres.itch.io/champion-of-realms" rel="nofollow">Zimon</a> (7.4.57.4.9)
</ul>
+4 -5
View File
@@ -411,13 +411,15 @@ init python:
## This increases the size of the quick buttons to make them easier to touch
## on tablets and phones.
if renpy.variant("touch"):
@gui.variant
def touch():
gui.quick_button_borders = Borders(40, 14, 40, 0)
## This changes the size and spacing of various GUI elements to ensure they
## are easily visible on phones.
if renpy.variant("small"):
@gui.variant
def small():
## Font sizes.
gui.text_size = 30
@@ -464,6 +466,3 @@ init python:
## Quick buttons.
gui.quick_button_text_size = 20
+4 -5
View File
@@ -408,13 +408,15 @@ init python:
## This increases the size of the quick buttons to make them easier to touch
## on tablets and phones.
if renpy.variant("touch"):
@gui.variant
def touch():
gui.quick_button_borders = Borders(40, 14, 40, 0)
## This changes the size and spacing of various GUI elements to ensure they
## are easily visible on phones.
if renpy.variant("small"):
@gui.variant
def small():
## Font sizes.
gui.text_size = 30
@@ -461,6 +463,3 @@ init python:
## Quick buttons.
gui.quick_button_text_size = 20