Compare commits

..

4 Commits

Author SHA1 Message Date
Gouvernathor 76ed4fefe1 hotfix 2023-03-08 22:33:42 +01:00
Gouvernathor f73799f4fc Compat and document the changes 2023-03-08 22:32:29 +01:00
Gouvernathor da9691a195 New blit API
If you want the pos to be rounded, blit's old job, you can call integer_blit.
Converting to pure-floats is useless, since nothing checks, so subpixel_blit is made an alias of absolute_blit which uses the good type.
The base behavior is to take elements of pos as style and transform properties do : as positions.
2023-03-08 21:53:49 +01:00
Gouvernathor 2b829dbc07 Seemlessly merge duplicated code 2023-03-08 21:44:20 +01:00
173 changed files with 2750 additions and 5948 deletions
+1 -1
View File
@@ -112,7 +112,7 @@ link in a nightly build, or compile the modules as described above. You'll
also need the `Sphinx <https://www.sphinx-doc.org>`_ documentation generator.
If you have pip working, install Sphinx using::
pip install -U sphinx sphinx_rtd_theme sphinx_rtd_dark_mode
pip install -U sphinx sphinx-bootstrap-theme
Once Sphinx is installed, change into the ``sphinx`` directory inside the
Ren'Py checkout and run::
+18
View File
@@ -0,0 +1,18 @@
{
"start_a170b500": {
"area": [
53,
120,
426,
120
]
},
"start_f41f55d7": {
"area": [
106,
60,
426,
120
]
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

+12 -45
View File
@@ -1409,12 +1409,12 @@ style nvl_button_text:
## Bubble screen ###############################################################
##
## The bubble screen is used to display dialogue to the player when using
## speech bubbles. The bubble screen takes the same parameters as the say
## The Bubble screen is used to display dialogue to the player when using
## speech bubbles. The Bubble screen takes the same parameters as the say
## screen, must create a displayable with the id of "what", and can create
## displayables with the "namebox", "who", and "window" ids.
##
## https://www.renpy.org/doc/html/bubble.html#bubble-screen
## https://www.renpy.org/doc/html/screen_special.html#bubble
screen bubble(who, what):
style_prefix "bubble"
@@ -1434,18 +1434,22 @@ screen bubble(who, what):
text what:
id "what"
style bubble_window is empty
style bubble_namebox is empty
style bubble_who is default
style bubble_what is default
style bubble_window:
xpadding 30
top_padding 5
bottom_padding 5
background Frame("gui/bubble.png", 15, 15, 15, 15)
padding (15, 10)
style bubble_namebox:
xalign 0.5
background Frame("gui/bubble.png", 15, 15, 15, 15)
pos (-15, -5)
anchor (0.0, 1.0)
padding (15, 10)
style bubble_who:
xalign 0.5
@@ -1454,47 +1458,10 @@ style bubble_who:
style bubble_what:
align (0.5, 0.5)
text_align 0.5
textalign 0.5
layout "subtitle"
color "#000"
define bubble.frame = Frame("gui/bubble.png", 55, 55, 55, 95)
define bubble.thoughtframe = Frame("gui/thoughtbubble.png", 55, 55, 55, 55)
define bubble.properties = {
"bottom_left" : {
"window_background" : Transform(bubble.frame, xzoom=1, yzoom=1),
"window_bottom_padding" : 27,
},
"bottom_right" : {
"window_background" : Transform(bubble.frame, xzoom=-1, yzoom=1),
"window_bottom_padding" : 27,
},
"top_left" : {
"window_background" : Transform(bubble.frame, xzoom=1, yzoom=-1),
"window_top_padding" : 27,
},
"top_right" : {
"window_background" : Transform(bubble.frame, xzoom=-1, yzoom=-1),
"window_top_padding" : 27,
},
"thought" : {
"window_background" : bubble.thoughtframe,
}
}
define bubble.expand_area = {
"bottom_left" : (0, 0, 0, 22),
"bottom_right" : (0, 0, 0, 22),
"top_left" : (0, 22, 0, 0),
"top_right" : (0, 22, 0, 0),
"thought" : (0, 0, 0, 0),
}
################################################################################
+1 -3
View File
@@ -31,10 +31,8 @@ init python:
ANDROID_NO_BUNDLE = 6
ANDROID_OK = 7
JDK_REQUIREMENT=8
NO_RAPT_TEXT = _("To build Android packages, please download RAPT, unzip it, and place it into the Ren'Py directory. Then restart the Ren'Py launcher.")
NO_JDK_TEXT = _("A 64-bit/x64 Java [JDK_REQUIREMENT] Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=https://www.renpy.org/jdk/[JDK_REQUIREMENT]}download and install the JDK{/a}, then restart the Ren'Py launcher.")
NO_JDK_TEXT = _("A 64-bit/x64 Java 8 Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=https://adoptopenjdk.net/?variant=openjdk8&jvmVariant=hotspot}download and install the JDK{/a}, then restart the Ren'Py launcher.")
NO_SDK_TEXT = _("RAPT has been installed, but you'll need to install the Android SDK before you can build Android packages. Choose Install SDK to do this.")
NO_KEY_TEXT = _("RAPT has been installed, but a key hasn't been configured. Please generate new keys, or copy android.keystore and bundle.keystore to the base directory.")
NO_CONFIG_TEXT = _("The current project has not been configured. Use \"Configure\" to configure it before building.")
+2 -3
View File
@@ -1,4 +1,4 @@
# This file contains strings used by RAPT, so the Ren'Py translation framework
# can find them. It's automatically generated by rapt/update_translations.py, and
# hence should not be changed by hand.
@@ -63,12 +63,11 @@ init python hide:
__("I found an android.keystore file in the rapt directory. Do you want to use this file?")
__("I can create an application signing key for you. This key is required to create Universal APK for sideloading and stores other than Google Play.\n\nDo you want to create a key?")
__("I will create the key in the android.keystore file.\n\nYou need to back this file up. If you lose it, you will not be able to upgrade your application.\n\nYou also need to keep the key safe. If evil people get this file, they could make fake versions of your application, and potentially steal your users' data.\n\nWill you make a backup of android.keystore, and keep it in a safe place?")
__("\n\nSaying 'No' will prevent key creation.")
__("Could not create android.keystore. Is keytool in your path?")
__("I've finished creating android.keystore. Please back it up, and keep it in a safe place.")
__("I found a bundle.keystore file in the rapt directory. Do you want to use this file?")
__("I can create a bundle signing key for you. This key is required to build an Android App Bundle (AAB) for upload to Google Play.\n\nDo you want to create a key?")
__("I will create the key in the bundle.keystore file.\n\nYou need to back this file up. If you lose it, you will not be able to upgrade your application.\n\nYou also need to keep the key safe. If evil people get this file, they could make fake versions of your application, and potentially steal your users' data.\n\nWill you make a backup of bundle.keystore, and keep it in a safe place?")
__("\n\nSaying 'No' will prevent key creation.")
__("Could not create bundle.keystore. Is keytool in your path?")
__("I've opened the directory containing android.keystore and bundle.keystore. Please back them up, and keep them in a safe place.")
__("It looks like you're ready to start packaging games.")
+1 -2
View File
@@ -214,8 +214,7 @@ class CodeGenerator(object):
'gui.insensitive_color' : repr(self.p.insensitive_color.hexcode),
'gui.text_color' : repr(self.p.text_color.hexcode),
'gui.interface_text_color' : repr(self.p.text_color.hexcode),
'gui.choice_button_text_idle_color' : repr(self.p.idle_color.hexcode),
'gui.choice_button_text_insensitive_color' : repr(self.p.insensitive_color.hexcode),
'gui.choice_text_color' : repr(self.p.choice_color.hexcode),
}
self.update_defines(replacements, language_defines[self.p.language])
+5 -7
View File
@@ -408,15 +408,13 @@ class ImageGenerator(object):
import shutil
for fn in [ "bubble.png", "thoughtbubble.png" ]:
source = os.path.join(config.renpy_base, "gui", "game", "gui", "bubble.png")
dest = os.path.join(self.prefix, "bubble.png")
source = os.path.join(config.renpy_base, "gui", "game", "gui", fn)
dest = os.path.join(self.prefix, fn)
if source == dest:
return
if source == dest:
return
shutil.copyfile(source, dest)
shutil.copyfile(source, dest)
def generate_all(self):
+2 -2
View File
@@ -67,8 +67,8 @@ class GuiParameters(object):
if light:
self.selected_color = Color("#555555")
self.idle_color = Color("#707070")
self.idle_small_color = Color("#606060")
self.idle_color = Color("#aaaaaa")
self.idle_small_color = Color("#888888")
self.text_color = Color("#404040")
self.choice_color = Color("#cccccc")
+3 -1
View File
@@ -95,7 +95,9 @@ label install_live2d:
(r".*/Core/dll/android/(armeabi-v7a/libLive2DCubismCore.so)", r"rapt/prototype/renpyandroid/src/main/jniLibs/\1"),
(r".*/Core/dll/android/(arm64-v8a/libLive2DCubismCore.so)", r"rapt/prototype/renpyandroid/src/main/jniLibs/\1"),
(r".*/Core/dll/android/(x86_64/libLive2DCubismCore.so)", r"rapt/prototype/renpyandroid/src/main/jniLibs/\1"),
# This doesn't exist yet.
# (r".*/Core/dll/android/(x86_64/libLive2DCubismCore.so)", r"rapt/prototype/renpyandroid/src/main/jniLibs/\1"),
]
install_from_zip("Live2D Cubism SDK for Native", "CubismSdkForNative-4-*.zip", patterns)
+1 -9
View File
@@ -200,15 +200,7 @@ screen common:
add SPACER
for v, l in choices:
textbutton l:
action SetScreenVariable("selected", v)
selected_background REVERSE_IDLE
selected_hover_background REVERSE_HOVER
xpadding 20
size_group "choice"
text_selected_idle_color REVERSE_TEXT
text_selected_hover_color REVERSE_TEXT
text_xalign 0.5
textbutton l action SetScreenVariable("selected", v)
if selected is not None:
$ continue_ = Return(selected)
+22 -4
View File
@@ -97,14 +97,32 @@ label itch:
files = [ ]
for fn in os.listdir(destination):
fn = os.path.join(destination, fn)
if fn.endswith("-all.zip"):
channel = "win-osx-linux"
elif fn.endswith("-market.zip"):
channel = "win-osx-linux"
elif fn.endswith("-pc.zip"):
channel = "win-linux"
elif fn.endswith("-win.zip"):
channel = "win"
elif fn.endswith("-mac.zip"):
channel = "osx"
elif fn.endswith("-linux.tar.bz2"):
channel = "linux"
elif fn.endswith("-release.apk"):
channel = "android"
for pattern, channel in reversed(build['itch_channels']):
if fnmatch.fnmatch(fn, pattern):
break
else:
continue
fn = os.path.join(destination, fn)
files.append((fn, channel))
if not os.path.exists(destination):
-4
View File
@@ -355,7 +355,6 @@ init python:
build.classify_renpy("gui/game/gui/", "source")
build.classify_renpy("gui/game/gui/bubble.png", "source")
build.classify_renpy("gui/game/gui/thoughtbubble.png", "source")
build.classify_renpy("gui/game/gui/*", None)
source_and_binary("launcher", py=False)
@@ -450,6 +449,3 @@ python early:
# Since the launcher can be run directly or can be run from the SDK directory,
# uneliding files needs to be handled slightly differently.
define config.alternate_unelide_path = os.path.join(config.basedir, "launcher")
# Disable skipping.
define config.allow_skipping = False
+2 -2
View File
@@ -248,8 +248,8 @@ screen preferences():
add HALF_SPACER
textbutton _("Default theme") style "l_checkbox" action [SetField(persistent, "theme", None), RestartAtPreferences() ]
textbutton _("Dark theme") style "l_checkbox" action [SetField(persistent, "theme", "dark"), RestartAtPreferences()]
textbutton _("Custom theme") style "l_checkbox" action [SetField(persistent, "theme", "custom"), RestartAtPreferences()]
textbutton _("Dark theme") style "l_checkbox" action [SetField(persistent, "theme", "dark", None), RestartAtPreferences()]
textbutton _("Custom theme") style "l_checkbox" action [SetField(persistent, "theme", "custom", None), RestartAtPreferences()]
add SPACER
+1 -1
View File
@@ -20,7 +20,7 @@ label start:
define config.rtl = True
define gui.textalign = 1.0
define gui.text_align = 1.0
define gui.button_text_xalign = 1.0
define gui.prompt_text_xalign = 1.0
define gui.navigation_xpos = 240
+3 -13
View File
@@ -332,6 +332,8 @@
old "return"
new "retour"
translate french strings:
# renpy/common/00accessibility.rpy:76
old "Font Override"
new "Forcer la police"
@@ -810,11 +812,7 @@
# renpy/common/00director.rpy:1771
old "Click to set transform, right click to add to transform list."
new "Clic pour assigner le transform, clic droit pour ajouter à la liste des transforms."
# renpy/common/00director.rpy:1789
old "Click to set, right click to add to behind list."
new "Clic pour assigner, clic droit pour ajouter à la liste du \"behind\"."
new "Clic pour ajouter un transform, clic droit pour ajouter une liste de transforms."
# renpy/common/00preferences.rpy:528
old "audio when unfocused"
@@ -899,11 +897,3 @@
# renpy/common/00webvideo.rpy:5
old "Touch to play the video."
new "Touchez pour jouer la vidéo."
# renpy/common/00gui.rpy:456
old "This save was created on a different device. Maliciously constructed save files can harm your computer. Do you trust this save's creator and everyone who could have changed the file?"
new "Cette sauvegarde a été créée sur un autre appareil. Des faux fichiers de sauvegarde peuvent être utilisés pour endommager votre ordinateur. Faites-vous confiance au créateur de cette sauvegarde et à tous ceux qui auraient pu modifier le fichier ?"
# renpy/common/00gui.rpy:457
old "Do you trust the device the save was created on? You should only choose yes if you are the device's sole user."
new "Faites-vous confiance à l'appareil sur lequel cette sauvegarde a été créée ? Vous ne devriez dire oui que si vous en êtes l'unique utilisateur ."
+1 -5
View File
@@ -78,7 +78,7 @@
# _developer/developer.rpym:532
old "\n{color=#cfc}✔ predicted image (good){/color}\n{color=#fcc}✘ unpredicted image (bad){/color}\n{color=#fff}Drag to move.{/color}"
new "\n{color=#cfc}✔ image prédite (bien){/color}\n{color=#fcc}✘ image non prédite (pas bien){/color}\n{color=#fff}Glissez pour déplacer.{/color}"
new "\n{color=#cfc}✔ image prédite (bon){/color}\n{color=#fcc}✘ image prédite (mauvais){/color}\n{color=#fff}Glissez pour bouger.{/color}"
# _developer/inspector.rpym:38
old "Displayable Inspector"
@@ -207,7 +207,3 @@
# renpy/common/00console.rpy:784
old "stack: print the return stack"
new "stack : affiche la pile de retour"
# renpy/common/_developer/developer.rpym:70
old "Speech Bubble Editor (Shift+B)"
new "Éditeur de bulles de dialogue (Shift+B)"
-4
View File
@@ -455,7 +455,3 @@
# gui/game/gui.rpy:441
old "## Change the size and spacing of various things."
new "## Changer la taille et l'espacement de diverses choses."
# gui/game/gui.rpy:14
old "## Enable checks for invalid or unstable properties in screens or transforms"
new "## Active la vérification de propriétés invalides ou instables dans les screens et transforms"
+5 -49
View File
@@ -41,7 +41,7 @@
# android.rpy:32
old "RAPT has been installed, but you'll need to install the Android SDK before you can build Android packages. Choose Install SDK to do this."
new "RAPT a été installé, mais vous devez installer le kit de développement Android pour pouvoir compiler les paquets Android, avec « Installer le SDK »."
new "RAPT a été installé, mais vous devez installer le kit de développement Android pour pouvoir compiler les paquets Android. Choisissez « installer le kit de développement et créer les clés » pour cela."
# android.rpy:33
old "RAPT has been installed, but a key hasn't been configured. Please create a new key, or restore android.keystore."
@@ -65,11 +65,11 @@
# android.rpy:39
old "Attempts to emulate a televison-based Android console, like the OUYA or Fire TV.\n\nController input is mapped to the arrow keys, Enter is mapped to the select button, Escape is mapped to the menu button, and PageUp is mapped to the back button."
new "Tentative d’émulation d'une console télé basée sur Android, comme OUYA ou Fire TV.\n\nLa manette est émulée par les touches fléchées, le bouton select par la touche Entrée, le bouton menu par la touche Echap, et le bouton retour par la touche PageUp."
new "Tentative d’émulation d'une console télé basée sur Android, comme OUYA ou Fire TV.\n\n Le contrôleur est émulé par les touches fléchées, le bouton select par la touche Entrée, le bouton menu par la touche Echap, et le bouton retour par la touche PageUp."
# android.rpy:41
old "Downloads and installs the Android SDK and supporting packages. Optionally, generates the keys required to sign the package."
new "Télécharge et installe le kit de développement Android et les paquets requis. Optionnellement, génère les clés requises pour signer le paquet."
new "Télécharge et installe le kit de développement Android et les paquets supportés. Optionnellement, génère les clés requises pour signer le paquet."
# android.rpy:42
old "Configures the package name, version, and other information about this project."
@@ -1192,8 +1192,8 @@
new "Le nom de fichier ne peut pas être vide."
# game/android.rpy:31
old "A 64-bit/x64 Java [JDK_REQUIREMENT] Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=https://www.renpy.org/jdk/[JDK_REQUIREMENT]}download and install the JDK{/a}, then restart the Ren'Py launcher."
new "Un kit de développement Java [JDK_REQUIREMENT] 64-bit/x64 est requis pour construire des paquets Android depuis Windows. Le JDK est différent du JRE, donc il est possible d'avoir Java sans avoir le JDK.\n\n{a=https://www.renpy.org/jdk/[JDK_REQUIREMENT]}Téléchargez et installez le JDK{/a}, puis redémarrez Ren'Py."
old "A 64-bit/x64 Java 8 Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=https://adoptopenjdk.net/?variant=openjdk8&jvmVariant=hotspot}download and install the JDK{/a}, then restart the Ren'Py launcher."
new "Un kit de développement Java 8 64-bit/x64 est requis pour construire des paquets Android depuis Windows. Le JDK est différent du JRE, donc il est possible d'avoir Java sans avoir le JDK.\n\n{a=https://adoptopenjdk.net/?variant=openjdk8&jvmVariant=hotspot}Téléchargez et installez le JDK{/a}, puis redémarrez Ren'Py."
# game/android.rpy:50
old "Selects the Debug build, which can be accessed through Android Studio. Changing between debug and release builds requires an uninstall from your device."
@@ -2086,47 +2086,3 @@
# game/web.rpy:484
old "Creating package..."
new "Création du package..."
# game/android.rpy:37
old "RAPT has been installed, but a key hasn't been configured. Please generate new keys, or copy android.keystore and bundle.keystore to the base directory."
new "RAPT a été installé, mais aucune clé na été configurée. Veuillez générer de nouvelles clés, ou copier android.keystore and bundle.keystore dans le dossier racine du projet."
# game/android.rpy:44
old "Attempts to emulate a televison-based Android console.\n\nController input is mapped to the arrow keys, Enter is mapped to the select button, Escape is mapped to the menu button, and PageUp is mapped to the back button."
new "Tentative d’émulation d'une console télé basée sur Android.\n\nLa manette est émulée par les touches fléchées, le bouton select par la touche Entrée, le bouton menu par la touche Echap, et le bouton retour par la touche PageUp."
# game/android.rpy:46
old "Downloads and installs the Android SDK and supporting packages."
new "Télécharge et installe le kit de développement Android et les paquets requis."
# game/android.rpy:47
old "Generates the keys required to sign the package."
new "Génère les clés requises pour signer le package."
# game/android.rpy:381
old "Install SDK"
new "Installer le SDK"
# game/android.rpy:385
old "Generate Keys"
new "Générer les clés"
# game/androidstrings.rpy:32
old "How much RAM (in GB) do you want to allocate to Gradle?\nThis must be a positive integer number."
new "Combien de RAM (in GB) voulez-vous allouer à Gradle ?\nEntrez un nombre entier positif."
# game/androidstrings.rpy:33
old "The RAM size must contain only numbers and be positive."
new "La taille de RAM ne doit contenir que des chiffres et être positive."
# game/androidstrings.rpy:63
old "I found an android.keystore file in the rapt directory. Do you want to use this file?"
new "J'ai trouvé un fichier android.keystore dans le dossier \"rapt\". Voulez-vous l'utiliser ?"
# game/androidstrings.rpy:66
old "\n\nSaying 'No' will prevent key creation."
new "\n\nRépondre \"Non\" empêchera la création de clés."
# game/androidstrings.rpy:69
old "I found a bundle.keystore file in the rapt directory. Do you want to use this file?"
new "J'ai trouvé un fichier bundle.keystore dans le dossier \"rapt\". Voulez-vous l'utiliser ?"
+5 -13
View File
@@ -724,18 +724,10 @@
old "## Bubble screen"
new "## Screen des bulles"
# gui/game/screens.rpy:1412
old "## The bubble screen is used to display dialogue to the player when using speech bubbles. The Bubble screen takes the same parameters as the say screen, must create a displayable with the id of \"what\", and can create displayables with the \"namebox\", \"who\", and \"window\" ids."
# gui/game/screens.rpy:1399
old "## The Bubble screen is used to display dialogue to the player when using speech bubbles. The Bubble screen takes the same parameters as the say screen, must create a displayable with the id of \"what\", and can create displayables with the \"namebox\", \"who\", and \"window\" ids."
new "## Le screen des bulles est utilisé pour afficher des dialogues en utilisant des bulles. Ce screen prend les mêmes paramètres que le screen say, doit prévoir un displayable avec l'id \"what\", et peut créer des displayables avec les ids \"namebox\", \"who\", et \"window\"."
# gui/game/screens.rpy:1417
old "## https://www.renpy.org/doc/html/bubble.html#bubble-screen"
new "## https://www.renpy.org/doc/html/bubble.html#bubble-screen"
# gui/game/screens.rpy:676
old "Upload Sync"
new "Uploader Sync"
# gui/game/screens.rpy:680
old "Download Sync"
new "Télécharger Sync"
# gui/game/screens.rpy:1404
old "## https://www.renpy.org/doc/html/screen_special.html#bubble"
new "## https://www.renpy.org/doc/html/screen_special.html#bubble"
+5 -2
View File
@@ -1199,13 +1199,15 @@
old "Proceed"
new "Fortsetzen"
translate german strings:
# game/add_file.rpy:37
old "The file name may not be empty."
new "Der Dateiname darf nicht leer sein."
# game/android.rpy:35
old "A 64-bit/x64 Java [JDK_REQUIREMENT] Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=https://www.renpy.org/jdk/[JDK_REQUIREMENT]}download and install the JDK{/a}, then restart the Ren'Py launcher."
new "A 64-bit/x64 Java [JDK_REQUIREMENT] Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=https://www.renpy.org/jdk/[JDK_REQUIREMENT]}download and install the JDK{/a}, then restart the Ren'Py launcher."
old "A 64-bit/x64 Java 8 Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=https://adoptopenjdk.net/?variant=openjdk8&jvmVariant=hotspot}download and install the JDK{/a}, then restart the Ren'Py launcher."
new "A 64-bit/x64 Java 8 Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=https://adoptopenjdk.net/?variant=openjdk8&jvmVariant=hotspot}download and install the JDK{/a}, then restart the Ren'Py launcher."
# game/android.rpy:38
old "RAPT has been installed, but a bundle key hasn't been configured. Please create a new key, or restore bundle.keystore."
@@ -1930,3 +1932,4 @@
# game/web.rpy:348
old "Before packaging web apps, you'll need to download RenPyWeb, Ren'Py's web support. Would you like to download RenPyWeb now?"
new "Before packaging web apps, you'll need to download RenPyWeb, Ren'Py's web support. Would you like to download RenPyWeb now?"
+3 -2
View File
@@ -1320,8 +1320,8 @@
new "ファイル名が与えられていません。"
# game/android.rpy:31
old "A 64-bit/x64 Java [JDK_REQUIREMENT] Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=https://www.renpy.org/jdk/[JDK_REQUIREMENT]}download and install the JDK{/a}, then restart the Ren'Py launcher."
new "ウィンドウズでアンドロイドパッケージをビルドするには、 64-bit/x64 Java 8 Development Kit が必要になります。 JDK は JRE とは違うもので、Java には含まれていません。\n\n{a=https://www.renpy.org/jdk/[JDK_REQUIREMENT]}JDK{/a}をダンロード、インストールしてから Ren'Py ランチャーを再起動してください。"
old "A 64-bit/x64 Java 8 Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=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 "ウィンドウズでアンドロイドパッケージをビルドするには、 64-bit/x64 Java 8 Development Kit が必要になります。 JDK は JRE とは違うもので、Java には含まれていません。\n\n{a=http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html}JDK{/a}をダンロード、インストールしてから Ren'Py ランチャーを再起動してください。"
# game/android.rpy:50
old "Selects the Debug build, which can be accessed through Android Studio. Changing between debug and release builds requires an uninstall from your device."
@@ -2094,3 +2094,4 @@
# game/web.rpy:344
old "We will restore support in a future release of Ren'Py 8. Until then, please use Ren'Py 7 for web support."
new "Ren'Py 8 の将来のリリースでサポートを復活させます。それまではRen'Py 7 をウェブプラットフォームに使用ください。"
+2 -2
View File
@@ -36,8 +36,8 @@
new "안드로이드 패키지를 만드려면, RAPT 파일을 내려받고 렌파이 디렉터리 안에 압축 해제하세요. 그다음 렌파이를 재시작하세요."
# game/android.rpy:31
old "A 64-bit/x64 Java [JDK_REQUIREMENT] Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=https://www.renpy.org/jdk/[JDK_REQUIREMENT]}download and install the JDK{/a}, then restart the Ren'Py launcher."
new "윈도우에서 안드로이드 패키지를 만드려면 64비트 JDK가 필요합니다. JDK는 JRE와 다르므로 PC에 JDK가 없는 자바가 설치되어 있을 수 있습니다.\n\n{a=https://www.renpy.org/jdk/[JDK_REQUIREMENT]}JDK를 내려받아 설치한 뒤{/a}, 렌파이를 재시작해주세요."
old "A 64-bit/x64 Java 8 Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=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 "윈도우에서 안드로이드 패키지를 만드려면 64비트 JDK가 필요합니다. JDK는 JRE와 다르므로 PC에 JDK가 없는 자바가 설치되어 있을 수 있습니다.\n\n{a=http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html}JDK를 내려받아 설치한 뒤{/a}, 렌파이를 재시작해주세요."
# game/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."
+121 -233
View File
@@ -109,11 +109,11 @@ translate piglatin strings:
old "Debug"
new "Ebugday"
# renpy/common/00accessibility.rpy:223
# renpy/common/00accessibility.rpy:215
old "Self-Voicing Volume Drop"
new "Elfsay-Oicingvay Olumevay Ropday"
# renpy/common/00accessibility.rpy:234
# renpy/common/00accessibility.rpy:224
old "The options on this menu are intended to improve accessibility. They may not work with all games, and some combinations of options may render the game unplayable. This is not an issue with the game or engine. For the best results when changing fonts, try to keep the text size the same as it originally was."
new "Hetay optionsay onay histay enumay areay intendeday otay improveay accessibilityay. Heytay aymay otnay orkway ithway allay amesgay, anday omesay ombinationscay ofay optionsay aymay enderray hetay amegay unplayableay. Histay isay otnay anay issueay ithway hetay amegay oray engineay. Orfay hetay estbay esultsray henway angingchay ontsfay, ytray otay eepkay hetay exttay izesay hetay amesay asay itay originallyay asway."
@@ -269,595 +269,483 @@ translate piglatin strings:
old "{#month_short}Dec"
new "{#month_short}Ecday"
# renpy/common/00action_file.rpy:258
# renpy/common/00action_file.rpy:250
old "%b %d, %H:%M"
new "%bay %day, %Hay:%May"
# renpy/common/00action_file.rpy:378
# renpy/common/00action_file.rpy:364
old "Save slot %s: [text]"
new "Avesay otslay %say: [text]"
# renpy/common/00action_file.rpy:461
# renpy/common/00action_file.rpy:445
old "Load slot %s: [text]"
new "Oadlay otslay %say: [text]"
# renpy/common/00action_file.rpy:514
# renpy/common/00action_file.rpy:498
old "Delete slot [text]"
new "Eleteday otslay [text]"
# renpy/common/00action_file.rpy:593
# renpy/common/00action_file.rpy:577
old "File page auto"
new "Ilefay agepay autoay"
# renpy/common/00action_file.rpy:595
# renpy/common/00action_file.rpy:579
old "File page quick"
new "Ilefay agepay uickqay"
# renpy/common/00action_file.rpy:597
# renpy/common/00action_file.rpy:581
old "File page [text]"
new "Ilefay agepay [text]"
# renpy/common/00action_file.rpy:796
# renpy/common/00action_file.rpy:780
old "Next file page."
new "Extnay ilefay agepay."
# renpy/common/00action_file.rpy:868
# renpy/common/00action_file.rpy:852
old "Previous file page."
new "Reviouspay ilefay agepay."
# renpy/common/00action_file.rpy:929
# renpy/common/00action_file.rpy:913
old "Quick save complete."
new "Uickqay avesay ompletecay."
# renpy/common/00action_file.rpy:944
# renpy/common/00action_file.rpy:931
old "Quick save."
new "Uickqay avesay."
# renpy/common/00action_file.rpy:963
# renpy/common/00action_file.rpy:950
old "Quick load."
new "Uickqay oadlay."
# renpy/common/00action_other.rpy:381
# renpy/common/00action_other.rpy:377
old "Language [text]"
new "Anguagelay [text]"
# renpy/common/00action_other.rpy:721
# renpy/common/00action_other.rpy:664
old "Open [text] directory."
new "Penoay [text] irectoryday."
# renpy/common/00director.rpy:705
# renpy/common/00director.rpy:708
old "The interactive director is not enabled here."
new "Hetay interactiveay irectorday isay otnay enableday erehay."
# renpy/common/00director.rpy:1504
# renpy/common/00director.rpy:1481
old "⬆"
new "⬆"
# renpy/common/00director.rpy:1510
# renpy/common/00director.rpy:1487
old "⬇"
new "⬇"
# renpy/common/00director.rpy:1574
# renpy/common/00director.rpy:1551
old "Done"
new "Oneday"
# renpy/common/00director.rpy:1584
# renpy/common/00director.rpy:1561
old "(statement)"
new "(atementstay)"
# renpy/common/00director.rpy:1585
# renpy/common/00director.rpy:1562
old "(tag)"
new "(agtay)"
# renpy/common/00director.rpy:1586
# renpy/common/00director.rpy:1563
old "(attributes)"
new "(attributesay)"
# renpy/common/00director.rpy:1587
# renpy/common/00director.rpy:1564
old "(transform)"
new "(ansformtray)"
# renpy/common/00director.rpy:1612
# renpy/common/00director.rpy:1589
old "(transition)"
new "(ansitiontray)"
# renpy/common/00director.rpy:1624
# renpy/common/00director.rpy:1601
old "(channel)"
new "(annelchay)"
# renpy/common/00director.rpy:1625
# renpy/common/00director.rpy:1602
old "(filename)"
new "(ilenamefay)"
# renpy/common/00director.rpy:1654
# renpy/common/00director.rpy:1631
old "Change"
new "Hangecay"
# renpy/common/00director.rpy:1656
# renpy/common/00director.rpy:1633
old "Add"
new "Ddaay"
# renpy/common/00director.rpy:1659
# renpy/common/00director.rpy:1636
old "Cancel"
new "Ancelcay"
# renpy/common/00director.rpy:1662
# renpy/common/00director.rpy:1639
old "Remove"
new "Emoveray"
# renpy/common/00director.rpy:1697
# renpy/common/00director.rpy:1674
old "Statement:"
new "Tatementsay:"
# renpy/common/00director.rpy:1718
# renpy/common/00director.rpy:1695
old "Tag:"
new "Agtay:"
# renpy/common/00director.rpy:1734
# renpy/common/00director.rpy:1711
old "Attributes:"
new "Ttributesaay:"
# renpy/common/00director.rpy:1745
old "Click to toggle attribute, right click to toggle negative attribute."
new "Lickcay otay oggletay attributeay, ightray ickclay otay oggletay egativenay attributeay."
# renpy/common/00director.rpy:1757
# renpy/common/00director.rpy:1729
old "Transforms:"
new "Ransformstay:"
# renpy/common/00director.rpy:1768
old "Click to set transform, right click to add to transform list."
new "Lickcay otay etsay ansformtray, ightray ickclay otay adday otay ansformtray istlay."
# renpy/common/00director.rpy:1780
# renpy/common/00director.rpy:1748
old "Behind:"
new "Ehindbay:"
# renpy/common/00director.rpy:1789
old "Click to set, right click to add to behind list."
new "Lickcay otay etsay, ightray ickclay otay adday otay ehindbay istlay."
# renpy/common/00director.rpy:1801
# renpy/common/00director.rpy:1767
old "Transition:"
new "Ransitiontay:"
# renpy/common/00director.rpy:1819
# renpy/common/00director.rpy:1785
old "Channel:"
new "Hannelcay:"
# renpy/common/00director.rpy:1837
# renpy/common/00director.rpy:1803
old "Audio Filename:"
new "Udioaay Ilenamefay:"
# renpy/common/00gui.rpy:446
# renpy/common/00gui.rpy:435
old "Are you sure?"
new "Reaay ouyay uresay?"
# renpy/common/00gui.rpy:447
# renpy/common/00gui.rpy:436
old "Are you sure you want to delete this save?"
new "Reaay ouyay uresay ouyay antway otay eleteday histay avesay?"
# renpy/common/00gui.rpy:448
# renpy/common/00gui.rpy:437
old "Are you sure you want to overwrite your save?"
new "Reaay ouyay uresay ouyay antway otay overwriteay ouryay avesay?"
# renpy/common/00gui.rpy:449
# renpy/common/00gui.rpy:438
old "Loading will lose unsaved progress.\nAre you sure you want to do this?"
new "Oadinglay illway oselay unsaveday rogresspay.\nReaay ouyay uresay ouyay antway otay oday histay?"
# renpy/common/00gui.rpy:450
# renpy/common/00gui.rpy:439
old "Are you sure you want to quit?"
new "Reaay ouyay uresay ouyay antway otay uitqay?"
# renpy/common/00gui.rpy:451
# renpy/common/00gui.rpy:440
old "Are you sure you want to return to the main menu?\nThis will lose unsaved progress."
new "Reaay ouyay uresay ouyay antway otay eturnray otay hetay ainmay enumay?\nHistay illway oselay unsaveday rogresspay."
# renpy/common/00gui.rpy:452
# renpy/common/00gui.rpy:441
old "Are you sure you want to end the replay?"
new "Reaay ouyay uresay ouyay antway otay enday hetay eplayray?"
# renpy/common/00gui.rpy:453
# renpy/common/00gui.rpy:442
old "Are you sure you want to begin skipping?"
new "Reaay ouyay uresay ouyay antway otay eginbay kippingsay?"
# renpy/common/00gui.rpy:454
# renpy/common/00gui.rpy:443
old "Are you sure you want to skip to the next choice?"
new "Reaay ouyay uresay ouyay antway otay kipsay otay hetay extnay oicechay?"
# renpy/common/00gui.rpy:455
# renpy/common/00gui.rpy:444
old "Are you sure you want to skip unseen dialogue to the next choice?"
new "Reaay ouyay uresay ouyay antway otay kipsay unseenay ialogueday otay hetay extnay oicechay?"
# renpy/common/00gui.rpy:456
old "This save was created on a different device. Maliciously constructed save files can harm your computer. Do you trust this save's creator and everyone who could have changed the file?"
new "Histay avesay asway reatedcay onay aay ifferentday eviceday. Aliciouslymay onstructedcay avesay ilesfay ancay armhay ouryay omputercay. Oday ouyay usttray histay avesay'say reatorcay anday everyoneay howay ouldcay avehay angedchay hetay ilefay?"
# renpy/common/00gui.rpy:457
old "Do you trust the device the save was created on? You should only choose yes if you are the device's sole user."
new "Oday ouyay usttray hetay eviceday hetay avesay asway reatedcay onay? Ouyay ouldshay onlyay oosechay esyay ifay ouyay areay hetay eviceday'say olesay useray."
# renpy/common/00keymap.rpy:322
# renpy/common/00keymap.rpy:310
old "Failed to save screenshot as %s."
new "Ailedfay otay avesay creenshotsay asay %say."
# renpy/common/00keymap.rpy:334
# renpy/common/00keymap.rpy:322
old "Saved screenshot as %s."
new "Avedsay creenshotsay asay %say."
# renpy/common/00library.rpy:235
# renpy/common/00library.rpy:211
old "Skip Mode"
new "Kipsay Odemay"
# renpy/common/00library.rpy:340
# renpy/common/00library.rpy:297
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 "Histay rogrampay ontainscay eefray oftwaresay underay aay umbernay ofay icenseslay, includingay hetay Itmay Icenselay anday Nugay Esserlay Eneralgay Ublicpay Icenselay. Aay ompletecay istlay ofay oftwaresay, includingay inkslay otay ullfay ourcesay odecay, ancay ebay oundfay {a=https://www.renpy.org/l/license}erehay{/a}."
# renpy/common/00preferences.rpy:271
# renpy/common/00preferences.rpy:263
old "display"
new "isplayday"
# renpy/common/00preferences.rpy:283
# renpy/common/00preferences.rpy:275
old "transitions"
new "ansitionstray"
# renpy/common/00preferences.rpy:292
# renpy/common/00preferences.rpy:284
old "skip transitions"
new "kipsay ansitionstray"
# renpy/common/00preferences.rpy:294
# renpy/common/00preferences.rpy:286
old "video sprites"
new "ideovay pritessay"
# renpy/common/00preferences.rpy:303
# renpy/common/00preferences.rpy:295
old "show empty window"
new "owshay emptyay indowway"
# renpy/common/00preferences.rpy:312
# renpy/common/00preferences.rpy:304
old "text speed"
new "exttay peedsay"
# renpy/common/00preferences.rpy:320
# renpy/common/00preferences.rpy:312
old "joystick"
new "oystickjay"
# renpy/common/00preferences.rpy:320
# renpy/common/00preferences.rpy:312
old "joystick..."
new "oystickjay..."
# renpy/common/00preferences.rpy:327
# renpy/common/00preferences.rpy:319
old "skip"
new "kipsay"
# renpy/common/00preferences.rpy:330
# renpy/common/00preferences.rpy:322
old "skip unseen [text]"
new "kipsay unseenay [text]"
# renpy/common/00preferences.rpy:335
# renpy/common/00preferences.rpy:327
old "skip unseen text"
new "kipsay unseenay exttay"
# renpy/common/00preferences.rpy:337
# renpy/common/00preferences.rpy:329
old "begin skipping"
new "eginbay kippingsay"
# renpy/common/00preferences.rpy:341
# renpy/common/00preferences.rpy:333
old "after choices"
new "afteray oiceschay"
# renpy/common/00preferences.rpy:348
# renpy/common/00preferences.rpy:340
old "skip after choices"
new "kipsay afteray oiceschay"
# renpy/common/00preferences.rpy:350
# renpy/common/00preferences.rpy:342
old "auto-forward time"
new "autoay-orwardfay imetay"
# renpy/common/00preferences.rpy:364
# renpy/common/00preferences.rpy:356
old "auto-forward"
new "autoay-orwardfay"
# renpy/common/00preferences.rpy:371
# renpy/common/00preferences.rpy:363
old "Auto forward"
new "Utoaay orwardfay"
# renpy/common/00preferences.rpy:374
# renpy/common/00preferences.rpy:366
old "auto-forward after click"
new "autoay-orwardfay afteray ickclay"
# renpy/common/00preferences.rpy:383
# renpy/common/00preferences.rpy:375
old "automatic move"
new "automaticay ovemay"
# renpy/common/00preferences.rpy:392
# renpy/common/00preferences.rpy:384
old "wait for voice"
new "aitway orfay oicevay"
# renpy/common/00preferences.rpy:401
# renpy/common/00preferences.rpy:393
old "voice sustain"
new "oicevay ustainsay"
# renpy/common/00preferences.rpy:410
# renpy/common/00preferences.rpy:402
old "self voicing"
new "elfsay oicingvay"
# renpy/common/00preferences.rpy:419
# renpy/common/00preferences.rpy:411
old "self voicing volume drop"
new "elfsay oicingvay olumevay ropday"
# renpy/common/00preferences.rpy:427
# renpy/common/00preferences.rpy:419
old "clipboard voicing"
new "ipboardclay oicingvay"
# renpy/common/00preferences.rpy:436
# renpy/common/00preferences.rpy:428
old "debug voicing"
new "ebugday oicingvay"
# renpy/common/00preferences.rpy:445
# renpy/common/00preferences.rpy:437
old "emphasize audio"
new "emphasizeay audioay"
# renpy/common/00preferences.rpy:454
# renpy/common/00preferences.rpy:446
old "rollback side"
new "ollbackray idesay"
# renpy/common/00preferences.rpy:464
# renpy/common/00preferences.rpy:456
old "gl powersave"
new "glay owersavepay"
# renpy/common/00preferences.rpy:470
# renpy/common/00preferences.rpy:462
old "gl framerate"
new "glay ameratefray"
# renpy/common/00preferences.rpy:473
# renpy/common/00preferences.rpy:465
old "gl tearing"
new "glay earingtay"
# renpy/common/00preferences.rpy:476
# renpy/common/00preferences.rpy:468
old "font transform"
new "ontfay ansformtray"
# renpy/common/00preferences.rpy:479
# renpy/common/00preferences.rpy:471
old "font size"
new "ontfay izesay"
# renpy/common/00preferences.rpy:487
# renpy/common/00preferences.rpy:479
old "font line spacing"
new "ontfay inelay pacingsay"
# renpy/common/00preferences.rpy:495
# renpy/common/00preferences.rpy:487
old "system cursor"
new "ystemsay ursorcay"
# renpy/common/00preferences.rpy:504
# renpy/common/00preferences.rpy:496
old "renderer menu"
new "endererray enumay"
# renpy/common/00preferences.rpy:507
# renpy/common/00preferences.rpy:499
old "accessibility menu"
new "accessibilityay enumay"
# renpy/common/00preferences.rpy:510
# renpy/common/00preferences.rpy:502
old "high contrast text"
new "ighhay ontrastcay exttay"
# renpy/common/00preferences.rpy:519
# renpy/common/00preferences.rpy:511
old "audio when minimized"
new "audioay henway inimizedmay"
# renpy/common/00preferences.rpy:528
old "audio when unfocused"
new "audioay henway unfocuseday"
# renpy/common/00preferences.rpy:537
old "web cache preload"
new "ebway achecay reloadpay"
# renpy/common/00preferences.rpy:552
old "voice after game menu"
new "oicevay afteray amegay enumay"
# renpy/common/00preferences.rpy:571
# renpy/common/00preferences.rpy:531
old "main volume"
new "ainmay olumevay"
# renpy/common/00preferences.rpy:572
# renpy/common/00preferences.rpy:532
old "music volume"
new "usicmay olumevay"
# renpy/common/00preferences.rpy:573
# renpy/common/00preferences.rpy:533
old "sound volume"
new "oundsay olumevay"
# renpy/common/00preferences.rpy:574
# renpy/common/00preferences.rpy:534
old "voice volume"
new "oicevay olumevay"
# renpy/common/00preferences.rpy:575
# renpy/common/00preferences.rpy:535
old "mute main"
new "utemay ainmay"
# renpy/common/00preferences.rpy:576
# renpy/common/00preferences.rpy:536
old "mute music"
new "utemay usicmay"
# renpy/common/00preferences.rpy:577
# renpy/common/00preferences.rpy:537
old "mute sound"
new "utemay oundsay"
# renpy/common/00preferences.rpy:578
# renpy/common/00preferences.rpy:538
old "mute voice"
new "utemay oicevay"
# renpy/common/00preferences.rpy:579
# renpy/common/00preferences.rpy:539
old "mute all"
new "utemay allay"
# renpy/common/00preferences.rpy:653
# renpy/common/00preferences.rpy:620
old "Clipboard voicing enabled. Press 'shift+C' to disable."
new "Lipboardcay oicingvay enableday. Resspay 'iftshay+Cay' otay isableday."
# renpy/common/00preferences.rpy:655
# renpy/common/00preferences.rpy:622
old "Self-voicing would say \"[renpy.display.tts.last]\". Press 'alt+shift+V' to disable."
new "Elfsay-oicingvay ouldway aysay \"[renpy.display.tts.last]\". Resspay 'altay+iftshay+Vay' otay isableday."
# renpy/common/00preferences.rpy:657
# renpy/common/00preferences.rpy:624
old "Self-voicing enabled. Press 'v' to disable."
new "Elfsay-oicingvay enableday. Resspay 'vay' otay isableday."
# renpy/common/00speechbubble.rpy:344
old "Speech Bubble Editor"
new "Peechsay Ubblebay Ditoreay"
# renpy/common/00speechbubble.rpy:349
old "(hide)"
new "(idehay)"
# renpy/common/00sync.rpy:70
old "Sync downloaded."
new "Yncsay ownloadedday."
# renpy/common/00sync.rpy:190
old "Could not connect to the Ren'Py Sync server."
new "Ouldcay otnay onnectcay otay hetay Enray'Ypay Yncsay erversay."
# renpy/common/00sync.rpy:192
old "The Ren'Py Sync server timed out."
new "Hetay Enray'Ypay Yncsay erversay imedtay outay."
# renpy/common/00sync.rpy:194
old "An unknown error occurred while connecting to the Ren'Py Sync server."
new "Naay unknownay erroray occurreday hileway onnectingcay otay hetay Enray'Ypay Yncsay erversay."
# renpy/common/00sync.rpy:267
old "The Ren'Py Sync server does not have a copy of this sync. The sync ID may be invalid, or it may have timed out."
new "Hetay Enray'Ypay Yncsay erversay oesday otnay avehay aay opycay ofay histay yncsay. Hetay yncsay Diay aymay ebay invaliday, oray itay aymay avehay imedtay outay."
# renpy/common/00sync.rpy:409
old "Please enter the sync ID you generated.\nNever enter a sync ID you didn't create yourself."
new "Leasepay enteray hetay yncsay Diay ouyay eneratedgay.\nEvernay enteray aay yncsay Diay ouyay idnday'tay reatecay ourselfyay."
# renpy/common/00sync.rpy:428
old "The sync ID is not in the correct format."
new "Hetay yncsay Diay isay otnay inay hetay orrectcay ormatfay."
# renpy/common/00sync.rpy:448
old "The sync could not be decrypted."
new "Hetay yncsay ouldcay otnay ebay ecryptedday."
# renpy/common/00sync.rpy:471
old "The sync belongs to a different game."
new "Hetay yncsay elongsbay otay aay ifferentday amegay."
# renpy/common/00sync.rpy:476
old "The sync contains a file with an invalid name."
new "Hetay yncsay ontainscay aay ilefay ithway anay invaliday amenay."
# renpy/common/00sync.rpy:529
old "This will upload your saves to the {a=https://sync.renpy.org}Ren'Py Sync Server{/a}.\nDo you want to continue?"
new "Histay illway uploaday ouryay avessay otay hetay {a=https://sync.renpy.org}Enray'Ypay Yncsay Erversay{/a}.\nOday ouyay antway otay ontinuecay?"
# renpy/common/00sync.rpy:558
old "Enter Sync ID"
new "Ntereay Yncsay Diay"
# renpy/common/00sync.rpy:569
old "This will contact the {a=https://sync.renpy.org}Ren'Py Sync Server{/a}."
new "Histay illway ontactcay hetay {a=https://sync.renpy.org}Enray'Ypay Yncsay Erversay{/a}."
# renpy/common/00sync.rpy:596
old "Sync Success"
new "Yncsay Uccesssay"
# renpy/common/00sync.rpy:599
old "The Sync ID is:"
new "Hetay Yncsay Diay isay:"
# renpy/common/00sync.rpy:605
old "You can use this ID to download your save on another device.\nThis sync will expire in an hour.\nRen'Py Sync is supported by {a=https://www.renpy.org/sponsors.html}Ren'Py's Sponsors{/a}."
new "Ouyay ancay useay histay Diay otay ownloadday ouryay avesay onay anotheray eviceday.\nHistay yncsay illway expireay inay anay ourhay.\nEnray'Ypay Yncsay isay upportedsay ybay {a=https://www.renpy.org/sponsors.html}Enray'Ypay'say Ponsorssay{/a}."
# renpy/common/00sync.rpy:609
old "Continue"
new "Ontinuecay"
# renpy/common/00sync.rpy:631
old "Sync Error"
new "Yncsay Rroreay"
# renpy/common/00iap.rpy:219
old "Contacting App Store\nPlease Wait..."
new "Ontactingcay Ppaay Toresay\nLeasepay Aitway..."
# renpy/common/00updater.rpy:419
# renpy/common/00updater.rpy:390
old "The Ren'Py Updater is not supported on mobile devices."
new "Hetay Enray'Ypay Pdateruay isay otnay upportedsay onay obilemay evicesday."
# renpy/common/00updater.rpy:548
# renpy/common/00updater.rpy:519
old "An error is being simulated."
new "Naay erroray isay eingbay imulatedsay."
# renpy/common/00updater.rpy:738
# renpy/common/00updater.rpy:703
old "Either this project does not support updating, or the update status file was deleted."
new "Ithereay histay rojectpay oesday otnay upportsay updatingay, oray hetay updateay atusstay ilefay asway eletedday."
# renpy/common/00updater.rpy:752
# renpy/common/00updater.rpy:717
old "This account does not have permission to perform an update."
new "Histay accountay oesday otnay avehay ermissionpay otay erformpay anay updateay."
# renpy/common/00updater.rpy:755
# renpy/common/00updater.rpy:720
old "This account does not have permission to write the update log."
new "Histay accountay oesday otnay avehay ermissionpay otay riteway hetay updateay oglay."
# renpy/common/00updater.rpy:783
# renpy/common/00updater.rpy:748
old "Could not verify update signature."
new "Ouldcay otnay erifyvay updateay ignaturesay."
# renpy/common/00updater.rpy:1084
# renpy/common/00updater.rpy:1049
old "The update file was not downloaded."
new "Hetay updateay ilefay asway otnay ownloadedday."
# renpy/common/00updater.rpy:1102
# renpy/common/00updater.rpy:1067
old "The update file does not have the correct digest - it may have been corrupted."
new "Hetay updateay ilefay oesday otnay avehay hetay orrectcay igestday - itay aymay avehay eenbay orruptedcay."
# renpy/common/00updater.rpy:1252
# renpy/common/00updater.rpy:1217
old "While unpacking {}, unknown type {}."
new "Hileway unpackingay {}, unknownay ypetay {}."
# renpy/common/00updater.rpy:1624
# renpy/common/00updater.rpy:1589
old "Updater"
new "Pdateruay"
# renpy/common/00updater.rpy:1635
# renpy/common/00updater.rpy:1600
old "This program is up to date."
new "Histay rogrampay isay upay otay ateday."
# renpy/common/00updater.rpy:1637
# renpy/common/00updater.rpy:1602
old "[u.version] is available. Do you want to install it?"
new "[u.version] isay availableay. Oday ouyay antway otay installay itay?"
# renpy/common/00updater.rpy:1639
# renpy/common/00updater.rpy:1604
old "Preparing to download the updates."
new "Reparingpay otay ownloadday hetay updatesay."
# renpy/common/00updater.rpy:1641
# renpy/common/00updater.rpy:1606
old "Downloading the updates."
new "Ownloadingday hetay updatesay."
# renpy/common/00updater.rpy:1643
# renpy/common/00updater.rpy:1608
old "Unpacking the updates."
new "Npackinguay hetay updatesay."
# renpy/common/00updater.rpy:1647
# renpy/common/00updater.rpy:1612
old "The updates have been installed. The program will restart."
new "Hetay updatesay avehay eenbay installeday. Hetay rogrampay illway estartray."
# renpy/common/00updater.rpy:1649
# renpy/common/00updater.rpy:1614
old "The updates have been installed."
new "Hetay updatesay avehay eenbay installeday."
# renpy/common/00updater.rpy:1651
# renpy/common/00updater.rpy:1616
old "The updates were cancelled."
new "Hetay updatesay ereway ancelledcay."
+52 -60
View File
@@ -22,94 +22,90 @@ translate piglatin strings:
new "Ariablevay Iewervay"
# renpy/common/_developer/developer.rpym:51
old "Persistent Viewer"
new "Ersistentpay Iewervay"
# renpy/common/_developer/developer.rpym:53
old "Image Location Picker"
new "Mageiay Ocationlay Ickerpay"
# renpy/common/_developer/developer.rpym:55
# renpy/common/_developer/developer.rpym:53
old "Filename List"
new "Ilenamefay Istlay"
# renpy/common/_developer/developer.rpym:59
# renpy/common/_developer/developer.rpym:57
old "Show Image Load Log (F4)"
new "Howsay Mageiay Oadlay Oglay (4fay)"
# renpy/common/_developer/developer.rpym:62
# renpy/common/_developer/developer.rpym:60
old "Hide Image Load Log (F4)"
new "Idehay Mageiay Oadlay Oglay (4fay)"
# renpy/common/_developer/developer.rpym:65
# renpy/common/_developer/developer.rpym:63
old "Image Attributes"
new "Mageiay Ttributesaay"
# renpy/common/_developer/developer.rpym:70
old "Speech Bubble Editor (Shift+B)"
new "Peechsay Ubblebay Ditoreay (Hiftsay+Bay)"
# renpy/common/_developer/developer.rpym:97
# renpy/common/_developer/developer.rpym:90
old "[name] [attributes] (hidden)"
new "[name] [attributes] (iddenhay)"
# renpy/common/_developer/developer.rpym:101
# renpy/common/_developer/developer.rpym:94
old "[name] [attributes]"
new "[name] [attributes]"
# renpy/common/_developer/developer.rpym:151
# renpy/common/_developer/developer.rpym:143
old "Nothing to inspect."
new "Othingnay otay inspectay."
# renpy/common/_developer/developer.rpym:162
# renpy/common/_developer/developer.rpym:154
old "Hide deleted"
new "Idehay eletedday"
# renpy/common/_developer/developer.rpym:162
# renpy/common/_developer/developer.rpym:154
old "Show deleted"
new "Howsay eletedday"
# renpy/common/_developer/developer.rpym:318
old "Rectangle copied to clipboard."
new "Ectangleray opiedcay otay ipboardclay."
# renpy/common/_developer/developer.rpym:278
old "Return to the developer menu"
new "Eturnray otay hetay eveloperday enumay"
# renpy/common/_developer/developer.rpym:321
old "Position copied to clipboard."
new "Ositionpay opiedcay otay ipboardclay."
# renpy/common/_developer/developer.rpym:333
# renpy/common/_developer/developer.rpym:443
old "Rectangle: %r"
new "Ectangleray: %ray"
# renpy/common/_developer/developer.rpym:336
# renpy/common/_developer/developer.rpym:448
old "Mouse position: %r"
new "Ousemay ositionpay: %ray"
# renpy/common/_developer/developer.rpym:341
# renpy/common/_developer/developer.rpym:453
old "Right-click or escape to quit."
new "Ightray-ickclay oray escapeay otay uitqay."
# renpy/common/_developer/developer.rpym:389
# renpy/common/_developer/developer.rpym:485
old "Rectangle copied to clipboard."
new "Ectangleray opiedcay otay ipboardclay."
# renpy/common/_developer/developer.rpym:488
old "Position copied to clipboard."
new "Ositionpay opiedcay otay ipboardclay."
# renpy/common/_developer/developer.rpym:506
old "Type to filter: "
new "Ypetay otay ilterfay: "
# renpy/common/_developer/developer.rpym:507
# renpy/common/_developer/developer.rpym:631
old "Textures: [tex_count] ([tex_size_mb:.1f] MB)"
new "Exturestay: [tex_count] ([tex_size_mb:.1f] Bmay)"
# renpy/common/_developer/developer.rpym:511
# renpy/common/_developer/developer.rpym:635
old "Image cache: [cache_pct:.1f]% ([cache_size_mb:.1f] MB)"
new "Mageiay achecay: [cache_pct:.1f]% ([cache_size_mb:.1f] Bmay)"
# renpy/common/_developer/developer.rpym:521
# renpy/common/_developer/developer.rpym:645
old "✔ "
new "✔ "
# renpy/common/_developer/developer.rpym:524
# renpy/common/_developer/developer.rpym:648
old "✘ "
new "✘ "
# renpy/common/_developer/developer.rpym:529
# renpy/common/_developer/developer.rpym:653
old "\n{color=#cfc}✔ predicted image (good){/color}\n{color=#fcc}✘ unpredicted image (bad){/color}\n{color=#fff}Drag to move.{/color}"
new "\n{color=#cfc}✔ redictedpay imageay (oodgay){/color}\n{color=#fcc}✘ unpredicteday imageay (adbay){/color}\n{color=#fff}Ragday otay ovemay.{/color}"
@@ -149,91 +145,87 @@ translate piglatin strings:
old "<repr() failed>"
new "<eprray() ailedfay>"
# renpy/common/00console.rpy:533
# renpy/common/00console.rpy:492
old "Press <esc> to exit console. Type help for help.\n"
new "Resspay <escay> otay exitay onsolecay. Ypetay elphay orfay elphay.\n"
# renpy/common/00console.rpy:537
# renpy/common/00console.rpy:496
old "Ren'Py script enabled."
new "Enray'Ypay criptsay enableday."
# renpy/common/00console.rpy:539
# renpy/common/00console.rpy:498
old "Ren'Py script disabled."
new "Enray'Ypay criptsay isabledday."
# renpy/common/00console.rpy:789
old "help: show this help\n help <expr>: show signature and documentation of <expr>"
new "elphay: owshay histay elphay\n elphay <expray>: owshay ignaturesay anday ocumentationday ofay <expray>"
# renpy/common/00console.rpy:747
old "help: show this help"
new "elphay: owshay histay elphay"
# renpy/common/00console.rpy:813
old "Help may display undocumented functions. Please check that the function or\nclass you want to use is documented.\n\n"
new "Elphay aymay isplayday undocumenteday unctionsfay. Leasepay eckchay hattay hetay unctionfay oray\nassclay ouyay antway otay useay isay ocumentedday.\n\n"
# renpy/common/00console.rpy:822
# renpy/common/00console.rpy:752
old "commands:\n"
new "ommandscay:\n"
# renpy/common/00console.rpy:832
# renpy/common/00console.rpy:762
old " <renpy script statement>: run the statement\n"
new " <enpyray criptsay atementstay>: unray hetay atementstay\n"
# renpy/common/00console.rpy:834
# renpy/common/00console.rpy:764
old " <python expression or statement>: run the expression or statement"
new " <ythonpay expressionay oray atementstay>: unray hetay expressionay oray atementstay"
# renpy/common/00console.rpy:842
# renpy/common/00console.rpy:772
old "clear: clear the console history"
new "earclay: earclay hetay onsolecay istoryhay"
# renpy/common/00console.rpy:846
# renpy/common/00console.rpy:776
old "exit: exit the console"
new "exitay: exitay hetay onsolecay"
# renpy/common/00console.rpy:854
# renpy/common/00console.rpy:784
old "stack: print the return stack"
new "ackstay: rintpay hetay eturnray ackstay"
# renpy/common/00console.rpy:876
# renpy/common/00console.rpy:806
old "load <slot>: loads the game from slot"
new "oadlay <otslay>: oadslay hetay amegay omfray otslay"
# renpy/common/00console.rpy:889
# renpy/common/00console.rpy:819
old "save <slot>: saves the game in slot"
new "avesay <otslay>: avessay hetay amegay inay otslay"
# renpy/common/00console.rpy:900
# renpy/common/00console.rpy:830
old "reload: reloads the game, refreshing the scripts"
new "eloadray: eloadsray hetay amegay, efreshingray hetay criptssay"
# renpy/common/00console.rpy:908
# renpy/common/00console.rpy:838
old "watch <expression>: watch a python expression\n watch short: makes the representation of traced expressions short (default)\n watch long: makes the representation of traced expressions as is"
new "atchway <expressionay>: atchway aay ythonpay expressionay\n atchway ortshay: akesmay hetay epresentationray ofay acedtray expressionsay ortshay (efaultday)\n atchway onglay: akesmay hetay epresentationray ofay acedtray expressionsay asay isay"
# renpy/common/00console.rpy:945
# renpy/common/00console.rpy:875
old "unwatch <expression>: stop watching an expression"
new "unwatchay <expressionay>: opstay atchingway anay expressionay"
# renpy/common/00console.rpy:991
# renpy/common/00console.rpy:918
old "unwatchall: stop watching all expressions"
new "unwatchallay: opstay atchingway allay expressionsay"
# renpy/common/00console.rpy:1012
# renpy/common/00console.rpy:939
old "jump <label>: jumps to label"
new "umpjay <abellay>: umpsjay otay abellay"
# renpy/common/00console.rpy:1028
# renpy/common/00console.rpy:955
old "short: Shorten the representation of objects on the console (default)."
new "ortshay: Hortensay hetay epresentationray ofay objectsay onay hetay onsolecay (efaultday)."
# renpy/common/00console.rpy:1032
# renpy/common/00console.rpy:959
old "long: Print the full representation of objects on the console."
new "onglay: Rintpay hetay ullfay epresentationray ofay objectsay onay hetay onsolecay."
# renpy/common/00console.rpy:1036
# renpy/common/00console.rpy:963
old "escape: Enables escaping of unicode symbols in unicode strings."
new "escapeay: Nableseay escapingay ofay unicodeay ymbolssay inay unicodeay ringsstay."
# renpy/common/00console.rpy:1040
# renpy/common/00console.rpy:967
old "unescape: Disables escaping of unicode symbols in unicode strings and print it as is (default)."
new "unescapeay: Isablesday escapingay ofay unicodeay ymbolssay inay unicodeay ringsstay anday rintpay itay asay isay (efaultday)."
+18 -18
View File
@@ -129,75 +129,75 @@ translate piglatin strings:
old "Back (B)"
new "Ackbay (Bay)"
# renpy/common/_errorhandling.rpym:555
# renpy/common/_errorhandling.rpym:553
old "Open"
new "Penoay"
# renpy/common/_errorhandling.rpym:557
# renpy/common/_errorhandling.rpym:555
old "Opens the traceback.txt file in a text editor."
new "Pensoay hetay acebacktray.xttay ilefay inay aay exttay editoray."
# renpy/common/_errorhandling.rpym:559
# renpy/common/_errorhandling.rpym:557
old "Copy BBCode"
new "Opycay Bcodebay"
# renpy/common/_errorhandling.rpym:561
# renpy/common/_errorhandling.rpym:559
old "Copies the traceback.txt file to the clipboard as BBcode for forums like https://lemmasoft.renai.us/."
new "Opiescay hetay acebacktray.xttay ilefay otay hetay ipboardclay asay Bcodebay orfay orumsfay ikelay ttpshay://emmasoftlay.enairay.usay/."
# renpy/common/_errorhandling.rpym:563
# renpy/common/_errorhandling.rpym:561
old "Copy Markdown"
new "Opycay Arkdownmay"
# renpy/common/_errorhandling.rpym:565
# renpy/common/_errorhandling.rpym:563
old "Copies the traceback.txt file to the clipboard as Markdown for Discord."
new "Opiescay hetay acebacktray.xttay ilefay otay hetay ipboardclay asay Arkdownmay orfay Iscordday."
# renpy/common/_errorhandling.rpym:594
# renpy/common/_errorhandling.rpym:592
old "An exception has occurred."
new "Naay exceptionay ashay occurreday."
# renpy/common/_errorhandling.rpym:617
# renpy/common/_errorhandling.rpym:615
old "Rollback"
new "Ollbackray"
# renpy/common/_errorhandling.rpym:619
# renpy/common/_errorhandling.rpym:617
old "Attempts a roll back to a prior time, allowing you to save or choose a different choice."
new "Ttemptsaay aay ollray ackbay otay aay riorpay imetay, allowingay ouyay otay avesay oray oosechay aay ifferentday oicechay."
# renpy/common/_errorhandling.rpym:622
# renpy/common/_errorhandling.rpym:620
old "Ignore"
new "Gnoreiay"
# renpy/common/_errorhandling.rpym:626
# renpy/common/_errorhandling.rpym:624
old "Ignores the exception, allowing you to continue."
new "Gnoresiay hetay exceptionay, allowingay ouyay otay ontinuecay."
# renpy/common/_errorhandling.rpym:628
# renpy/common/_errorhandling.rpym:626
old "Ignores the exception, allowing you to continue. This often leads to additional errors."
new "Gnoresiay hetay exceptionay, allowingay ouyay otay ontinuecay. Histay oftenay eadslay otay additionalay errorsay."
# renpy/common/_errorhandling.rpym:632
# renpy/common/_errorhandling.rpym:630
old "Reload"
new "Eloadray"
# renpy/common/_errorhandling.rpym:634
# renpy/common/_errorhandling.rpym:632
old "Reloads the game from disk, saving and restoring game state if possible."
new "Eloadsray hetay amegay omfray iskday, avingsay anday estoringray amegay atestay ifay ossiblepay."
# renpy/common/_errorhandling.rpym:637
# renpy/common/_errorhandling.rpym:635
old "Console"
new "Onsolecay"
# renpy/common/_errorhandling.rpym:639
# renpy/common/_errorhandling.rpym:637
old "Opens a console to allow debugging the problem."
new "Pensoay aay onsolecay otay alloway ebuggingday hetay roblempay."
# renpy/common/_errorhandling.rpym:652
# renpy/common/_errorhandling.rpym:650
old "Quits the game."
new "Uitsqay hetay amegay."
# renpy/common/_errorhandling.rpym:673
# renpy/common/_errorhandling.rpym:671
old "Parsing the script failed."
new "Arsingpay hetay criptsay ailedfay."
+105 -109
View File
@@ -13,427 +13,423 @@ translate piglatin strings:
old "## Calling gui.init resets the styles to sensible default values, and sets the width and height of the game."
new "## Allingcay uigay.initay esetsray hetay ylesstay otay ensiblesay efaultday aluesvay, anday etssay hetay idthway anday eighthay ofay hetay amegay."
# gui/game/gui.rpy:14
old "## Enable checks for invalid or unstable properties in screens or transforms"
new "## Nableeay eckschay orfay invaliday oray unstableay ropertiespay inay creenssay oray ansformstray"
# gui/game/gui.rpy:19
# gui/game/gui.rpy:17
old "## GUI Configuration Variables"
new "## Uigay Onfigurationcay Ariablesvay"
# gui/game/gui.rpy:23
# gui/game/gui.rpy:21
old "## Colors"
new "## Olorscay"
# gui/game/gui.rpy:25
# gui/game/gui.rpy:23
old "## The colors of text in the interface."
new "## Hetay olorscay ofay exttay inay hetay interfaceay."
# gui/game/gui.rpy:27
# gui/game/gui.rpy:25
old "## An accent color used throughout the interface to label and highlight text."
new "## Naay accentay olorcay useday hroughouttay hetay interfaceay otay abellay anday ighlighthay exttay."
# gui/game/gui.rpy:31
# gui/game/gui.rpy:29
old "## The color used for a text button when it is neither selected nor hovered."
new "## Hetay olorcay useday orfay aay exttay uttonbay henway itay isay eithernay electedsay ornay overedhay."
# gui/game/gui.rpy:34
# gui/game/gui.rpy:32
old "## The small color is used for small text, which needs to be brighter/darker to achieve the same effect."
new "## Hetay mallsay olorcay isay useday orfay mallsay exttay, hichway eedsnay otay ebay ighterbray/arkerday otay achieveay hetay amesay effectay."
# gui/game/gui.rpy:38
# gui/game/gui.rpy:36
old "## The color that is used for buttons and bars that are hovered."
new "## Hetay olorcay hattay isay useday orfay uttonsbay anday arsbay hattay areay overedhay."
# gui/game/gui.rpy:41
# gui/game/gui.rpy:39
old "## The color used for a text button when it is selected but not focused. A button is selected if it is the current screen or preference value."
new "## Hetay olorcay useday orfay aay exttay uttonbay henway itay isay electedsay utbay otnay ocusedfay. Aay uttonbay isay electedsay ifay itay isay hetay urrentcay creensay oray referencepay aluevay."
# gui/game/gui.rpy:45
# gui/game/gui.rpy:43
old "## The color used for a text button when it cannot be selected."
new "## Hetay olorcay useday orfay aay exttay uttonbay henway itay annotcay ebay electedsay."
# gui/game/gui.rpy:48
# gui/game/gui.rpy:46
old "## Colors used for the portions of bars that are not filled in. These are not used directly, but are used when re-generating bar image files."
new "## Olorscay useday orfay hetay ortionspay ofay arsbay hattay areay otnay illedfay inay. Hesetay areay otnay useday irectlyday, utbay areay useday henway eray-eneratinggay arbay imageay ilesfay."
# gui/game/gui.rpy:53
# gui/game/gui.rpy:51
old "## The colors used for dialogue and menu choice text."
new "## Hetay olorscay useday orfay ialogueday anday enumay oicechay exttay."
# gui/game/gui.rpy:58
# gui/game/gui.rpy:56
old "## Fonts and Font Sizes"
new "## Ontsfay anday Ontfay Izessay"
# gui/game/gui.rpy:60
# gui/game/gui.rpy:58
old "## The font used for in-game text."
new "## Hetay ontfay useday orfay inay-amegay exttay."
# gui/game/gui.rpy:63
# gui/game/gui.rpy:61
old "## The font used for character names."
new "## Hetay ontfay useday orfay aracterchay amesnay."
# gui/game/gui.rpy:66
# gui/game/gui.rpy:64
old "## The font used for out-of-game text."
new "## Hetay ontfay useday orfay outay-ofay-amegay exttay."
# gui/game/gui.rpy:69
# gui/game/gui.rpy:67
old "## The size of normal dialogue text."
new "## Hetay izesay ofay ormalnay ialogueday exttay."
# gui/game/gui.rpy:72
# gui/game/gui.rpy:70
old "## The size of character names."
new "## Hetay izesay ofay aracterchay amesnay."
# gui/game/gui.rpy:75
# gui/game/gui.rpy:73
old "## The size of text in the game's user interface."
new "## Hetay izesay ofay exttay inay hetay amegay'say useray interfaceay."
# gui/game/gui.rpy:78
# gui/game/gui.rpy:76
old "## The size of labels in the game's user interface."
new "## Hetay izesay ofay abelslay inay hetay amegay'say useray interfaceay."
# gui/game/gui.rpy:81
# gui/game/gui.rpy:79
old "## The size of text on the notify screen."
new "## Hetay izesay ofay exttay onay hetay otifynay creensay."
# gui/game/gui.rpy:84
# gui/game/gui.rpy:82
old "## The size of the game's title."
new "## Hetay izesay ofay hetay amegay'say itletay."
# gui/game/gui.rpy:88
# gui/game/gui.rpy:86
old "## Main and Game Menus"
new "## Ainmay anday Amegay Enusmay"
# gui/game/gui.rpy:90
# gui/game/gui.rpy:88
old "## The images used for the main and game menus."
new "## Hetay imagesay useday orfay hetay ainmay anday amegay enusmay."
# gui/game/gui.rpy:95
# gui/game/gui.rpy:93
old "## Dialogue"
new "## Ialogueday"
# gui/game/gui.rpy:97
# gui/game/gui.rpy:95
old "## These variables control how dialogue is displayed on the screen one line at a time."
new "## Hesetay ariablesvay ontrolcay owhay ialogueday isay isplayedday onay hetay creensay oneay inelay atay aay imetay."
# gui/game/gui.rpy:100
# gui/game/gui.rpy:98
old "## The height of the textbox containing dialogue."
new "## Hetay eighthay ofay hetay extboxtay ontainingcay ialogueday."
# gui/game/gui.rpy:103
# gui/game/gui.rpy:101
old "## The placement of the textbox vertically on the screen. 0.0 is the top, 0.5 is center, and 1.0 is the bottom."
new "## Hetay acementplay ofay hetay extboxtay erticallyvay onay hetay creensay. 0ay.0ay isay hetay optay, 0ay.5ay isay entercay, anday 1ay.0ay isay hetay ottombay."
# gui/game/gui.rpy:108
# gui/game/gui.rpy:106
old "## The placement of the speaking character's name, relative to the textbox. These can be a whole number of pixels from the left or top, or 0.5 to center."
new "## Hetay acementplay ofay hetay peakingsay aracterchay'say amenay, elativeray otay hetay extboxtay. Hesetay ancay ebay aay holeway umbernay ofay ixelspay omfray hetay eftlay oray optay, oray 0ay.5ay otay entercay."
# gui/game/gui.rpy:113
# gui/game/gui.rpy:111
old "## The horizontal alignment of the character's name. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
new "## Hetay orizontalhay alignmentay ofay hetay aracterchay'say amenay. Histay ancay ebay 0ay.0ay orfay eftlay-aligneday, 0ay.5ay orfay enteredcay, anday 1ay.0ay orfay ightray-aligneday."
# gui/game/gui.rpy:117
# gui/game/gui.rpy:115
old "## The width, height, and borders of the box containing the character's name, or None to automatically size it."
new "## Hetay idthway, eighthay, anday ordersbay ofay hetay oxbay ontainingcay hetay aracterchay'say amenay, oray Onenay otay automaticallyay izesay itay."
# gui/game/gui.rpy:122
# gui/game/gui.rpy:120
old "## The borders of the box containing the character's name, in left, top, right, bottom order."
new "## Hetay ordersbay ofay hetay oxbay ontainingcay hetay aracterchay'say amenay, inay eftlay, optay, ightray, ottombay orderay."
# gui/game/gui.rpy:126
# gui/game/gui.rpy:124
old "## If True, the background of the namebox will be tiled, if False, the background of the namebox will be scaled."
new "## Fiay Ruetay, hetay ackgroundbay ofay hetay ameboxnay illway ebay iledtay, ifay Alsefay, hetay ackgroundbay ofay hetay ameboxnay illway ebay caledsay."
# gui/game/gui.rpy:131
# gui/game/gui.rpy:129
old "## The placement of dialogue relative to the textbox. These can be a whole number of pixels relative to the left or top side of the textbox, or 0.5 to center."
new "## Hetay acementplay ofay ialogueday elativeray otay hetay extboxtay. Hesetay ancay ebay aay holeway umbernay ofay ixelspay elativeray otay hetay eftlay oray optay idesay ofay hetay extboxtay, oray 0ay.5ay otay entercay."
# gui/game/gui.rpy:137
# gui/game/gui.rpy:135
old "## The maximum width of dialogue text, in pixels."
new "## Hetay aximummay idthway ofay ialogueday exttay, inay ixelspay."
# gui/game/gui.rpy:140
# gui/game/gui.rpy:138
old "## The horizontal alignment of the dialogue text. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
new "## Hetay orizontalhay alignmentay ofay hetay ialogueday exttay. Histay ancay ebay 0ay.0ay orfay eftlay-aligneday, 0ay.5ay orfay enteredcay, anday 1ay.0ay orfay ightray-aligneday."
# gui/game/gui.rpy:145
# gui/game/gui.rpy:143
old "## Buttons"
new "## Uttonsbay"
# gui/game/gui.rpy:147
# gui/game/gui.rpy:145
old "## These variables, along with the image files in gui/button, control aspects of how buttons are displayed."
new "## Hesetay ariablesvay, alongay ithway hetay imageay ilesfay inay uigay/uttonbay, ontrolcay aspectsay ofay owhay uttonsbay areay isplayedday."
# gui/game/gui.rpy:150
# gui/game/gui.rpy:148
old "## The width and height of a button, in pixels. If None, Ren'Py computes a size."
new "## Hetay idthway anday eighthay ofay aay uttonbay, inay ixelspay. Fiay Onenay, Enray'Ypay omputescay aay izesay."
# gui/game/gui.rpy:154
# gui/game/gui.rpy:152
old "## The borders on each side of the button, in left, top, right, bottom order."
new "## Hetay ordersbay onay eachay idesay ofay hetay uttonbay, inay eftlay, optay, ightray, ottombay orderay."
# gui/game/gui.rpy:157
# gui/game/gui.rpy:155
old "## If True, the background image will be tiled. If False, the background image will be linearly scaled."
new "## Fiay Ruetay, hetay ackgroundbay imageay illway ebay iledtay. Fiay Alsefay, hetay ackgroundbay imageay illway ebay inearlylay caledsay."
# gui/game/gui.rpy:161
# gui/game/gui.rpy:159
old "## The font used by the button."
new "## Hetay ontfay useday ybay hetay uttonbay."
# gui/game/gui.rpy:164
# gui/game/gui.rpy:162
old "## The size of the text used by the button."
new "## Hetay izesay ofay hetay exttay useday ybay hetay uttonbay."
# gui/game/gui.rpy:167
# gui/game/gui.rpy:165
old "## The color of button text in various states."
new "## Hetay olorcay ofay uttonbay exttay inay ariousvay atesstay."
# gui/game/gui.rpy:173
# gui/game/gui.rpy:171
old "## The horizontal alignment of the button text. (0.0 is left, 0.5 is center, 1.0 is right)."
new "## Hetay orizontalhay alignmentay ofay hetay uttonbay exttay. (0ay.0ay isay eftlay, 0ay.5ay isay entercay, 1ay.0ay isay ightray)."
# gui/game/gui.rpy:178
# gui/game/gui.rpy:176
old "## These variables override settings for different kinds of buttons. Please see the gui documentation for the kinds of buttons available, and what each is used for."
new "## Hesetay ariablesvay overrideay ettingssay orfay ifferentday indskay ofay uttonsbay. Leasepay eesay hetay uigay ocumentationday orfay hetay indskay ofay uttonsbay availableay, anday hatway eachay isay useday orfay."
# gui/game/gui.rpy:182
# gui/game/gui.rpy:180
old "## These customizations are used by the default interface:"
new "## Hesetay ustomizationscay areay useday ybay hetay efaultday interfaceay:"
# gui/game/gui.rpy:197
# gui/game/gui.rpy:195
old "## You can also add your own customizations, by adding properly-named variables. For example, you can uncomment the following line to set the width of a navigation button."
new "## Ouyay ancay alsoay adday ouryay ownay ustomizationscay, ybay addingay roperlypay-amednay ariablesvay. Orfay exampleay, ouyay ancay uncommentay hetay ollowingfay inelay otay etsay hetay idthway ofay aay avigationnay uttonbay."
# gui/game/gui.rpy:204
# gui/game/gui.rpy:202
old "## Choice Buttons"
new "## Hoicecay Uttonsbay"
# gui/game/gui.rpy:206
# gui/game/gui.rpy:204
old "## Choice buttons are used in the in-game menus."
new "## Hoicecay uttonsbay areay useday inay hetay inay-amegay enusmay."
# gui/game/gui.rpy:220
# gui/game/gui.rpy:218
old "## File Slot Buttons"
new "## Ilefay Lotsay Uttonsbay"
# gui/game/gui.rpy:222
# gui/game/gui.rpy:220
old "## A file slot button is a special kind of button. It contains a thumbnail image, and text describing the contents of the save slot. A save slot uses image files in gui/button, like the other kinds of buttons."
new "## Aay ilefay otslay uttonbay isay aay pecialsay indkay ofay uttonbay. Tiay ontainscay aay humbnailtay imageay, anday exttay escribingday hetay ontentscay ofay hetay avesay otslay. Aay avesay otslay usesay imageay ilesfay inay uigay/uttonbay, ikelay hetay otheray indskay ofay uttonsbay."
# gui/game/gui.rpy:226
# gui/game/gui.rpy:224
old "## The save slot button."
new "## Hetay avesay otslay uttonbay."
# gui/game/gui.rpy:236
# gui/game/gui.rpy:234
old "## The width and height of thumbnails used by the save slots."
new "## Hetay idthway anday eighthay ofay humbnailstay useday ybay hetay avesay otsslay."
# gui/game/gui.rpy:240
# gui/game/gui.rpy:238
old "## The number of columns and rows in the grid of save slots."
new "## Hetay umbernay ofay olumnscay anday owsray inay hetay idgray ofay avesay otsslay."
# gui/game/gui.rpy:245
# gui/game/gui.rpy:243
old "## Positioning and Spacing"
new "## Ositioningpay anday Pacingsay"
# gui/game/gui.rpy:247
# gui/game/gui.rpy:245
old "## These variables control the positioning and spacing of various user interface elements."
new "## Hesetay ariablesvay ontrolcay hetay ositioningpay anday pacingsay ofay ariousvay useray interfaceay elementsay."
# gui/game/gui.rpy:250
# gui/game/gui.rpy:248
old "## The position of the left side of the navigation buttons, relative to the left side of the screen."
new "## Hetay ositionpay ofay hetay eftlay idesay ofay hetay avigationnay uttonsbay, elativeray otay hetay eftlay idesay ofay hetay creensay."
# gui/game/gui.rpy:254
# gui/game/gui.rpy:252
old "## The vertical position of the skip indicator."
new "## Hetay erticalvay ositionpay ofay hetay kipsay indicatoray."
# gui/game/gui.rpy:257
# gui/game/gui.rpy:255
old "## The vertical position of the notify screen."
new "## Hetay erticalvay ositionpay ofay hetay otifynay creensay."
# gui/game/gui.rpy:260
# gui/game/gui.rpy:258
old "## The spacing between menu choices."
new "## Hetay pacingsay etweenbay enumay oiceschay."
# gui/game/gui.rpy:263
# gui/game/gui.rpy:261
old "## Buttons in the navigation section of the main and game menus."
new "## Uttonsbay inay hetay avigationnay ectionsay ofay hetay ainmay anday amegay enusmay."
# gui/game/gui.rpy:266
# gui/game/gui.rpy:264
old "## Controls the amount of spacing between preferences."
new "## Ontrolscay hetay amountay ofay pacingsay etweenbay referencespay."
# gui/game/gui.rpy:269
# gui/game/gui.rpy:267
old "## Controls the amount of spacing between preference buttons."
new "## Ontrolscay hetay amountay ofay pacingsay etweenbay referencepay uttonsbay."
# gui/game/gui.rpy:272
# gui/game/gui.rpy:270
old "## The spacing between file page buttons."
new "## Hetay pacingsay etweenbay ilefay agepay uttonsbay."
# gui/game/gui.rpy:275
# gui/game/gui.rpy:273
old "## The spacing between file slots."
new "## Hetay pacingsay etweenbay ilefay otsslay."
# gui/game/gui.rpy:278
# gui/game/gui.rpy:276
old "## The position of the main menu text."
new "## Hetay ositionpay ofay hetay ainmay enumay exttay."
# gui/game/gui.rpy:282
# gui/game/gui.rpy:280
old "## Frames"
new "## Ramesfay"
# gui/game/gui.rpy:284
# gui/game/gui.rpy:282
old "## These variables control the look of frames that can contain user interface components when an overlay or window is not present."
new "## Hesetay ariablesvay ontrolcay hetay ooklay ofay amesfray hattay ancay ontaincay useray interfaceay omponentscay henway anay overlayay oray indowway isay otnay resentpay."
# gui/game/gui.rpy:287
# gui/game/gui.rpy:285
old "## Generic frames."
new "## Enericgay amesfray."
# gui/game/gui.rpy:290
# gui/game/gui.rpy:288
old "## The frame that is used as part of the confirm screen."
new "## Hetay amefray hattay isay useday asay artpay ofay hetay onfirmcay creensay."
# gui/game/gui.rpy:293
# gui/game/gui.rpy:291
old "## The frame that is used as part of the skip screen."
new "## Hetay amefray hattay isay useday asay artpay ofay hetay kipsay creensay."
# gui/game/gui.rpy:296
# gui/game/gui.rpy:294
old "## The frame that is used as part of the notify screen."
new "## Hetay amefray hattay isay useday asay artpay ofay hetay otifynay creensay."
# gui/game/gui.rpy:299
# gui/game/gui.rpy:297
old "## Should frame backgrounds be tiled?"
new "## Houldsay amefray ackgroundsbay ebay iledtay?"
# gui/game/gui.rpy:303
# gui/game/gui.rpy:301
old "## Bars, Scrollbars, and Sliders"
new "## Arsbay, Crollbarssay, anday Liderssay"
# gui/game/gui.rpy:305
# gui/game/gui.rpy:303
old "## These control the look and size of bars, scrollbars, and sliders."
new "## Hesetay ontrolcay hetay ooklay anday izesay ofay arsbay, crollbarssay, anday idersslay."
# gui/game/gui.rpy:307
# gui/game/gui.rpy:305
old "## The default GUI only uses sliders and vertical scrollbars. All of the other bars are only used in creator-written screens."
new "## Hetay efaultday Uigay onlyay usesay idersslay anday erticalvay crollbarssay. Llaay ofay hetay otheray arsbay areay onlyay useday inay reatorcay-rittenway creenssay."
# gui/game/gui.rpy:310
# gui/game/gui.rpy:308
old "## The height of horizontal bars, scrollbars, and sliders. The width of vertical bars, scrollbars, and sliders."
new "## Hetay eighthay ofay orizontalhay arsbay, crollbarssay, anday idersslay. Hetay idthway ofay erticalvay arsbay, crollbarssay, anday idersslay."
# gui/game/gui.rpy:316
# gui/game/gui.rpy:314
old "## True if bar images should be tiled. False if they should be linearly scaled."
new "## Ruetay ifay arbay imagesay ouldshay ebay iledtay. Alsefay ifay heytay ouldshay ebay inearlylay caledsay."
# gui/game/gui.rpy:321
# gui/game/gui.rpy:319
old "## Horizontal borders."
new "## Orizontalhay ordersbay."
# gui/game/gui.rpy:326
# gui/game/gui.rpy:324
old "## Vertical borders."
new "## Erticalvay ordersbay."
# gui/game/gui.rpy:331
# gui/game/gui.rpy:329
old "## What to do with unscrollable scrollbars in the gui. \"hide\" hides them, while None shows them."
new "## Hatway otay oday ithway unscrollableay crollbarssay inay hetay uigay. \"idehay\" ideshay hemtay, hileway Onenay owsshay hemtay."
# gui/game/gui.rpy:336
# gui/game/gui.rpy:334
old "## History"
new "## Istoryhay"
# gui/game/gui.rpy:338
# gui/game/gui.rpy:336
old "## The history screen displays dialogue that the player has already dismissed."
new "## Hetay istoryhay creensay isplaysday ialogueday hattay hetay ayerplay ashay alreadyay ismissedday."
# gui/game/gui.rpy:340
# gui/game/gui.rpy:338
old "## The number of blocks of dialogue history Ren'Py will keep."
new "## Hetay umbernay ofay ocksblay ofay ialogueday istoryhay Enray'Ypay illway eepkay."
# gui/game/gui.rpy:343
# gui/game/gui.rpy:341
old "## The height of a history screen entry, or None to make the height variable at the cost of performance."
new "## Hetay eighthay ofay aay istoryhay creensay entryay, oray Onenay otay akemay hetay eighthay ariablevay atay hetay ostcay ofay erformancepay."
# gui/game/gui.rpy:347
# gui/game/gui.rpy:345
old "## The position, width, and alignment of the label giving the name of the speaking character."
new "## Hetay ositionpay, idthway, anday alignmentay ofay hetay abellay ivinggay hetay amenay ofay hetay peakingsay aracterchay."
# gui/game/gui.rpy:354
# gui/game/gui.rpy:352
old "## The position, width, and alignment of the dialogue text."
new "## Hetay ositionpay, idthway, anday alignmentay ofay hetay ialogueday exttay."
# gui/game/gui.rpy:361
# gui/game/gui.rpy:359
old "## NVL-Mode"
new "## Vlnay-Odemay"
# gui/game/gui.rpy:363
# gui/game/gui.rpy:361
old "## The NVL-mode screen displays the dialogue spoken by NVL-mode characters."
new "## Hetay Vlnay-odemay creensay isplaysday hetay ialogueday pokensay ybay Vlnay-odemay aracterschay."
# gui/game/gui.rpy:365
# gui/game/gui.rpy:363
old "## The borders of the background of the NVL-mode background window."
new "## Hetay ordersbay ofay hetay ackgroundbay ofay hetay Vlnay-odemay ackgroundbay indowway."
# gui/game/gui.rpy:368
# gui/game/gui.rpy:366
old "## The maximum number of NVL-mode entries Ren'Py will display. When more entries than this are to be show, the oldest entry will be removed."
new "## Hetay aximummay umbernay ofay Vlnay-odemay entriesay Enray'Ypay illway isplayday. Henway oremay entriesay hantay histay areay otay ebay owshay, hetay oldestay entryay illway ebay emovedray."
# gui/game/gui.rpy:372
# gui/game/gui.rpy:370
old "## The height of an NVL-mode entry. Set this to None to have the entries dynamically adjust height."
new "## Hetay eighthay ofay anay Vlnay-odemay entryay. Etsay histay otay Onenay otay avehay hetay entriesay ynamicallyday adjustay eighthay."
# gui/game/gui.rpy:376
# gui/game/gui.rpy:374
old "## The spacing between NVL-mode entries when gui.nvl_height is None, and between NVL-mode entries and an NVL-mode menu."
new "## Hetay pacingsay etweenbay Vlnay-odemay entriesay henway uigay.vl_heightnay isay Onenay, anday etweenbay Vlnay-odemay entriesay anday anay Vlnay-odemay enumay."
# gui/game/gui.rpy:393
# gui/game/gui.rpy:391
old "## The position, width, and alignment of nvl_thought text (the text said by the nvl_narrator character.)"
new "## Hetay ositionpay, idthway, anday alignmentay ofay vl_thoughtnay exttay (hetay exttay aidsay ybay hetay vl_narratornay aracterchay.)"
# gui/game/gui.rpy:400
# gui/game/gui.rpy:398
old "## The position of nvl menu_buttons."
new "## Hetay ositionpay ofay vlnay enu_buttonsmay."
# gui/game/gui.rpy:405
# gui/game/gui.rpy:402
old "## Localization"
new "## Ocalizationlay"
# gui/game/gui.rpy:407
# gui/game/gui.rpy:404
old "## This controls where a line break is permitted. The default is suitable for most languages. A list of available values can be found at https://www.renpy.org/doc/html/style_properties.html#style-property-language"
new "## Histay ontrolscay hereway aay inelay eakbray isay ermittedpay. Hetay efaultday isay uitablesay orfay ostmay anguageslay. Aay istlay ofay availableay aluesvay ancay ebay oundfay atay ttpshay://wwway.enpyray.orgay/ocday/tmlhay/yle_propertiesstay.tmlhay#ylestay-ropertypay-anguagelay"
# gui/game/gui.rpy:415
# gui/game/gui.rpy:412
old "## Mobile devices"
new "## Obilemay evicesday"
# gui/game/gui.rpy:420
# gui/game/gui.rpy:417
old "## This increases the size of the quick buttons to make them easier to touch on tablets and phones."
new "## Histay increasesay hetay izesay ofay hetay uickqay uttonsbay otay akemay hemtay easieray otay ouchtay onay abletstay anday onesphay."
# gui/game/gui.rpy:427
# gui/game/gui.rpy:424
old "## This changes the size and spacing of various GUI elements to ensure they are easily visible on phones."
new "## Histay angeschay hetay izesay anday pacingsay ofay ariousvay Uigay elementsay otay ensureay heytay areay easilyay isiblevay onay onesphay."
# gui/game/gui.rpy:432
# gui/game/gui.rpy:429
old "## Font sizes."
new "## Ontfay izessay."
# gui/game/gui.rpy:440
# gui/game/gui.rpy:437
old "## Adjust the location of the textbox."
new "## Djustaay hetay ocationlay ofay hetay extboxtay."
# gui/game/gui.rpy:446
# gui/game/gui.rpy:443
old "## Change the size and spacing of various things."
new "## Hangecay hetay izesay anday pacingsay ofay ariousvay hingstay."
# gui/game/gui.rpy:460
# gui/game/gui.rpy:457
old "## File button layout."
new "## Ilefay uttonbay ayoutlay."
# gui/game/gui.rpy:464
# gui/game/gui.rpy:461
old "## NVL-mode."
new "## Vlnay-odemay."
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -190,8 +190,8 @@ translate piglatin strings:
new "## Ilesfay atchingmay ocumentationday atternspay areay uplicatedday inay aay acmay appay uildbay, osay heytay appearay inay othbay hetay appay anday hetay ipzay ilefay."
# gui/game/options.rpy:203
old "## A Google Play license key is required to perform in-app purchases. It can be found in the Google Play developer console, under \"Monetize\" > \"Monetization Setup\" > \"Licensing\"."
new "## Aay Ooglegay Laypay icenselay eykay isay equiredray otay erformpay inay-appay urchasespay. Tiay ancay ebay oundfay inay hetay Ooglegay Laypay eveloperday onsolecay, underay \"Onetizemay\" > \"Onetizationmay Etupsay\" > \"Icensinglay\"."
old "## A Google Play license key is required to download expansion files and perform in-app purchases. It can be found on the \"Services & APIs\" page of the Google Play developer console."
new "## Aay Ooglegay Laypay icenselay eykay isay equiredray otay ownloadday expansionay ilesfay anday erformpay inay-appay urchasespay. Tiay ancay ebay oundfay onay hetay \"Ervicessay & Pisaay\" agepay ofay hetay Ooglegay Laypay eveloperday onsolecay."
# gui/game/options.rpy:210
old "## The username and project name associated with an itch.io project, separated by a slash."
+93 -114
View File
@@ -281,395 +281,374 @@ translate piglatin strings:
old "## Buttons to access other pages."
new "## Uttonsbay otay accessay otheray agespay."
# gui/game/screens.rpy:660
# gui/game/screens.rpy:657
old "<"
new "<"
# gui/game/screens.rpy:663
# gui/game/screens.rpy:660
old "{#auto_page}A"
new "{#auto_page}Aay"
# gui/game/screens.rpy:666
# gui/game/screens.rpy:663
old "{#quick_page}Q"
new "{#quick_page}Qay"
# gui/game/screens.rpy:668
# gui/game/screens.rpy:665
old "## range(1, 10) gives the numbers from 1 to 9."
new "## angeray(1ay, 01ay) ivesgay hetay umbersnay omfray 1ay otay 9ay."
# gui/game/screens.rpy:672
# gui/game/screens.rpy:669
old ">"
new ">"
# gui/game/screens.rpy:676
old "Upload Sync"
new "Ploaduay Yncsay"
# gui/game/screens.rpy:680
old "Download Sync"
new "Ownloadday Yncsay"
# gui/game/screens.rpy:717
# gui/game/screens.rpy:704
old "## Preferences screen"
new "## Referencespay creensay"
# gui/game/screens.rpy:719
# gui/game/screens.rpy:706
old "## The preferences screen allows the player to configure the game to better suit themselves."
new "## Hetay referencespay creensay allowsay hetay ayerplay otay onfigurecay hetay amegay otay etterbay uitsay hemselvestay."
# gui/game/screens.rpy:722
# gui/game/screens.rpy:709
old "## https://www.renpy.org/doc/html/screen_special.html#preferences"
new "## ttpshay://wwway.enpyray.orgay/ocday/tmlhay/creen_specialsay.tmlhay#referencespay"
# gui/game/screens.rpy:739
# gui/game/screens.rpy:726
old "Display"
new "Isplayday"
# gui/game/screens.rpy:740
# gui/game/screens.rpy:727
old "Window"
new "Indowway"
# gui/game/screens.rpy:741
# gui/game/screens.rpy:728
old "Fullscreen"
new "Ullscreenfay"
# gui/game/screens.rpy:746
# gui/game/screens.rpy:733
old "Unseen Text"
new "Nseenuay Exttay"
# gui/game/screens.rpy:747
# gui/game/screens.rpy:734
old "After Choices"
new "Fteraay Hoicescay"
# gui/game/screens.rpy:748
# gui/game/screens.rpy:735
old "Transitions"
new "Ransitionstay"
# gui/game/screens.rpy:750
# gui/game/screens.rpy:737
old "## Additional vboxes of type \"radio_pref\" or \"check_pref\" can be added here, to add additional creator-defined preferences."
new "## Dditionalaay boxesvay ofay ypetay \"adio_prefray\" oray \"eck_prefchay\" ancay ebay addeday erehay, otay adday additionalay reatorcay-efinedday referencespay."
# gui/game/screens.rpy:761
# gui/game/screens.rpy:748
old "Text Speed"
new "Exttay Peedsay"
# gui/game/screens.rpy:765
# gui/game/screens.rpy:752
old "Auto-Forward Time"
new "Utoaay-Orwardfay Imetay"
# gui/game/screens.rpy:772
# gui/game/screens.rpy:759
old "Music Volume"
new "Usicmay Olumevay"
# gui/game/screens.rpy:779
# gui/game/screens.rpy:766
old "Sound Volume"
new "Oundsay Olumevay"
# gui/game/screens.rpy:785
# gui/game/screens.rpy:772
old "Test"
new "Esttay"
# gui/game/screens.rpy:789
# gui/game/screens.rpy:776
old "Voice Volume"
new "Oicevay Olumevay"
# gui/game/screens.rpy:800
# gui/game/screens.rpy:787
old "Mute All"
new "Utemay Llaay"
# gui/game/screens.rpy:876
# gui/game/screens.rpy:863
old "## History screen"
new "## Istoryhay creensay"
# gui/game/screens.rpy:878
# gui/game/screens.rpy:865
old "## This is a screen that displays the dialogue history to the player. While there isn't anything special about this screen, it does have to access the dialogue history stored in _history_list."
new "## Histay isay aay creensay hattay isplaysday hetay ialogueday istoryhay otay hetay ayerplay. Hileway heretay isnay'tay anythingay pecialsay aboutay histay creensay, itay oesday avehay otay accessay hetay ialogueday istoryhay oredstay inay history_list_ay."
# gui/game/screens.rpy:882
# gui/game/screens.rpy:869
old "## https://www.renpy.org/doc/html/history.html"
new "## ttpshay://wwway.enpyray.orgay/ocday/tmlhay/istoryhay.tmlhay"
# gui/game/screens.rpy:888
# gui/game/screens.rpy:875
old "## Avoid predicting this screen, as it can be very large."
new "## Voidaay redictingpay histay creensay, asay itay ancay ebay eryvay argelay."
# gui/game/screens.rpy:899
# gui/game/screens.rpy:886
old "## This lays things out properly if history_height is None."
new "## Histay ayslay hingstay outay roperlypay ifay istory_heighthay isay Onenay."
# gui/game/screens.rpy:909
# gui/game/screens.rpy:896
old "## Take the color of the who text from the Character, if set."
new "## Aketay hetay olorcay ofay hetay howay exttay omfray hetay Haractercay, ifay etsay."
# gui/game/screens.rpy:918
# gui/game/screens.rpy:905
old "The dialogue history is empty."
new "Hetay ialogueday istoryhay isay emptyay."
# gui/game/screens.rpy:921
# gui/game/screens.rpy:908
old "## This determines what tags are allowed to be displayed on the history screen."
new "## Histay eterminesday hatway agstay areay alloweday otay ebay isplayedday onay hetay istoryhay creensay."
# gui/game/screens.rpy:966
# gui/game/screens.rpy:953
old "## Help screen"
new "## Elphay creensay"
# gui/game/screens.rpy:968
# gui/game/screens.rpy:955
old "## A screen that gives information about key and mouse bindings. It uses other screens (keyboard_help, mouse_help, and gamepad_help) to display the actual help."
new "## Aay creensay hattay ivesgay informationay aboutay eykay anday ousemay indingsbay. Tiay usesay otheray creenssay (eyboard_helpkay, ouse_helpmay, anday amepad_helpgay) otay isplayday hetay actualay elphay."
# gui/game/screens.rpy:987
# gui/game/screens.rpy:974
old "Keyboard"
new "Eyboardkay"
# gui/game/screens.rpy:988
# gui/game/screens.rpy:975
old "Mouse"
new "Ousemay"
# gui/game/screens.rpy:991
# gui/game/screens.rpy:978
old "Gamepad"
new "Amepadgay"
# gui/game/screens.rpy:1004
# gui/game/screens.rpy:991
old "Enter"
new "Ntereay"
# gui/game/screens.rpy:1005
# gui/game/screens.rpy:992
old "Advances dialogue and activates the interface."
new "Dvancesaay ialogueday anday activatesay hetay interfaceay."
# gui/game/screens.rpy:1008
# gui/game/screens.rpy:995
old "Space"
new "Pacesay"
# gui/game/screens.rpy:1009
# gui/game/screens.rpy:996
old "Advances dialogue without selecting choices."
new "Dvancesaay ialogueday ithoutway electingsay oiceschay."
# gui/game/screens.rpy:1012
# gui/game/screens.rpy:999
old "Arrow Keys"
new "Rrowaay Eyskay"
# gui/game/screens.rpy:1013
# gui/game/screens.rpy:1000
old "Navigate the interface."
new "Avigatenay hetay interfaceay."
# gui/game/screens.rpy:1016
# gui/game/screens.rpy:1003
old "Escape"
new "Scapeeay"
# gui/game/screens.rpy:1017
# gui/game/screens.rpy:1004
old "Accesses the game menu."
new "Ccessesaay hetay amegay enumay."
# gui/game/screens.rpy:1020
# gui/game/screens.rpy:1007
old "Ctrl"
new "Trlcay"
# gui/game/screens.rpy:1021
# gui/game/screens.rpy:1008
old "Skips dialogue while held down."
new "Kipssay ialogueday hileway eldhay ownday."
# gui/game/screens.rpy:1024
# gui/game/screens.rpy:1011
old "Tab"
new "Abtay"
# gui/game/screens.rpy:1025
# gui/game/screens.rpy:1012
old "Toggles dialogue skipping."
new "Ogglestay ialogueday kippingsay."
# gui/game/screens.rpy:1028
# gui/game/screens.rpy:1015
old "Page Up"
new "Agepay Puay"
# gui/game/screens.rpy:1029
# gui/game/screens.rpy:1016
old "Rolls back to earlier dialogue."
new "Ollsray ackbay otay earlieray ialogueday."
# gui/game/screens.rpy:1032
# gui/game/screens.rpy:1019
old "Page Down"
new "Agepay Ownday"
# gui/game/screens.rpy:1033
# gui/game/screens.rpy:1020
old "Rolls forward to later dialogue."
new "Ollsray orwardfay otay aterlay ialogueday."
# gui/game/screens.rpy:1037
# gui/game/screens.rpy:1024
old "Hides the user interface."
new "Ideshay hetay useray interfaceay."
# gui/game/screens.rpy:1041
# gui/game/screens.rpy:1028
old "Takes a screenshot."
new "Akestay aay creenshotsay."
# gui/game/screens.rpy:1045
# gui/game/screens.rpy:1032
old "Toggles assistive {a=https://www.renpy.org/l/voicing}self-voicing{/a}."
new "Ogglestay assistiveay {a=https://www.renpy.org/l/voicing}elfsay-oicingvay{/a}."
# gui/game/screens.rpy:1049
# gui/game/screens.rpy:1036
old "Opens the accessibility menu."
new "Pensoay hetay accessibilityay enumay."
# gui/game/screens.rpy:1055
# gui/game/screens.rpy:1042
old "Left Click"
new "Eftlay Lickcay"
# gui/game/screens.rpy:1059
# gui/game/screens.rpy:1046
old "Middle Click"
new "Iddlemay Lickcay"
# gui/game/screens.rpy:1063
# gui/game/screens.rpy:1050
old "Right Click"
new "Ightray Lickcay"
# gui/game/screens.rpy:1067
# gui/game/screens.rpy:1054
old "Mouse Wheel Up\nClick Rollback Side"
new "Ousemay Heelway Puay\nLickcay Ollbackray Idesay"
# gui/game/screens.rpy:1071
# gui/game/screens.rpy:1058
old "Mouse Wheel Down"
new "Ousemay Heelway Ownday"
# gui/game/screens.rpy:1078
# gui/game/screens.rpy:1065
old "Right Trigger\nA/Bottom Button"
new "Ightray Riggertay\nAay/Ottombay Uttonbay"
# gui/game/screens.rpy:1082
# gui/game/screens.rpy:1069
old "Left Trigger\nLeft Shoulder"
new "Eftlay Riggertay\nEftlay Houldersay"
# gui/game/screens.rpy:1086
# gui/game/screens.rpy:1073
old "Right Shoulder"
new "Ightray Houldersay"
# gui/game/screens.rpy:1091
# gui/game/screens.rpy:1078
old "D-Pad, Sticks"
new "Day-Adpay, Tickssay"
# gui/game/screens.rpy:1095
# gui/game/screens.rpy:1082
old "Start, Guide"
new "Tartsay, Uidegay"
# gui/game/screens.rpy:1099
# gui/game/screens.rpy:1086
old "Y/Top Button"
new "Yay/Optay Uttonbay"
# gui/game/screens.rpy:1102
# gui/game/screens.rpy:1089
old "Calibrate"
new "Alibratecay"
# gui/game/screens.rpy:1130
# gui/game/screens.rpy:1117
old "## Additional screens"
new "## Dditionalaay creenssay"
# gui/game/screens.rpy:1134
# gui/game/screens.rpy:1121
old "## Confirm screen"
new "## Onfirmcay creensay"
# gui/game/screens.rpy:1136
# gui/game/screens.rpy:1123
old "## The confirm screen is called when Ren'Py wants to ask the player a yes or no question."
new "## Hetay onfirmcay creensay isay alledcay henway Enray'Ypay antsway otay askay hetay ayerplay aay esyay oray onay uestionqay."
# gui/game/screens.rpy:1139
# gui/game/screens.rpy:1126
old "## https://www.renpy.org/doc/html/screen_special.html#confirm"
new "## ttpshay://wwway.enpyray.orgay/ocday/tmlhay/creen_specialsay.tmlhay#onfirmcay"
# gui/game/screens.rpy:1143
# gui/game/screens.rpy:1130
old "## Ensure other screens do not get input while this screen is displayed."
new "## Nsureeay otheray creenssay oday otnay etgay inputay hileway histay creensay isay isplayedday."
# gui/game/screens.rpy:1167
# gui/game/screens.rpy:1154
old "Yes"
new "Esyay"
# gui/game/screens.rpy:1168
# gui/game/screens.rpy:1155
old "No"
new "Onay"
# gui/game/screens.rpy:1170
# gui/game/screens.rpy:1157
old "## Right-click and escape answer \"no\"."
new "## Ightray-ickclay anday escapeay answeray \"onay\"."
# gui/game/screens.rpy:1197
# gui/game/screens.rpy:1184
old "## Skip indicator screen"
new "## Kipsay indicatoray creensay"
# gui/game/screens.rpy:1199
# gui/game/screens.rpy:1186
old "## The skip_indicator screen is displayed to indicate that skipping is in progress."
new "## Hetay kip_indicatorsay creensay isay isplayedday otay indicateay hattay kippingsay isay inay rogresspay."
# gui/game/screens.rpy:1202
# gui/game/screens.rpy:1189
old "## https://www.renpy.org/doc/html/screen_special.html#skip-indicator"
new "## ttpshay://wwway.enpyray.orgay/ocday/tmlhay/creen_specialsay.tmlhay#kipsay-indicatoray"
# gui/game/screens.rpy:1214
# gui/game/screens.rpy:1201
old "Skipping"
new "Kippingsay"
# gui/game/screens.rpy:1221
# gui/game/screens.rpy:1208
old "## This transform is used to blink the arrows one after another."
new "## Histay ansformtray isay useday otay inkblay hetay arrowsay oneay afteray anotheray."
# gui/game/screens.rpy:1248
# gui/game/screens.rpy:1235
old "## We have to use a font that has the BLACK RIGHT-POINTING SMALL TRIANGLE glyph in it."
new "## Eway avehay otay useay aay ontfay hattay ashay hetay Lackbay Ightray-Ointingpay Mallsay Riangletay yphglay inay itay."
# gui/game/screens.rpy:1253
# gui/game/screens.rpy:1240
old "## Notify screen"
new "## Otifynay creensay"
# gui/game/screens.rpy:1255
# gui/game/screens.rpy:1242
old "## The notify screen is used to show the player a message. (For example, when the game is quicksaved or a screenshot has been taken.)"
new "## Hetay otifynay creensay isay useday otay owshay hetay ayerplay aay essagemay. (Orfay exampleay, henway hetay amegay isay uicksavedqay oray aay creenshotsay ashay eenbay akentay.)"
# gui/game/screens.rpy:1258
# gui/game/screens.rpy:1245
old "## https://www.renpy.org/doc/html/screen_special.html#notify-screen"
new "## ttpshay://wwway.enpyray.orgay/ocday/tmlhay/creen_specialsay.tmlhay#otifynay-creensay"
# gui/game/screens.rpy:1292
# gui/game/screens.rpy:1279
old "## NVL screen"
new "## Vlnay creensay"
# gui/game/screens.rpy:1294
# gui/game/screens.rpy:1281
old "## This screen is used for NVL-mode dialogue and menus."
new "## Histay creensay isay useday orfay Vlnay-odemay ialogueday anday enusmay."
# gui/game/screens.rpy:1296
# gui/game/screens.rpy:1283
old "## https://www.renpy.org/doc/html/screen_special.html#nvl"
new "## ttpshay://wwway.enpyray.orgay/ocday/tmlhay/creen_specialsay.tmlhay#vlnay"
# gui/game/screens.rpy:1307
# gui/game/screens.rpy:1294
old "## Displays dialogue in either a vpgrid or the vbox."
new "## Isplaysday ialogueday inay eitheray aay pgridvay oray hetay boxvay."
# gui/game/screens.rpy:1320
# gui/game/screens.rpy:1307
old "## Displays the menu, if given. The menu may be displayed incorrectly if config.narrator_menu is set to True."
new "## Isplaysday hetay enumay, ifay ivengay. Hetay enumay aymay ebay isplayedday incorrectlyay ifay onfigcay.arrator_menunay isay etsay otay Ruetay."
# gui/game/screens.rpy:1350
# gui/game/screens.rpy:1337
old "## This controls the maximum number of NVL-mode entries that can be displayed at once."
new "## Histay ontrolscay hetay aximummay umbernay ofay Vlnay-odemay entriesay hattay ancay ebay isplayedday atay onceay."
# gui/game/screens.rpy:1410
old "## Bubble screen"
new "## Ubblebay creensay"
# gui/game/screens.rpy:1412
old "## The bubble screen is used to display dialogue to the player when using speech bubbles. The bubble screen takes the same parameters as the say screen, must create a displayable with the id of \"what\", and can create displayables with the \"namebox\", \"who\", and \"window\" ids."
new "## Hetay ubblebay creensay isay useday otay isplayday ialogueday otay hetay ayerplay henway usingay peechsay ubblesbay. Hetay ubblebay creensay akestay hetay amesay arameterspay asay hetay aysay creensay, ustmay reatecay aay isplayableday ithway hetay iday ofay \"hatway\", anday ancay reatecay isplayablesday ithway hetay \"ameboxnay\", \"howay\", anday \"indowway\" idsay."
# gui/game/screens.rpy:1417
old "## https://www.renpy.org/doc/html/bubble.html#bubble-screen"
new "## ttpshay://wwway.enpyray.orgay/ocday/tmlhay/ubblebay.tmlhay#ubblebay-creensay"
# gui/game/screens.rpy:1501
# gui/game/screens.rpy:1399
old "## Mobile Variants"
new "## Obilemay Ariantsvay"
# gui/game/screens.rpy:1508
# gui/game/screens.rpy:1406
old "## Since a mouse may not be present, we replace the quick menu with a version that uses fewer and bigger buttons that are easier to touch."
new "## Incesay aay ousemay aymay otnay ebay resentpay, eway eplaceray hetay uickqay enumay ithway aay ersionvay hattay usesay ewerfay anday iggerbay uttonsbay hattay areay easieray otay ouchtay."
# gui/game/screens.rpy:1526
# gui/game/screens.rpy:1424
old "Menu"
new "Enumay"
+2 -2
View File
@@ -40,8 +40,8 @@
new "Aby zbudować pakiet dla Androida, pobierz RAPT, rozpakuj i umieść w katalogu Ren'Py. Następnie uruchom ponownie program Ren'py."
# game/android.rpy:31
old "A 64-bit/x64 Java [JDK_REQUIREMENT] Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=https://www.renpy.org/jdk/[JDK_REQUIREMENT]}download and install the JDK{/a}, then restart the Ren'Py launcher."
new "Tworzenie pakietów dla systemu Android w systemie Windows wymaga pakietu 64-bit/x64 Java Development Kit. JDK różni się od JRE, istnieje możliwość, że posiadasz Javę bez JDK.\n\n{a=https://www.renpy.org/jdk/[JDK_REQUIREMENT]}Pobierz i zainstaluj JDK{/a}, a następnie uruchom ponownie program Ren'py."
old "A 64-bit/x64 Java 8 Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=https://adoptopenjdk.net/?variant=openjdk8&jvmVariant=hotspot}download and install the JDK{/a}, then restart the Ren'Py launcher."
new "Tworzenie pakietów dla systemu Android w systemie Windows wymaga pakietu 64-bit/x64 Java Development Kit. JDK różni się od JRE, istnieje możliwość, że posiadasz Javę bez JDK.\n\n{a=https://adoptopenjdk.net/?variant=openjdk8&jvmVariant=hotspot}Pobierz i zainstaluj JDK{/a}, a następnie uruchom ponownie program Ren'py."
# game/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."
+2 -2
View File
@@ -40,8 +40,8 @@
new "Чтобы построить Android-пакет, пожалуйста, загрузите RAPT, разархивируйте его, и поместите в директорию Ren'Py. Затем перезагрузите лаунчер Ren'Py."
# android.rpy:31
old "A 64-bit/x64 Java [JDK_REQUIREMENT] Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=https://www.renpy.org/jdk/[JDK_REQUIREMENT]}download and install the JDK{/a}, then restart the Ren'Py launcher."
new "Чтобы построить Android-пакеты на Windows требуется 64-битный инструментарий разработки Java 8. JDK отличен от JRE, и возможно, у вас есть Java без JDK.\n\nПожалуйста, {a=https://www.renpy.org/jdk/[JDK_REQUIREMENT]}загрузите и установите JDK{/a}, и перезапустите лаунчер Ren'Py."
old "A 64-bit/x64 Java 8 Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=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 "Чтобы построить Android-пакеты на Windows требуется 64-битный инструментарий разработки Java 8. JDK отличен от JRE, и возможно, у вас есть Java без JDK.\n\nПожалуйста, {a=http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html}загрузите и установите JDK{/a}, и перезапустите лаунчер 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."
+2 -2
View File
@@ -37,8 +37,8 @@
new "要构建安卓应用包,请下载 RAPT,并解压到 Ren'Py 目录中。之后重启 Ren'Py。"
# game/android.rpy:35
old "A 64-bit/x64 Java [JDK_REQUIREMENT] Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=https://www.renpy.org/jdk/[JDK_REQUIREMENT]}download and install the JDK{/a}, then restart the Ren'Py launcher."
new "在 Windows 中构建安卓应用包需要 64 位/x64 Java 8 开发套件(JDK)。JDK 不同于 JRE,所以您可能已安装过 Java 但尚未安装 JDK。\n\n请{a=https://www.renpy.org/jdk/[JDK_REQUIREMENT]}下载并安装 JDK{/a},然后重启 Ren'Py。"
old "A 64-bit/x64 Java 8 Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=https://adoptopenjdk.net/?variant=openjdk8&jvmVariant=hotspot}download and install the JDK{/a}, then restart the Ren'Py launcher."
new "在 Windows 中构建安卓应用包需要 64 位/x64 Java 8 开发套件(JDK)。JDK 不同于 JRE,所以您可能已安装过 Java 但尚未安装 JDK。\n\n请{a=https://adoptopenjdk.net/?variant=openjdk8&jvmVariant=hotspot}下载并安装 JDK{/a},然后重启 Ren'Py。"
# game/android.rpy:36
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."
+1 -1
View File
@@ -785,7 +785,7 @@ translate spanish strings:
# renpy/common/00speechbubble.rpy:304
old "(hide)"
new "(ocultar)"
# renpy/common/00gui.rpy:455
old "This save was created on a different device. Maliciously constructed save files can harm your computer. Do you trust this save's creator and everyone who could have changed the file?"
new "Este archivo se creó en otro dispositivo. Los archivos de guardado maliciosamente creados pueden dañar tu computadora. Confías en el creador de este archivo y en todos los que podrían haberlo modificado?"
+2 -7
View File
@@ -10,7 +10,7 @@
# _developer/developer.rpym:45
old "Reload Game (Shift+R)"
new "Reiniciar juego (Mayús+R)"
new "Reiniciar juego (Shift+R)"
# _developer/developer.rpym:47
old "Console (Shift+O)"
@@ -211,7 +211,7 @@
# renpy/common/00console.rpy:784
old "stack: print the return stack"
new "stack: imprime la pila de retorno"
# renpy/common/00console.rpy:781
old "help: show this help\n help <expr>: show signature and documentation of <expr>"
new "help: muestra esta ayuda\n help <expr>: muestra la firma y la documentación de <expr>"
@@ -223,8 +223,3 @@
# renpy/common/_developer/developer.rpym:51
old "Persistent Viewer"
new "Visor de datos persistentes"
# renpy/common/_developer/developer.rpym:70
old "Speech Bubble Editor (Shift+B)"
new "Editor de burbujas de diálogo (Mayús+B)"
-4
View File
@@ -431,7 +431,3 @@
# gui.rpy:457
old "## NVL-mode."
new "## Modo-NVL"
# gui/game/gui.rpy:14
old "## Enable checks for invalid or unstable properties in screens or transforms"
new "## Habilitar comprobaciones de propiedades no válidas o inestables en pantallas o transformaciones."
+3 -47
View File
@@ -36,8 +36,8 @@
new "Para construir un paquete para Android, por favor descarga RAPT, descomprímelo y colócalo dentro de la carpeta de Ren'Py. Después reinicia el lanzador de Ren'Py."
# game/android.rpy:31
old "A 64-bit/x64 Java [JDK_REQUIREMENT] Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=https://www.renpy.org/jdk/[JDK_REQUIREMENT]}download and install the JDK{/a}, then restart the Ren'Py launcher."
new "Se requiere un kit de desarrollo Java 8 de 64 bits/x64 para construir paquetes de Android en Windows. El JDK es diferente del JRE, por lo que es posible que tengas Java sin el JDK.\n\nPor favor, {a=https://www.renpy.org/jdk/[JDK_REQUIREMENT]}descarga e instala el JDK{/a}, luego reinicia el lanzador de Ren'Py."
old "A 64-bit/x64 Java 8 Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=https://adoptopenjdk.net/?variant=openjdk8&jvmVariant=hotspot}download and install the JDK{/a}, then restart the Ren'Py launcher."
new "Se requiere un kit de desarrollo Java 8 de 64 bits/x64 para construir paquetes de Android en Windows. El JDK es diferente del JRE, por lo que es posible que tengas Java sin el JDK.\n\nPor favor, {a=https://adoptopenjdk.net/?variant=openjdk8&jvmVariant=hotspot}descarga e instala el JDK{/a}, luego reinicia el lanzador de 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."
@@ -2060,7 +2060,7 @@ translate spanish strings:
# game/preferences.rpy:327
old "{#in language font}Start using Ren'Py in [lang_name]"
new "{font=fonts/Roboto-Light.ttf}Empieza a usar Ren'Py en [lang_name]{/font}"
# game/distribute_gui.rpy:231
old "(DLC)"
new "(DLC)"
@@ -2072,47 +2072,3 @@ translate spanish strings:
# game/web.rpy:484
old "Creating package..."
new "Creando paquete..."
# game/android.rpy:39
old "RAPT has been installed, but a key hasn't been configured. Please generate new keys, or copy android.keystore and bundle.keystore to the base directory."
new "RAPT ha sido instalado, pero no se ha configurado una clave. Por favor, genera nuevas claves, o copia android.keystore y bundle.keystore al directorio base."
# game/android.rpy:46
old "Attempts to emulate a televison-based Android console.\n\nController input is mapped to the arrow keys, Enter is mapped to the select button, Escape is mapped to the menu button, and PageUp is mapped to the back button."
new "Intenta emular una consola Android basada en televisión.\n\nLa entrada del controlador se asigna a las teclas de flecha, Enter se asigna al botón de selección, Escape se asigna al botón de menú y PageUp se asigna al botón de retroceso."
# game/android.rpy:48
old "Downloads and installs the Android SDK and supporting packages."
new "Descarga e instala el SDK de Android y los paquetes de soporte."
# game/android.rpy:49
old "Generates the keys required to sign the package."
new "Genera las claves necesarias para firmar el paquete."
# game/android.rpy:383
old "Install SDK"
new "Instalar SDK"
# game/android.rpy:387
old "Generate Keys"
new "Generar claves"
# game/androidstrings.rpy:32
old "How much RAM (in GB) do you want to allocate to Gradle?\nThis must be a positive integer number."
new "¿Cuánta RAM (en GB) quiere asignar a Gradle?\nDebe ser un número entero positivo."
# game/androidstrings.rpy:33
old "The RAM size must contain only numbers and be positive."
new "El tamaño de la RAM debe contener sólo números y ser positivo."
# game/androidstrings.rpy:63
old "I found an android.keystore file in the rapt directory. Do you want to use this file?"
new "He encontrado un archivo android.keystore en el directorio rapt. ¿Quieres usar este archivo?"
# game/androidstrings.rpy:66
old "\n\nSaying 'No' will prevent key creation."
new "\n\nDecir 'No' impedirá la creación de claves."
# game/androidstrings.rpy:69
old "I found a bundle.keystore file in the rapt directory. Do you want to use this file?"
new "He encontrado un archivo bundle.keystore en el directorio rapt. ¿Quieres usar este archivo?"
+1 -18
View File
@@ -680,7 +680,7 @@ translate spanish strings:
# gui/game/screens.rpy:1049
old "Opens the accessibility menu."
new "Abre el menú de accesibilidad."
# gui/game/screens.rpy:1397
old "## Bubble screen"
new "## Pantalla de globos"
@@ -692,20 +692,3 @@ translate spanish strings:
# gui/game/screens.rpy:1404
old "## https://www.renpy.org/doc/html/screen_special.html#bubble"
new "## https://www.renpy.org/doc/html/screen_special.html#bubble"
# gui/game/screens.rpy:676
old "Upload Sync"
new "Subir Sync"
# gui/game/screens.rpy:680
old "Download Sync"
new "Descargar Sync"
# gui/game/screens.rpy:1412
old "## The bubble screen is used to display dialogue to the player when using speech bubbles. The bubble screen takes the same parameters as the say screen, must create a displayable with the id of \"what\", and can create displayables with the \"namebox\", \"who\", and \"window\" ids."
new "## La pantalla de burbujas se utiliza para mostrar el diálogo al jugador cuando se utilizan burbujas de diálogo. La pantalla de burbujas toma los mismos parámetros que la pantalla \"say\", debe crear un visualizable con el id de \"what\", y puede crear visualizables con los ids \"namebox\", \"who\", y \"window\"."
# gui/game/screens.rpy:1417
old "## https://www.renpy.org/doc/html/bubble.html#bubble-screen"
new "## https://www.renpy.org/doc/html/bubble.html#bubble-screen"
+2 -2
View File
@@ -40,8 +40,8 @@
new "Android paketleri derlemek için lütfen RAPT'ı indirin, açın ve Ren'Py klasörüne atın. Ardından Ren'Py'ı yeniden başlatın."
# android.rpy:31
old "A 64-bit/x64 Java [JDK_REQUIREMENT] Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=https://www.renpy.org/jdk/[JDK_REQUIREMENT]}download and install the JDK{/a}, then restart the Ren'Py launcher."
new "Windows'ta Android paketleri derlemek için bir 64-bit/x64 Java 8 Development Kit gerekir. JDK, JRE'den farklıdır, bu yüzden JDK olmayan bir Java kurulumunuz olabilir.\n\nLütfen JDK'yı {a=https://www.renpy.org/jdk/[JDK_REQUIREMENT]}indirin ve kurun{/a}, ardından Ren'Py'ı yeniden başlatın."
old "A 64-bit/x64 Java 8 Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=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 "Windows'ta Android paketleri derlemek için bir 64-bit/x64 Java 8 Development Kit gerekir. JDK, JRE'den farklıdır, bu yüzden JDK olmayan bir Java kurulumunuz olabilir.\n\nLütfen JDK'yı {a=http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html}indirin ve kurun{/a}, ardından Ren'Py'ı yeniden başlatın."
# 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."
+2 -2
View File
@@ -38,8 +38,8 @@ translate ukrainian strings:
new "Щоб створити пакети Android, завантажте RAPT, розархівуйте його та помістіть у каталог Ren'Py. Потім перезапустіть лаунчер Ren'Py."
# game/android.rpy:35
old "A 64-bit/x64 Java [JDK_REQUIREMENT] Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=https://www.renpy.org/jdk/[JDK_REQUIREMENT]}download and install the JDK{/a}, then restart the Ren'Py launcher."
new "Для створення пакетів Android у Windows потрібен 64-розрядний/x64 Java 8 Development Kit. JDK відрізняється від JRE, тому можливо, що у вас є Java без JDK.\n\nБудь ласка, {a=https://www.renpy.org/jdk/[JDK_REQUIREMENT]}завантажте та встановіть JDK{/a}, а потім перезапустіть лаунчер Ren'Py."
old "A 64-bit/x64 Java 8 Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=https://adoptopenjdk.net/?variant=openjdk8&jvmVariant=hotspot}download and install the JDK{/a}, then restart the Ren'Py launcher."
new "Для створення пакетів Android у Windows потрібен 64-розрядний/x64 Java 8 Development Kit. JDK відрізняється від JRE, тому можливо, що у вас є Java без JDK.\n\nБудь ласка, {a=https://adoptopenjdk.net/?variant=openjdk8&jvmVariant=hotspot}завантажте та встановіть JDK{/a}, а потім перезапустіть лаунчер Ren'Py."
# game/android.rpy:36
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."
-1
View File
@@ -21,7 +21,6 @@ renpy.styledata.style_selected_activate_functions gen/renpy.styledata.style_sele
renpy.display.matrix gen/renpy.display.matrix.c
renpy.display.render gen/renpy.display.render.c
renpy.display.accelerator gen/renpy.display.accelerator.c
renpy.display.quaternion gen/renpy.display.quaternion.c
renpy.uguu.gl gen/renpy.uguu.gl.c
renpy.uguu.uguu gen/renpy.uguu.uguu.c
renpy.gl.gldraw gen/renpy.gl.gldraw.c
+16 -22
View File
@@ -824,33 +824,27 @@ static SurfaceQueueEntry *decode_video_frame(MediaState *ms) {
SDL_Surface *sample = rgba_surface;
if (ms->sws == NULL) {
ms->sws = sws_getContext(
ms->video_decode_frame->width,
ms->video_decode_frame->height,
ms->video_decode_frame->format,
ms->sws = sws_getCachedContext(
ms->sws,
ms->video_decode_frame->width,
ms->video_decode_frame->height,
get_pixel_format(sample),
ms->video_decode_frame->width,
ms->video_decode_frame->height,
ms->video_decode_frame->format,
SWS_POINT | SWS_FULL_CHR_H_INP | SWS_FULL_CHR_H_INT,
ms->video_decode_frame->width,
ms->video_decode_frame->height,
get_pixel_format(rgba_surface),
NULL,
NULL,
NULL
);
SWS_POINT,
NULL,
NULL,
NULL
);
if (!ms->sws) {
ms->video_finished = 1;
return NULL;
}
sws_setColorspaceDetails(ms->sws,
sws_getCoefficients(SWS_CS_DEFAULT), 0,
sws_getCoefficients(SWS_CS_DEFAULT), 0,
0, 1 << 16, 1 << 16);
if (!ms->sws) {
ms->video_finished = 1;
return NULL;
}
SurfaceQueueEntry *rv = av_malloc(sizeof(SurfaceQueueEntry));
+2 -21
View File
@@ -97,9 +97,6 @@ static const char *error_msg = NULL;
/* Have we been initialized? */
static int initialized = 0;
/** Should fades be linear rather than logarithmic? */
static int linear_fades = 0;
struct Interpolate {
/* The number of samples that are finished so far. */
@@ -116,6 +113,7 @@ struct Interpolate {
};
void init_interpolate(struct Interpolate *i, float value) {
i->done = 0;
i->duration = 0;
@@ -158,10 +156,6 @@ static inline float get_interpolate_power(struct Interpolate *i) {
float log_power = get_interpolate(i);
if (linear_fades) {
return log_power / MAX_POWER;
}
if (log_power == MIN_POWER) {
return 0;
} else if (log_power == MAX_POWER) {
@@ -356,13 +350,6 @@ static inline void mix_sample(struct Channel *c, short left_in, short right_in,
*right_out += right * volume;
}
/** If not NULL, this can be replaced with a function that will be called
to generate audio. The functtio is called with a consistion of 2*length
shorts, and should fill the buffer with audio data. */
void (*RPS_generate_audio_c_function)(float *stream, int length) = NULL;
static void callback(void *userdata, Uint8 *stream, int length) {
// Convert the length to samples.
@@ -373,10 +360,6 @@ static void callback(void *userdata, Uint8 *stream, int length) {
memset(mix_buffer, 0, length * 2 * sizeof(float));
if (RPS_generate_audio_c_function) {
RPS_generate_audio_c_function(mix_buffer, length);
}
for (int channel = 0; channel < num_channels; channel++) {
// The number of samples that have been mixed.
@@ -1131,7 +1114,7 @@ void RPS_set_video(int channel, int video) {
* Initializes the sound to the given frequencies, channels, and
* sample buffer size.
*/
void RPS_init(int freq, int stereo, int samples, int status, int equal_mono, int linear_fades_) {
void RPS_init(int freq, int stereo, int samples, int status, int equal_mono) {
if (initialized) {
return;
@@ -1168,8 +1151,6 @@ void RPS_init(int freq, int stereo, int samples, int status, int equal_mono, int
SDL_PauseAudio(0);
linear_fades = linear_fades_;
initialized = 1;
error(SUCCESS);
+1 -4
View File
@@ -50,7 +50,7 @@ PyObject *RPS_read_video(int channel);
void RPS_sample_surfaces(PyObject *rgb, PyObject *rgba);
void RPS_set_video(int channel, int video);
void RPS_init(int freq, int stereo, int samples, int status, int equal_mono, int linear_fades);
void RPS_init(int freq, int stereo, int samples, int status, int equal_mono);
void RPS_quit(void);
void RPS_advance_time(void);
@@ -58,7 +58,4 @@ void RPS_periodic(void);
char *RPS_get_error(void);
extern void (*RPS_generate_audio_c_function)(float *stream, int length);
#endif
-1
View File
@@ -165,7 +165,6 @@ for p in generate_styles.prefixes:
cython("renpy.display.matrix")
cython("renpy.display.render", libs=[ 'z', 'm' ])
cython("renpy.display.accelerator", libs=sdl + [ 'z', 'm' ])
cython("renpy.display.quaternion", libs=[ 'm' ])
cython("renpy.uguu.gl", libs=sdl)
cython("renpy.uguu.uguu", libs=sdl)
+2 -5
View File
@@ -91,7 +91,7 @@ if PY2:
version_tuple = VersionTuple(7, 6, 0, vc_version)
# The name of this version.
version_name = "To Boldly Go"
version_name = "TBD"
else:
@@ -99,7 +99,7 @@ else:
version_tuple = VersionTuple(8, 1, 0, vc_version)
# The name of this version.
version_name = "Where No One Has Gone Before"
version_name = "TBD"
# A string giving the version number only (8.0.1.123), with a suffix if needed.
version_only = ".".join(str(i) for i in version_tuple)
@@ -263,8 +263,6 @@ name_blacklist = {
"renpy.webloader.queue_lock",
"renpy.persistent.MP_instances",
"renpy.exports.sdl_dll",
"renpy.sl2.slast.serial",
"renpy.gl2.gl2draw.default_position",
}
class Backup(_object):
@@ -516,7 +514,6 @@ def import_all():
import renpy.display.tts
import renpy.display.gesture
import renpy.display.model
import renpy.display.quaternion
import renpy.display.error
-35
View File
@@ -2321,41 +2321,6 @@ class UserStatement(Node):
return False
def reachable(self, is_reachable):
"""
This is used by lint to find statements reachable from or through
this statement.
"""
rv = self.call(
"reachable",
is_reachable,
self.name,
self.next.name if self.next is not None else None,
self.code_block[0].name if self.code_block else None,
)
if rv is None:
rv = set()
if self.call("label"):
rv.add(self.name)
is_reachable = True
if is_reachable:
if self.code_block:
rv.add(self.code_block[0].name)
for i in self.subparses:
if i.block:
rv.add(i.block[0].name)
if self.next:
rv.add(self.next.name)
return rv
class PostUserStatement(Node):
+37 -208
View File
@@ -126,7 +126,7 @@ def interpolate(t, a, b, type): # @ReservedAssignment
"""
# Deal with booleans, nones, etc.
if b is None or isinstance(b, (bool, basestring, renpy.display.matrix.Matrix, renpy.display.transform.Camera)):
if b is None or isinstance(b, (bool, basestring, renpy.display.matrix.Matrix)):
if t >= 1.0:
return b
else:
@@ -228,7 +228,7 @@ def get_catmull_rom_value(t, p_1, p0, p1, p2):
+(t - 1) * t * t * p2) / 2)
# A list of atl transforms that may need to be compiled.
# A list of atl transforms that may need to be compile.
compile_queue = [ ]
@@ -241,29 +241,11 @@ def compile_all():
global compile_queue
for i in compile_queue:
i.atl.find_loaded_variables()
if i.atl.constant == GLOBAL_CONST:
i.compile()
compile_queue = [ ]
def find_loaded_variables(expr):
"""
Returns the set of variables that are loaded by the given expression.
"""
if expr is None:
return set()
ast = renpy.pyanalysis.ccache.ast_eval(expr)
return renpy.python.find_loaded_variables(ast)
# Used to indicate that a variable is not in the context.
NotInContext = renpy.object.Sentinel("NotInContext")
# This is the context used when compiling an ATL statement. It stores the
# scopes that are used to evaluate the various expressions in the statement,
@@ -285,36 +267,6 @@ class Context(object):
def __ne__(self, other):
return not (self == other)
def variables_equal(self, other, variables):
"""
Returns true if the variables in `variables` are equal in
this context and `other`. False if they are not equal.
Returns True if any variable cannot be compared.
"""
try:
if renpy.config.at_transform_compare_full_context:
if self.context != other.context:
return False
for i in variables:
if self.context.get(i, NotInContext) != other.context.get(i, NotInContext):
# Ignore the arguments given to ATL Transitions, which
# will change each time an interaction restarts. (See #4167.)
if i in ("new_widget", "old_widget"):
continue
return False
return True
except Exception:
return True
# This is intended to be subclassed by ATLTransform. It takes care of
# managing ATL execution, which allows ATLTransform itself to not care
# much about the contents of this file.
@@ -335,16 +287,9 @@ class ATLTransformBase(renpy.object.Object):
def __init__(self, atl, context, parameters):
# The constructor will be called by atltransform.
if parameters is None:
parameters = ATLTransformBase.parameters
else:
# Apply the default parameters.
context = context.copy()
for k, v in parameters.parameters:
if v is not None:
context[k] = renpy.python.py_eval(v, locals=context)
# The parameters that we take.
self.parameters = parameters
@@ -398,7 +343,6 @@ class ATLTransformBase(renpy.object.Object):
if renpy.game.context().init_phase:
compile_queue.append(self)
def _handles_event(self, event):
if (event == "replaced") and (self.atl_state is None):
@@ -442,12 +386,13 @@ class ATLTransformBase(renpy.object.Object):
elif t.atl is not self.atl:
return
# Only take the execution state if the contexts haven't changed in
# a way that would affect the execution of the ATL.
if t.atl.constant != GLOBAL_CONST:
if not self.context.variables_equal(t.context, t.atl.find_loaded_variables()):
# Important to do it this way, so we use __eq__. The exception handling
# optimistically assumes that uncomparable objects are the same.
try:
if not (t.context == self.context):
return
except Exception:
pass
self.done = t.done
self.block = t.block
@@ -477,6 +422,10 @@ class ATLTransformBase(renpy.object.Object):
context = self.context.context.copy()
for k, v in self.parameters.parameters:
if v is not None:
context[k] = renpy.python.py_eval(v)
positional = list(self.parameters.positional)
args = list(args)
@@ -700,13 +649,6 @@ class RawStatement(object):
self.constant = NOT_CONST
def find_loaded_variables(self):
"""
Returns the set of variables that are loaded by this statement.
"""
raise Exception("find_loaded_variables not implemented.")
# The base class for compiled ATL Statements.
@@ -764,11 +706,6 @@ class RawBlock(RawStatement):
# and use this value for all ATLTransform that use us as an atl.
compiled_block = None
# If this is the outermost ATL of a parse, a set giving the variables
# that are loaded by this block.
loaded_variable_cache = None
def __init__(self, loc, statements, animation):
super(RawBlock, self).__init__(loc)
@@ -830,20 +767,6 @@ class RawBlock(RawStatement):
self.constant = constant
def find_loaded_variables(self):
if self.loaded_variable_cache is not None:
return self.loaded_variable_cache
variables = set()
for i in self.statements:
variables.update(i.find_loaded_variables())
self.loaded_variable_cache = variables
return variables
# A compiled ATL block.
class Block(Statement):
@@ -979,29 +902,22 @@ class Block(Statement):
def visit(self):
return [ j for i in self.statements for j in i.visit() ]
# A list of properties
incompatible_props = {
"alignaround" : {"xaround", "yaround", "xanchoraround", "yanchoraround"},
"align" : {"xanchor", "yanchor", "xpos", "ypos"},
"anchor" : {"xanchor", "yanchor"},
"angle" : {"xpos", "ypos"},
"around" : {"xaround", "yaround", "xanchoraround", "yanchoraround"},
"offset" : {"xoffset", "yoffset"},
"pos" : {"xpos", "ypos"},
"radius" : {"xpos", "ypos"},
"size" : {"xsize", "ysize"},
"xalign" : {"xpos", "xanchor"},
"xcenter" : {"xpos", "xanchor"},
"xycenter" : {"xpos", "ypos", "xanchor", "yanchor"},
"xysize" : {"xsize", "ysize"},
"yalign" : {"ypos", "yanchor"},
"ycenter" : {"ypos", "yanchor"},
}
# A list of sets of pairs of properties that do not conflict.
compatible_pairs = [
{"radius", "angle"}
]
incompatible_props = {"alignaround" : {"xaround", "yaround", "xanchoraround", "yanchoraround"},
"align" : {"xanchor", "yanchor", "xpos", "ypos"},
"anchor" : {"xanchor", "yanchor"},
"angle" : {"xpos", "ypos"},
"around" : {"xaround", "yaround", "xanchoraround", "yanchoraround"},
"offset" : {"xoffset", "yoffset"},
"pos" : {"xpos", "ypos"},
"radius" : {"xpos", "ypos"},
"size" : {"xsize", "ysize"},
"xalign" : {"xpos", "xanchor"},
"xcenter" : {"xpos", "xanchor"},
"xycenter" : {"xpos", "ypos", "xanchor", "yanchor"},
"xysize" : {"xsize", "ysize"},
"yalign" : {"ypos", "yanchor"},
"ycenter" : {"ypos", "yanchor"},
}
# This can become one of four things:
#
@@ -1052,14 +968,6 @@ class RawMultipurpose(RawStatement):
old = None
self.properties.append((name, exprs))
if old is not None:
pair = { old, name }
for i in compatible_pairs:
if pair == i:
old = None
return old
def add_expression(self, expr, with_clause):
@@ -1179,26 +1087,6 @@ class RawMultipurpose(RawStatement):
self.constant = constant
def find_loaded_variables(self):
rv = set()
rv.update(find_loaded_variables(self.warp_function))
rv.update(find_loaded_variables(self.duration))
rv.update(find_loaded_variables(self.circles))
for _name, expr in self.properties:
rv.update(find_loaded_variables(expr))
for _name, exprs in self.splines:
for expr in exprs:
rv.update(find_loaded_variables(expr))
for expr, withexpr in self.expressions:
rv.update(find_loaded_variables(expr))
rv.update(find_loaded_variables(withexpr))
return rv
def predict(self, ctx):
for i, _j in self.expressions:
@@ -1234,9 +1122,6 @@ class RawContainsExpr(RawStatement):
def mark_constant(self, analysis):
self.constant = analysis.is_constant_expr(self.expression)
def find_loaded_variables(self):
return find_loaded_variables(self.expression)
# This allows us to have multiple ATL transforms as children.
class RawChild(RawStatement):
@@ -1271,14 +1156,6 @@ class RawChild(RawStatement):
self.constant = constant
def find_loaded_variables(self):
rv = set()
for i in self.children:
rv.update(i.find_loaded_variables())
return rv
# This changes the child of this statement, optionally with a transition.
class Child(Statement):
@@ -1367,7 +1244,6 @@ class Interpolation(Statement):
newts.take_state(trans.state)
has_angle = False
has_radius = False
for k, v in self.properties:
setattr(newts, k, v)
@@ -1376,9 +1252,6 @@ class Interpolation(Statement):
newts.last_angle = v
has_angle = True
elif k == "radius":
has_radius = True
# Now, the things we change linearly are in the difference
# between the new and old states.
linear = trans.state.diff(newts)
@@ -1389,7 +1262,7 @@ class Interpolation(Statement):
revdir = self.revolution
circles = self.circles
if (revdir or ((has_angle or has_radius) and renpy.config.automatic_polar_motion)) and (newts.xaround is not None):
if (revdir or (has_angle and renpy.config.automatic_polar_motion)) and (newts.xaround is not None):
# Remove various irrelevant motions.
for i in [ 'xpos', 'ypos',
@@ -1429,22 +1302,13 @@ class Interpolation(Statement):
startangle += circles * 360
if has_radius:
linear["radius"] = (startradius, endradius)
# Store the revolution.
if has_angle:
revolution = (startangle, endangle)
revolution = (startangle, endangle, startradius, endradius)
else:
if has_angle:
last_angle = trans.state.last_angle or trans.state.angle
revolution = (last_angle, newts.last_angle)
if has_radius:
linear["radius"] = (trans.state.radius, newts.radius)
last_angle = trans.state.last_angle or trans.state.angle
revolution = (last_angle, newts.last_angle, trans.state.radius, newts.radius)
# Figure out the splines.
for name, values in self.splines:
@@ -1467,12 +1331,11 @@ class Interpolation(Statement):
if old is None:
old = (0.0, 0.0, 0.0)
if new is not None:
value = renpy.display.quaternion.euler_slerp(complete, old, new)
value = renpy.display.accelerator.quaternion_slerp(complete, old, new)
elif complete >= 1:
value = None
else:
value = old
else:
value = interpolate(complete, old, new, PROPERTIES[k])
@@ -1480,12 +1343,14 @@ class Interpolation(Statement):
# Handle the revolution.
if revolution is not None:
startangle, endangle = revolution[:2]
startangle, endangle, startradius, endradius = revolution
angle = interpolate(complete, startangle, endangle, float)
trans.state.last_angle = angle
trans.state.angle = angle
trans.state.radius = interpolate(complete, startradius, endradius, float)
# Handle any splines we might have.
for name, values in splines:
value = interpolate_spline(complete, values)
@@ -1523,8 +1388,6 @@ class RawRepeat(RawStatement):
def mark_constant(self, analysis):
self.constant = analysis.is_constant_expr(self.repeats)
def find_loaded_variables(self):
return find_loaded_variables(self.repeats)
class Repeat(Statement):
@@ -1563,14 +1426,6 @@ class RawParallel(RawStatement):
self.constant = constant
def find_loaded_variables(self):
rv = set()
for i in self.blocks:
rv.update(i.find_loaded_variables())
return rv
class Parallel(Statement):
@@ -1651,15 +1506,6 @@ class RawChoice(RawStatement):
self.constant = constant
def find_loaded_variables(self):
rv = set()
for chance, block in self.choices:
rv.update(find_loaded_variables(chance))
rv.update(block.find_loaded_variables())
return rv
class Choice(Statement):
@@ -1729,9 +1575,6 @@ class RawTime(RawStatement):
def mark_constant(self, analysis):
self.constant = analysis.is_constant_expr(self.time)
def find_loaded_variables(self):
return find_loaded_variables(self.time)
class Time(Statement):
@@ -1779,14 +1622,6 @@ class RawOn(RawStatement):
self.constant = constant
def find_loaded_variables(self):
rv = set()
for block in self.handlers.values():
rv.update(block.find_loaded_variables())
return rv
class On(Statement):
@@ -1896,9 +1731,6 @@ class RawEvent(RawStatement):
def mark_constant(self, analysis):
self.constant = GLOBAL_CONST
def find_loaded_variables(self):
return set()
class Event(Statement):
@@ -1925,9 +1757,6 @@ class RawFunction(RawStatement):
def mark_constant(self, analysis):
self.constant = analysis.is_constant_expr(self.expr)
def find_loaded_variables(self):
return find_loaded_variables(self.expr)
class Function(Statement):
+2 -12
View File
@@ -80,7 +80,7 @@ def load(fn):
elif exception.rtype == 'video':
# Video files are downloaded by the browser, so return
# the file name instead of a file-like object
return 'url:' + renpy.config.web_video_base + "/" + exception.relpath
return 'url:' + renpy.config.web_video_base + "/" + fn
# temporary 1s placeholder, will retry loading when looping:
rv = open(os.path.join(renpy.config.commondir, '_dl_silence.ogg'), 'rb') # type: ignore
@@ -448,9 +448,6 @@ class Channel(object):
# mixer is muted.
force_stop = self.context.force_stop or (renpy.game.preferences.mute.get(self.mixer, False) and self.stop_on_mute)
if global_pause and not self.loop:
force_stop = True
if self.playing and force_stop:
renpysound.stop(self.number)
self.playing = False
@@ -471,9 +468,6 @@ class Channel(object):
# files. So this loop will only execute once, in practice.
while True:
if global_pause:
break
if self._number is not None:
depth = renpysound.queue_depth(self.number)
else:
@@ -791,7 +785,6 @@ class Channel(object):
return renpysound.video_ready(self.number)
# Use unconditional imports so these files get compiled during the build
# process.
@@ -995,14 +988,11 @@ def init():
bufsize = 8192 # works for me
# bufsize = 16384 # jitter/silence right after starting a sound
if renpy.config.sound_buffer_size is not None:
bufsize = renpy.config.sound_buffer_size
if 'RENPY_SOUND_BUFSIZE' in os.environ:
bufsize = int(os.environ['RENPY_SOUND_BUFSIZE'])
try:
renpysound.init(renpy.config.sound_sample_rate, 2, bufsize, False, renpy.config.equal_mono, renpy.config.linear_fades)
renpysound.init(renpy.config.sound_sample_rate, 2, bufsize, False, renpy.config.equal_mono)
pcm_ok = True
except Exception:
+4 -31
View File
@@ -50,8 +50,6 @@ or is stopped.
from __future__ import print_function
from libc.stdint cimport uintptr_t
from pygame_sdl2 cimport *
import_pygame_sdl2()
@@ -80,13 +78,12 @@ cdef extern from "renpysound_core.h":
void RPS_set_video(int channel, int video)
void RPS_sample_surfaces(object, object)
void RPS_init(int freq, int stereo, int samples, int status, int equal_mono, int linear_fades)
void RPS_init(int freq, int stereo, int samples, int status, int equal_mono)
void RPS_quit()
void RPS_periodic()
char *RPS_get_error()
void (*RPS_generate_audio_c_function)(float *stream, int length)
def check_error():
"""
@@ -372,7 +369,7 @@ def set_video(channel, video, loop=False):
else:
RPS_set_video(channel, NO_VIDEO)
def init(freq, stereo, samples, status=False, equal_mono=False, linear_fades=False):
def init(freq, stereo, samples, status=False, equal_mono=False):
"""
Initializes the audio system with the given parameters. The parameter are
just informational - the audio system should be able to play all supported
@@ -389,13 +386,7 @@ def init(freq, stereo, samples, status=False, equal_mono=False, linear_fades=Fal
`status`
If true, the sound system will print errors out to the console.
`equal_mono`
If true, the sound system will play mono files at the same volume as
stereo files.
`linear_fades`
If true, the sound system will use linear fades.
`
"""
if status:
@@ -403,7 +394,7 @@ def init(freq, stereo, samples, status=False, equal_mono=False, linear_fades=Fal
else:
status = 0
RPS_init(freq, stereo, samples, status, equal_mono, linear_fades)
RPS_init(freq, stereo, samples, status, equal_mono)
check_error()
def quit(): # @ReservedAssignment
@@ -428,24 +419,6 @@ def advance_time():
RPS_advance_time()
def set_generate_audio_c_function(fn):
"""
This can be use to set a C function that totally replaces the Ren'Py
audio system.
The function is expected to have the signature void (*)(short *buf, int samples,
and fill buf with samples samples of audio, where each sample consists of two
shorts.
"""
global RPS_generate_audio_c_function
if not isinstance(fn, int):
import ctypes
fn = ctypes.cast(fn, ctypes.c_void_p).value
RPS_generate_audio_c_function = <void (*)(float *, int)> <uintptr_t> fn
# Store the sample surfaces so they stay alive.
rgb_surface = None
rgba_surface = None
+15 -2
View File
@@ -439,11 +439,24 @@ def load_script():
@proxy_call_both
def init(freq, stereo, samples, status=False, equal_mono=False, linear_fades=False):
def init(freq, stereo, samples, status=False, equal_mono=False):
"""
Initializes the audio system with the given parameters. The parameters are
Initializes the audio system with the given parameters. The parameter are
just informational - the audio system should be able to play all supported
files.
`freq`
The sample frequency to play back at.
`stereo`
Should we play in stereo (generally true).
`samples`
The length of the sample buffer.
`status`
If true, the sound system will print errors out to the console.
`
"""
load_script()
+1 -14
View File
@@ -609,17 +609,14 @@ def display_say(
if renpy.config.scry_extend:
scry = renpy.exports.scry().next()
scry_count = 0
while scry and scry_count < 64:
while scry:
if scry.extend_text is renpy.ast.DoesNotExtend:
break
elif scry.extend_text is not None:
extend_text += scry.extend_text
scry = scry.next()
scry_count += 1
if extend_text:
extend_text = "{done}" + extend_text
@@ -1261,11 +1258,6 @@ class ADVCharacter(object):
if not isinstance(what, basestring):
raise Exception("Character expects its what argument to be a string, got %r." % (what,))
if renpy.store._side_image_attributes_reset:
renpy.store._side_image_attributes = None
renpy.store._side_image_attributes_reset = False
# Figure out multiple and final. Multiple is None if this is not a multiple
# dialogue, or a step and the total number of steps in a multiple interaction.
@@ -1508,9 +1500,6 @@ def Character(name=NotSet, kind=None, **properties):
be used to define a template character, and then copy that
character with changes.
This can also be a namespace, in which case the 'character'
variable in the namespace is used as the kind.
**Linked Image.**
An image tag may be associated with a Character. This allows a
say statement involving this character to display an image with
@@ -1664,8 +1653,6 @@ def Character(name=NotSet, kind=None, **properties):
if kind is None:
kind = renpy.store.adv
kind = getattr(kind, "character", kind)
return type(kind)(name, kind=kind, **properties)
-10
View File
@@ -212,14 +212,6 @@ screen _accessibility():
null height 10
label _("Voice Volume")
null height 10
bar value Preference("voice volume")
null height 10
label _("Self-Voicing Volume Drop")
null height 10
@@ -227,8 +219,6 @@ screen _accessibility():
bar value Preference("self voicing volume drop")
vbox:
text _("The options on this menu are intended to improve accessibility. They may not work with all games, and some combinations of options may render the game unplayable. This is not an issue with the game or engine. For the best results when changing fonts, try to keep the text size the same as it originally was.")
+1 -20
View File
@@ -154,26 +154,6 @@ init -1500 python:
def get_selected(self):
return _preferences.get_volume(self.mixer) == self.volume
def GetMixer(mixer, db=False):
"""
:doc: audio_action
Returns the volume of `mixer`.
`db`
If true, returns the volume in decibels. If false, the default,
returns the volume as a number between 0.0 and 1.0.
"""
import math
rv = _preferences.get_mixer(mixer)
if db:
rv = renpy.config.volume_db_range * rv - renpy.config.volume_db_range
return rv
@renpy.pure
class SetMute(Action, DictEquality):
"""
@@ -277,3 +257,4 @@ init -1500 python:
rv = not rv
return rv
+3 -3
View File
@@ -302,11 +302,11 @@ init -1600 python:
renpy.restart_interaction()
def get_selected(self):
try:
rv = self.dict[self.key]
except (KeyError, IndexError):
if self.key not in self.dict:
return False
rv = self.dict[self.key]
if self.true_value is not None:
rv = (rv == self.true_value)
+2 -10
View File
@@ -129,8 +129,6 @@ init -1500 python:
config.predict_file_pages = True
config.file_slotname_callback = None
def __slotname(name, page=None, slot=False):
if slot:
@@ -153,13 +151,7 @@ init -1500 python:
except ValueError:
pass
page = str(page)
name = str(name)
if config.file_slotname_callback is not None:
return config.file_slotname_callback(page, name)
else:
return page + "-" + name
return str(page) + "-" + str(name)
def __newest_slot():
"""
@@ -574,7 +566,7 @@ init -1500 python:
page = unicode(page)
for i in renpy.list_slots(__slotname(page, r'\d+')):
for i in renpy.list_slots(page + "-"):
renpy.predict(renpy.slot_screenshot(i))
@renpy.pure
+4 -7
View File
@@ -414,9 +414,8 @@ init -1500 python:
when entering the replay.
`locked`
If true, this action is insensitive and will not do anything when triggered.
If false, it will behave normally. If None, it will be locked if the label
has not been seen in any playthrough.
If true, this replay is locked. If false, it is unlocked. If None, the
replay is locked if the label has not been seen in any playthrough.
"""
def __init__(self, label, scope={}, locked=None):
@@ -426,7 +425,7 @@ init -1500 python:
def __call__(self):
if not self.get_sensitive():
if self.locked:
return
if config.enter_replay_transition:
@@ -605,8 +604,6 @@ init -1500 python:
The sensitivity and selectedness of this action match those
of the `yes` action.
See :func:`layout.yesno_screen` for a function version of this action.
"""
@@ -697,7 +694,7 @@ init -1500 python:
amount = delta * adjustment.step
elif self.amount == "page":
amount = delta * adjustment.page
elif isinstance(self.amount, float) and not isinstance(self.amount, absolute):
elif isinstance(self.amount) and not isinstance(self.amount, absolute):
amount = delta * self.amount * adjustment.range
else:
amount = delta * self.amount
-13
View File
@@ -456,17 +456,6 @@ init -1500 python in build:
# The itch.io project name.
itch_project = None
# Maps from files to itch.io channels.
itch_channels = [
( "*-all.zip", "win-osx-linux" ),
( "*-market.zip", "win-osx-linux" ),
( "*-pc.zip", "win-linux" ),
( "*-win.zip", "win" ),
( "*-mac.zip", "osx" ),
( "*-linux.tar.bz2", "linux" ),
( "*-release.apk", "android" ),
]
# Should we include the old Ren'Py themes?
include_old_themes = True
@@ -563,8 +552,6 @@ init -1500 python in build:
if itch_project:
rv["itch_project"] = itch_project
rv["itch_channels"] = itch_channels
if mac_identity:
rv["mac_identity"] = mac_identity
rv["mac_codesign_command"] = mac_codesign_command
+4 -5
View File
@@ -250,14 +250,14 @@ init -1100 python:
config.atl_function_always_blocks = True
if version <= (7, 4, 11):
config.modal_blocks_timer = False
config.timer_blocks_pause = False
config.modal_blocks_pause = False
elif _compat_versions(version, (7, 5, 1), (8, 0, 1)):
config.modal_blocks_timer = True
config.timer_blocks_pause = True
config.modal_blocks_pause = False
elif _compat_versions(version, (7, 5, 2), (8, 0, 2)):
config.modal_blocks_pause = True
config.modal_blocks_timer = True
config.timer_blocks_pause = True
if _compat_versions(version, (7, 5, 3), (8, 0, 3)):
config.quadratic_volumes = True
@@ -268,8 +268,7 @@ init -1100 python:
config.history_current_dialogue = False
config.scry_extend = False
config.fadeout_audio = 0.0
config.at_transform_compare_full_context = True
config.linear_fades = True
config.int_render_blit = True
if version > (6, 99, 5):
config.search_prefixes.append("images/")
+4 -7
View File
@@ -24,7 +24,7 @@ import renpy.exports as renpy
from renpy.minstore import _dict, _object
"""renpy
init -1200 python:
init -1100 python:
"""
class _JSONDBDict(_dict):
@@ -111,16 +111,13 @@ class JSONDB(_object):
For example, this can store information associated with each
say statement, that can change how a say statement is displayed.
JSONDBs are not intended for data that is changed through or because
of the player's actions. :doc:`persistent` or normal save files are
JSONDBs are not intended for data that is changed after the game
has been released. :doc:`persistent` or normal save files are
better choices for that data.
The database should only contain data that Python can serialize to
JSON. This includes lists, dictionaries (with strings as keys),
strings, numbers, True, False, and None. See
`the Python documentation <https://docs.python.org/3/library/json.html#encoders-and-decoders>`__
about interoperability, how data converts between the two formats,
and the various associated pitfalls.
strings, numbers, True, False, and None.
The two levels of the database are dictionaries both keyed by strings.
The first level is read only - when a key on the first level dictionary
+3 -5
View File
@@ -54,7 +54,6 @@ init -1600 python:
choose_renderer = ['alt_K_g', 'shift_K_g' ],
progress_screen = [ 'alt_shift_K_p', 'meta_shift_K_p', 'K_F2' ],
accessibility = [ 'K_a' ],
bubble_editor = [ 'alt_K_b', 'shift_K_b' ],
# Accessibility.
self_voicing = [ 'alt_K_v', 'K_v' ],
@@ -84,7 +83,6 @@ init -1600 python:
# Input.
input_backspace = [ 'any_K_BACKSPACE' ],
input_enter = [ 'K_RETURN', 'K_KP_ENTER' ],
input_next_line = [ 'shift_K_RETURN', 'shift_K_KP_ENTER' ],
input_left = [ 'any_K_LEFT', 'any_KP_LEFT' ],
input_right = [ 'any_K_RIGHT', 'any_KP_RIGHT' ],
input_up = [ 'any_K_UP', 'any_KP_UP' ],
@@ -298,7 +296,7 @@ init -1600 python:
dest = config.renpy_base
if renpy.macapp:
dest = os.path.expanduser("~/Desktop")
dest = os.path.expanduser(b"~/Desktop")
pattern = renpy.store._screenshot_pattern or config.screenshot_pattern
@@ -417,7 +415,8 @@ screen _progress:
init -1100 python:
# The default keymap.
# The default keymap. We might also want to put some of this into
# the launcher.
_default_keymap = renpy.Keymap(
rollback = renpy.rollback,
screenshot = _screenshot,
@@ -444,7 +443,6 @@ init -1100 python:
director = director.Start(),
performance = ToggleScreen("_performance"),
accessibility = ToggleScreen("_accessibility"),
bubble_editor = bubble.ToggleShown(),
)
config.underlay = [ _default_keymap ]
+2 -5
View File
@@ -438,7 +438,7 @@ python early in layeredimage:
class Always(Layer):
"""
:undocumented:
:doc: li
:name: Always
This is used for a displayable that is always shown.
@@ -515,14 +515,11 @@ python early in layeredimage:
displayables associated with those attribute.
`attributes`
This must be a list of Attribute, Condition, ConditionGroup or
:func:`renpy.Displayable` objects. Each one
This must be a list of Attribute objects. Each Attribute object
reflects a displayable that may or may not be displayed as part
of the image. The items in this list are in back-to-front order,
with the first item further from the viewer and the last
closest.
Passing a displayable directly is the equivalent of the `always`
layeredimage statement.
`at`
A transform or list of transforms that are applied to the displayable
+28 -26
View File
@@ -165,17 +165,18 @@ init -1400 python hide:
unhovered=None,
index=None,
**properties):
"""
label - The label of this button. Will be translated if necessary.
type - The type of this button. Used to generate the appropriate styles.
selected - Determines if this button should be selected.
enabled - Determines if this button should be enabled.
clicked - A function that is run when the button is clicked.
hovered - A function that is run when the button is hovered.
unhovered - A function that is run when the button is unhovered.
index - A style index. If None, label is used.
size_group - The size_group used by this button.
"""
label - The label of this button. Will be translated if necessary.
type - The type of this button. Used to generate the appropriate styles.
selected - Determines if this button should be selected.
enabled - Determines if this button should be enabled.
clicked - A function that is run when the button is clicked.
hovered - A function that is run when the button is hovered.
unhovered - A function that is run when the button is unhovered.
index - A style index. If None, label is used.
size_group - The size_group used by this button.
"""
if not enabled:
clicked = None
@@ -478,23 +479,21 @@ init -1400 python hide:
@layout
def yesno_screen(message, yes=None, no=None):
"""
:doc: other
:doc: other
This causes the a yes/no prompt screen with the given message
to be displayed. The screen will be hidden when the user hits
yes or no.
This causes the a yes/no prompt screen with the given message
to be displayed. The screen will be hidden when the user hits
yes or no.
`message`
The message that will be displayed.
`message`
The message that will be displayed.
`yes`
An action that is run when the user chooses yes.
`yes`
An action that is run when the user chooses yes.
`no`
An action that is run when the user chooses no.
See :func:`Confirm` for an equivalent Action.
"""
`no`
An action that is run when the user chooses no.
"""
if config.confirm_screen and renpy.has_screen('confirm'):
screen = "confirm"
elif renpy.has_screen("yesno_prompt"):
@@ -523,15 +522,18 @@ init -1400 python hide:
renpy.restart_interaction()
elif renpy.invoke_in_new_context(layout.invoke_yesno_prompt, None, message):
return
if renpy.invoke_in_new_context(layout.invoke_yesno_prompt, None, message):
if yes is not None:
renpy.run(yes)
yes()
else:
if no is not None:
renpy.run(no)
no()
def __auto_save_extra_info():
return save_name
config.auto_save_extra_info = __auto_save_extra_info
+6 -5
View File
@@ -167,16 +167,17 @@ init -1500 python:
b = oldb + (b - oldb) * done
a = olda + (a - olda) * done
# Update the tint with opacity from the alpha channel.
r = 1 - (1 - r) * a
g = 1 - (1 - g) * a
b = 1 - (1 - b) * a
# To properly handle premultiplied alpha, the color channels
# have to be multiplied by the alpha channel.
r *= a
g *= a
b *= a
# Return a Matrix.
return Matrix([ r, 0, 0, 0,
0, g, 0, 0,
0, 0, b, 0,
0, 0, 0, 1 ])
0, 0, 0, a ])
class BrightnessMatrix(ColorMatrix, DictEquality):
"""
+5 -5
View File
@@ -227,9 +227,9 @@ init -1500 python:
* Preference("audio when unfocused", "disable") - Disable sounds playing when the window is not in focus.
* Preference("audio when unfocused", "toggle") - Toggle sounds playing when the window is not in focus.
* Preference("web cache preload", "enable") - Will cause the web cache to be preloaded.
* Preference("web cache preload", "disable") - Will cause the web cache to not be preloaded, and preloaded data to be deleted.
* Preference("web cache preload", "toggle") - Will toggle the web cache preload state.
* Preference("web preload cache", "enable") - Will cause the web cache to be preloaded.
* Preference("web preload cache", "disable") - Will cause the web cache to not be preloaded, and preloaded data to be deleted.
* Preference("web preload cache", "toggle") - Will toggle the web cache preload state.
* Preference("voice after game menu", "enable") - Will cause the voice to continue being played when entering the game menu.
* Preference("voice after game menu", "disable") - Will cause the voice to stop being played when entering the game menu.
@@ -545,9 +545,9 @@ init -1500 python:
return [ SetField(_preferences, "web_cache_preload", False), ExecJS("clearCache()") ]
elif value == "toggle":
if _preferences.web_cache_preload:
return Preference("web cache preload", "disable")
return Preferences("web cache preload", "disable")
else:
return Preference("web cache preload", "enable")
return Preferences("web cache preload", "enable")
elif name == _("voice after game menu"):
+9 -54
View File
@@ -27,7 +27,7 @@ default bubble.tag_properties = { }
# on the screen now.
default bubble.current_dialogue = [ ]
init -1150 python in bubble:
init -1050 python in bubble:
from store import config, ADVCharacter, Character, JSONDB, Action, Frame, NoRollback
@@ -41,14 +41,13 @@ init -1150 python in bubble:
# The path to the json file the bubble database is stored in.
db_filename = "bubble.json"
# The number of rows and columns in the grid that is used to position
# speech bubbles.
# The number of rows and columns in the bubble database.
cols = 24
rows = 24
# The default window area rectangle. This is expressed as squares, where units
# are defined by the rows and columns.
default_area = (15, 1, 8, 5)
default_area = (0, 18, 24, 6)
# The property that the area is supplied as.
area_property = "window_area"
@@ -56,35 +55,17 @@ init -1150 python in bubble:
# Additional properties that the player can use to customize the bubble.
# This is a map from a property name to a list of choices that are cycled
# through.
properties = { }
properties = {
"default" : { }
}
# The property group names, in order.
properties_order = [ ]
# A map from property name to the (left, top, right, bottom) number of pixels
# areas with that property are expanded by. If a property is not in this
# map, None is tried.
expand_area = { }
properties_order = [ "default" ]
# This is set to the JSONDB object that stores the bubble database,
# or None if the database doesn't exist yet.
# or None if the databse doesn't exist yet.
db = None
# These are not used directly, but are used by the default screens.rpy, and
# so should not be set.
frame = None
thoughtframe = None
class ToggleShown(Action):
def __call__(self):
if not active and not shown.value:
return
shown.value = not shown.value
renpy.restart_interaction()
def get_selected(self):
return shown.value
def scene_callback(layer):
global tag_properties
@@ -136,9 +117,6 @@ init -1150 python in bubble:
for the given image tag.
"""
if not properties_order:
raise Exception("A speech bubble is being used, but bubble.properties has not been set.")
rv = { }
xgrid = config.screen_width / cols
@@ -156,29 +134,6 @@ init -1150 python in bubble:
"properties" : properties_order[0]
}
def expand_area(self, area, properties_key):
"""
This is called to expand the area of a bubble. It is given the
area, and the properties key, and returns a new area.
"""
x, y, w, h = area
expand = expand_area.get(properties_key, None) or expand_area.get(None, None)
if expand is None:
return area
left, top, right, bottom = expand
x = x - left
y = y - top
w = w + left + right
h = h + top + bottom
return (x, y, w, h)
def do_show(self, who, what, multiple=None, extra_properties=None):
if extra_properties is None:
@@ -202,7 +157,7 @@ init -1150 python in bubble:
properties_key = tag_properties[image_tag]["properties"]
extra_properties.update(properties.get(properties_key, { }))
extra_properties[area_property] = self.expand_area(tag_properties[image_tag]["area"], properties_key)
extra_properties[area_property] = tag_properties[image_tag]["area"]
return super(BubbleCharacter, self).do_show(who, what, multiple=multiple, extra_properties=extra_properties)
+1 -1
View File
@@ -362,7 +362,7 @@ init -1499 python in _renpysteam:
Activates the Steam overlay, and opens the web page at `url`.
"""
steamapi.SteamFriends().ActivateGameOverlayToWebPage(url.encode("utf-8"), steamapi.k_EActivateGameOverlayToWebPageMode_Default)
steamapi.SteamFriends().ActivateGameOverlayToWebPage(url.encode("utf-8"))
def activate_overlay_to_store(appid, flag=None):
"""
+1 -13
View File
@@ -44,12 +44,6 @@ init -1100 python:
config.sync_server = "https://sync.renpy.org"
class UploadSync(Action):
"""
:doc: sync
This action begins the process of uploading the most recent
saves to the Ren'Py Sync server.
"""
def __call__(self):
renpy.invoke_in_new_context(_sync.upload)
@@ -58,12 +52,6 @@ init -1100 python:
return config.has_sync
class DownloadSync(Action):
"""
:doc: sync
This action begins the process of downloading a Sync from the
Ren'Py Sync server.
"""
def __call__(self):
if renpy.invoke_in_new_context(_sync.download):
@@ -233,7 +221,7 @@ init -1100 python in _sync:
return None
def download_content(url):
def download_content(hashed, url):
import emscripten
import time
import os
+1 -1
View File
@@ -183,7 +183,7 @@ init -1500 python:
if volume is None:
return _CharacterVolumeValue(voice_tag)
else:
if config.quadratic_volumes:
if config.quadratic_volume:
return SetDict(persistent._character_volume, voice_tag, volume ** 2)
else:
return SetDict(persistent._character_volume, voice_tag, volume)
+3 -6
View File
@@ -287,7 +287,7 @@ let video_start = (c) => {
//TODO? c.playing.source.stop(context.currentTime + p.fadeout);
//TODO? } catch (e) {
//TODO? }
//TODO?
//TODO?
//TODO? }
setValue(c.relative_volume.gain, p.relative_volume);
@@ -702,13 +702,10 @@ renpyAudio.set_pan = (channel, pan, delay) => {
linearRampToValue(control, control.value, pan, delay);
};
renpyAudio.tts = (s, v) => {
console.log("tts:", s, "volume:", v);
v = v || 1.0;
renpyAudio.tts = (s) => {
console.log("tts: " + s);
let u = new SpeechSynthesisUtterance(s);
u.volume = v;
speechSynthesis.cancel();
speechSynthesis.speak(u);
};
+1 -1
View File
@@ -67,7 +67,7 @@ screen _developer:
if bubble.active:
textbutton _("Speech Bubble Editor (Shift+B)"):
textbutton _("Speech Bubble Editor"):
action [ SetField(bubble.shown, "value", True), Hide("_developer") ]
hbox:
-13
View File
@@ -179,19 +179,6 @@ if PY2:
add_attribute(io.TextIOWrapper, "_write", io.TextIOWrapper.write)
add_attribute(io.TextIOWrapper, "write", types.MethodType(text_write, None, io.TextIOWrapper)) # type: ignore
################################################################################
# Chance the default for subprocess.Popen.
if PY2:
import subprocess
class Popen(subprocess.Popen):
def __init__(self, *args, **kwargs):
if ("stdout" not in kwargs) and ("stderr" not in kwargs) and ("stdin" not in kwargs):
kwargs.setdefault("close_fds", True)
super(Popen, self).__init__(*args, **kwargs)
subprocess.Popen = Popen
################################################################################
# Export functions.
+3 -14
View File
@@ -97,7 +97,7 @@ savedir = None
image_cache_size = None
# The size of the image cache, in megabytes.
image_cache_size_mb = 400
image_cache_size_mb = 300
# The number of statements we will analyze when doing predictive
# loading. Please note that this is a total number of statements in a
@@ -1373,20 +1373,9 @@ check_translate_none = True
# Like developer, but available at the end of python early blocks.
early_developer = False
# A function that returns the autosave prefix.
autosave_prefix_callback = None
# Does Render.blit round down its pos parameter ?
int_render_blit = False
# Compatibility for c492f2f8e6de57b2740fa5d00566f445124caaba.
at_transform_compare_full_context = False
# A list of callbacks when the display starts.
display_start_callbacks = [ ]
# If not None, the size of the sound buffer, in bytes.
sound_buffer_size = None
# If true, fades will be linear rather than logarithmic.
linear_fades = False
del os
del collections
+1 -2
View File
@@ -163,8 +163,7 @@ ShowingSwitch = renpy.display.layout.ShowingSwitch
AlphaMask = renpy.display.layout.AlphaMask
Layer = renpy.display.layout.Layer
Transform = renpy.display.transform.Transform
Camera = renpy.display.transform.Camera
Transform = renpy.display.motion.Transform
Animation = anim.Animation
Movie = renpy.display.video.Movie
File diff suppressed because it is too large Load Diff
+3 -17
View File
@@ -1116,9 +1116,7 @@ class Button(renpy.display.layout.Window):
renpy.game.interface.timeout(renpy.config.longpress_duration)
if self.longpress_start is not None:
if ev.type == pygame.MOUSEBUTTONUP and ev.button == 1:
self.longpress_start = None
elif math.hypot(x - self.longpress_x, y - self.longpress_y) > renpy.config.longpress_radius:
if math.hypot(x - self.longpress_x, y - self.longpress_y) > renpy.config.longpress_radius:
self.longpress_start = None
elif st >= (self.longpress_start + renpy.config.longpress_duration):
renpy.exports.vibrate(renpy.config.longpress_vibrate)
@@ -1289,7 +1287,7 @@ def input_post_per_interact():
global input_value_active
for i in input_values:
if i == current_input_value:
if i is current_input_value:
break
else:
@@ -1300,7 +1298,7 @@ def input_post_per_interact():
for i in inputs:
editable = (i.value == current_input_value) and input_value_active and i.value.editable
editable = (i.value is current_input_value) and input_value_active and i.value.editable
content = i.value.get_text()
@@ -1367,7 +1365,6 @@ class Input(renpy.text.text.Text): # @UndefinedVariable
edit_text = u""
value = None
shown = False
multiline = False
st = 0
@@ -1387,7 +1384,6 @@ class Input(renpy.text.text.Text): # @UndefinedVariable
value=None,
copypaste=False,
caret_blink=None,
multiline=False,
**properties):
super(Input, self).__init__("", style=style, replaces=replaces, substitute=False, **properties)
@@ -1416,8 +1412,6 @@ class Input(renpy.text.text.Text): # @UndefinedVariable
self.editable = editable
self.pixel_width = pixel_width
self.multiline = multiline
caretprops = { 'color' : None }
for i, v in properties.items():
@@ -1588,14 +1582,6 @@ class Input(renpy.text.text.Text): # @UndefinedVariable
renpy.display.render.redraw(self, 0)
raise renpy.display.core.IgnoreEvent()
elif self.multiline and map_event(ev, 'input_next_line'):
content = self.content[:self.caret_pos] + '\n' + self.content[self.caret_pos:]
self.caret_pos += 1
self.update_text(content, self.editable)
renpy.display.render.redraw(self, 0)
raise renpy.display.core.IgnoreEvent()
elif map_event(ev, "input_enter"):
content = self.content
+12 -20
View File
@@ -84,8 +84,7 @@ controllers = { }
axis_positions = {}
# The axis threshold.
THRESHOLD = 8192 + 4096
ZERO_THRESHOLD = 8192
THRESHOLD = (32768 // 2)
# Should we ignore events?
ignore = False
@@ -255,28 +254,21 @@ def event(ev):
elif ev.type == CONTROLLERAXISMOTION:
pygame_sdl2.event.pump()
events = [ ev ] + pygame.event.get(CONTROLLERAXISMOTION)
if ev.value > THRESHOLD:
pos = "pos"
elif ev.value < -THRESHOLD:
pos = "neg"
else:
pos = "zero"
for ev in events:
old_pos = axis_positions.get((ev.which, ev.axis), None)
old_pos = axis_positions.get((ev.which, ev.axis), None)
if pos == old_pos:
return None
if ev.value > THRESHOLD:
pos = "pos"
elif ev.value < -THRESHOLD:
pos = "neg"
elif abs(ev.value) < ZERO_THRESHOLD:
pos = "zero"
else:
pos = old_pos
axis_positions[(ev.which, ev.axis)] = pos
if pos == old_pos:
continue
axis_positions[(ev.which, ev.axis)] = pos
controller_event(get_string_for_axis(ev.axis), pos)
controller_event(get_string_for_axis(ev.axis), pos)
return None
+26 -85
View File
@@ -2017,6 +2017,9 @@ class Interface(object):
self.old_scene = { }
self.transition = { }
self.ongoing_transition = { }
self.transition_time = { }
self.transition_from = { }
self.suppress_transition = False
self.quick_quit = False
self.force_redraw = False
@@ -2073,22 +2076,6 @@ class Interface(object):
# Is our audio paused?
self.audio_paused = False
# Transition-related:
# A map from layer (or None for the root) to the uninstantiate
# transition object that's on that layer.
self.ongoing_transition = { }
# The same, but for the transition after it's been called with the
# old and new displayables.
self.instantiated_transition = { }
# The time an ongoing transition started.
self.transition_time = { }
# The displayable that an ongoing transition is transitioning from.
self.transition_from = { }
# Init layers.
init_layers()
@@ -2373,7 +2360,6 @@ class Interface(object):
cursors = { }
for key, cursor_list in renpy.config.mouse.items():
l = [ ]
for i in cursor_list:
@@ -2387,18 +2373,11 @@ class Interface(object):
self.cursor_cache[key] = l
if ("default" not in self.cursor_cache) and (None in self.cursor_cache):
self.cursor_cache["default"] = self.cursor_cache[None]
s = "Total time until interface ready: {}s.".format(time.time() - import_time)
if renpy.android and not renpy.config.log_to_stdout:
print(s)
for i in renpy.config.display_start_callbacks:
i()
def post_init(self):
"""
This is called after display init, but before the window is created.
@@ -2409,7 +2388,6 @@ class Interface(object):
pygame.display.hint("SDL_TOUCH_MOUSE_EVENTS", "1")
pygame.display.hint("SDL_MOUSE_TOUCH_EVENTS", "0")
pygame.display.hint("SDL_EMSCRIPTEN_ASYNCIFY", "0")
pygame.display.hint("SDL_IME_SHOW_UI", "1")
if renpy.config.mouse_focus_clickthrough:
pygame.display.hint("SDL_MOUSE_FOCUS_CLICKTHROUGH", "1")
@@ -2473,9 +2451,6 @@ class Interface(object):
square_im.blit(im, ((imax - iw) // 2, (imax - ih) // 2))
im = square_im
if im.get_size()[0] > 1024:
im = renpy.display.scale.smoothscale(im, (1024, 1024))
pygame.display.set_icon(im)
except renpy.webloader.DownloadNeeded:
pass
@@ -2944,7 +2919,6 @@ class Interface(object):
for l in layers:
if l is None:
self.ongoing_transition.pop(None, None)
self.instantiated_transition.pop(None, None)
self.transition_time.pop(None, None)
self.transition_from.pop(None, None)
continue
@@ -2954,7 +2928,6 @@ class Interface(object):
if (self.frame_time - start) >= delay:
self.ongoing_transition.pop(l, None)
self.instantiated_transition.pop(l, None)
self.transition_time.pop(l, None)
self.transition_from.pop(l, None)
@@ -3165,9 +3138,6 @@ class Interface(object):
if interaction and (mouse_kind is None):
mouse_kind = self.mouse
if mouse_kind is None:
mouse_kind = "default"
if pygame.mouse.get_pressed()[0]:
mouse_kind = "pressed_" + mouse_kind # type: ignore
@@ -3358,7 +3328,6 @@ class Interface(object):
# Stop ongoing transitions.
self.ongoing_transition.clear()
self.instantiated_transition.clear()
self.transition_from.clear()
self.transition_time.clear()
@@ -3644,9 +3613,6 @@ class Interface(object):
else:
renpy.plog(1, "end idle_frame (inexpensive)")
# This gets assigned below.
take_layer_displayable = None
def interact_core(self,
show_mouse=True,
trans_pause=False,
@@ -3708,14 +3674,11 @@ class Interface(object):
self.suppress_transition = False
# Figure out transitions.
if suppress_transition or renpy.game.after_rollback:
if suppress_transition:
self.ongoing_transition.clear()
self.instantiated_transition.clear()
self.transition_from.clear()
self.transition_time.clear()
if not suppress_transition:
else:
for k, t in self.transition.items():
if k not in self.old_scene:
continue
@@ -3828,29 +3791,6 @@ class Interface(object):
layers_root = renpy.display.layout.MultiBox(layout='fixed')
layers_root.layers = { }
def instantiate_transition(layer, old_d, new_d):
"""
Create a transition that will be used to transition `layer` (which
can be None) to `d`.
"""
old_trans = self.instantiated_transition.get(layer, None)
trans = self.ongoing_transition[layer](
old_widget=old_d,
new_widget=new_d)
if not isinstance(trans, Displayable):
raise Exception("Expected transition to be a displayable, not a %r" % trans)
if isinstance(trans, renpy.display.transform.Transform) and isinstance(old_trans, renpy.display.transform.Transform):
trans.take_state(old_trans)
trans.take_execution_state(old_trans)
self.instantiated_transition[layer] = trans
return trans
def add_layer(where, layer):
scene_layer = scene[layer]
@@ -3859,7 +3799,12 @@ class Interface(object):
if (self.ongoing_transition.get(layer, None) and
not suppress_transition):
trans = instantiate_transition(layer, self.transition_from[layer], scene_layer)
trans = self.ongoing_transition[layer](
old_widget=self.transition_from[layer],
new_widget=scene_layer)
if not isinstance(trans, Displayable):
raise Exception("Expected transition to be a displayable, not a %r" % trans)
transition_time = self.transition_time.get(layer, None)
@@ -3890,7 +3835,9 @@ class Interface(object):
old_root.layers[layer] = d
old_root.add(d)
trans = instantiate_transition(None, old_root, layers_root)
trans = self.ongoing_transition[None](
old_widget=old_root,
new_widget=layers_root)
if not isinstance(trans, Displayable):
raise Exception("Expected transition to be a displayable, not a %r" % trans)
@@ -3949,29 +3896,23 @@ class Interface(object):
# caused by an exception propagating through this function.
try:
# Call per-interaction code for all displayables.
def take_layer_displayable(ld):
"""
This is called by a layer displayable to add the layer's
contents to the layer displayable.
"""
# Insert layers into Layer displayables.
def per_interact(i):
if isinstance(i, renpy.display.layout.Layer):
if i.layer in scene:
i.layers = layer_transitions
add_layer(i, i.layer)
del i.layers
else:
i.add(null)
if ld.layer in scene:
ld.layers = layer_transitions
add_layer(ld, ld.layer)
del ld.layers
else:
ld.add(null)
self.take_layer_displayable = take_layer_displayable
i.per_interact()
# Call per-interaction code for all widgets.
renpy.display.behavior.input_pre_per_interact()
root_widget.visit_all(lambda d : d.per_interact())
root_widget.visit_all(per_interact)
renpy.display.behavior.input_post_per_interact()
self.take_layer_displayable = None
# Consolidate static and layer transitions for later processing.
if layer_transitions:
layer_transitions.update(layers_root.layers)
+1 -1
View File
@@ -471,8 +471,8 @@ class Drag(renpy.display.core.Displayable, renpy.revertable.RevertableObject):
Changes the child of this drag to `d`.
"""
d.per_interact()
self.child = renpy.easy.displayable(d)
self.child.per_interact()
renpy.display.render.invalidate(self)
def top(self):
+8 -29
View File
@@ -71,15 +71,7 @@ class CacheEntry(object):
rv += self.width * self.height
if self.texture is not None:
has_mipmaps = getattr(self.texture, "has_mipmaps", None)
if has_mipmaps and has_mipmaps():
mipmap_multiplier = 1.34
else:
mipmap_multiplier = 1.0
rv += int(self.bounds[2] * self.bounds[3] * mipmap_multiplier)
rv += self.bounds[2] * self.bounds[3]
return rv
@@ -384,9 +376,14 @@ class Cache(object):
pass
if not predict:
rv = ce.texture
if render:
return make_render(ce)
else:
rv = ce.texture
else:
rv = None
else:
rv = ce.surf
@@ -397,14 +394,11 @@ class Cache(object):
ce.surf = None
if texture and render and not predict:
return make_render(ce)
if (ce.surf is None) and (ce.texture is None):
with self.lock:
self.kill(ce)
# Done. Return the surface or texture.
# Done... return the surface.
return rv
# This kills off a given cache entry.
@@ -2069,21 +2063,6 @@ def load_surface(im):
return cache.get(image(im))
def load_rgba(data, size):
"""
:name: renpy.load_rgba
:doc: udd_utility
Loads the image data `bytes` into a texture of size `size`, and return it.
`data`
Should be a bytes object containing the image data in RGBA8888 order.
"""
surf = renpy.display.pgrender.surface(size, True)
surf.from_data(data)
return renpy.display.draw.load_texture(surf)
def reset_module():
print("Resetting cache.")
+13 -16
View File
@@ -484,7 +484,7 @@ class ImageReference(renpy.display.core.Displayable):
def _handles_event(self, event):
if self.target is None:
self.find_target()
return False
return self.target._handles_event(event)
@@ -745,7 +745,7 @@ class DynamicImage(renpy.display.core.Displayable):
def _handles_event(self, event):
if self.target is None:
self.find_target()
return False
return self.target._handles_event(event)
@@ -1006,8 +1006,7 @@ class ShownImageInfo(renpy.object.Object):
if ca:
ca_required = [ i for i in required if i not in attrs ]
ca_optional = [ i for i in optional if i not in attrs if i not in required ]
ca_optional = [ i for i in optional if i not in attrs ]
newattrs = ca(tag, ca_required, ca_optional)
if newattrs is None:
@@ -1015,21 +1014,19 @@ class ShownImageInfo(renpy.object.Object):
attrs = attrs + newattrs
else:
num_required = 0
num_required = 0
for i in attrs:
if i in required:
num_required += 1
continue
# We don't have any not-found attributes. But we might not
# have all of the attributes.
if num_required != len(required):
for i in attrs:
if i in required:
num_required += 1
continue
# We don't have any not-found attributes. But we might not
# have all of the attributes.
if num_required != len(required):
continue
len_attrs = len(set(attrs))
if len_attrs < max_len:
+2 -2
View File
@@ -580,8 +580,8 @@ class Frame(renpy.display.core.Displayable):
return rv
def visit(self):
rv = [ self.image ]
self.style._visit_frame(rv.append)
rv = [ ]
self.style._visit_frame(rv)
return rv
-6
View File
@@ -2469,9 +2469,3 @@ class Layer(AdjustTimes):
seen.add(id_d)
d.visit_all(callback, seen)
def per_interact(self):
if renpy.game.interface and renpy.game.interface.take_layer_displayable:
renpy.game.interface.take_layer_displayable(self)
super(Layer, self).per_interact()
+1 -1
View File
@@ -247,7 +247,7 @@ def bilinear_scale(src, dst, sx=0, sy=0, sw=None, sh=None, dx=0, dy=0, dw=None,
_renpy.bilinear(src, dst, sx, sy, sw, sh, dx, dy, dw, dh, precise=precise)
self = _renpy.transform
transform = _renpy.transform
# Note: Blend requires all surfaces to be the same size.
blend = _renpy.blend
-197
View File
@@ -1,197 +0,0 @@
#cython: profile=False
# Copyright 2004-2023 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
# (the "Software"), to deal in the Software without restriction,
# including without limitation the rights to use, copy, modify, merge,
# publish, distribute, sublicense, and/or sell copies of the Software,
# and to permit persons to whom the Software is furnished to do so,
# subject to the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
from __future__ import print_function
from libc.math cimport sin, cos, atan2, asin, acos
DEF pi = 3.14159265358979323846
cdef double radians(double degrees):
return degrees * pi / 180.0
cdef double degrees(double radians):
return radians * 180.0 / pi
def euler_slerp(double complete, old, new):
"""
Use quaternions to interpolate between two euler angles.
"""
cdef double coeff1
cdef double coeff2
cdef double cosx_cosp
cdef double cosz_cosp1
cdef double cosz_cosp2
cdef double cx
cdef double cy
cdef double cz
cdef double dot
cdef double new_q_w
cdef double new_q_x
cdef double new_q_y
cdef double new_q_z
cdef double new_x
cdef double new_x_div_2
cdef double new_y
cdef double new_y_div_2
cdef double new_z
cdef double new_z_div_2
cdef double old_q_mul_new_q
cdef double old_q_w
cdef double old_q_x
cdef double old_q_y
cdef double old_q_z
cdef double old_x
cdef double old_x_div_2
cdef double old_y
cdef double old_y_div_2
cdef double old_z
cdef double old_z_div_2
cdef double q_w
cdef double q_x
cdef double q_y
cdef double q_z
cdef double sinx_cosp
cdef double siny
cdef double sinz_cosp1
cdef double sinz_cosp2
cdef double sout
cdef double st
cdef double sut
cdef double sx
cdef double sy
cdef double sz
cdef double theta
cdef double x
cdef double y
cdef double z
if old == new:
return new
#select the shorten root
old_x, old_y, old_z = old
old_x = old_x % 360
old_y = old_y % 360
old_z = old_z % 360
new_x, new_y, new_z = new
new_x = new_x % 360
new_y = new_y % 360
new_z = new_z % 360
if new_x - old_x > 180:
new_x = new_x - 360
if new_y - old_y > 180:
new_y = new_y - 360
if new_z - old_z > 180:
new_z = new_z - 360
#z-y-x Euler angles to quaternion conversion
#https://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles
old_x_div_2 = radians(old_x) * 0.5
old_y_div_2 = radians(old_y) * 0.5
old_z_div_2 = radians(old_z) * 0.5
cx = cos(old_x_div_2)
sx = sin(old_x_div_2)
cy = cos(old_y_div_2)
sy = sin(old_y_div_2)
cz = cos(old_z_div_2)
sz = sin(old_z_div_2)
old_q_x = sx * cy * cz - cx * sy * sz
old_q_y = cx * sy * cz + sx * cy * sz
old_q_z = cx * cy * sz - sx * sy * cz
old_q_w = cx * cy * cz + sx * sy * sz
new_x_div_2 = radians(new_x) * 0.5
new_y_div_2 = radians(new_y) * 0.5
new_z_div_2 = radians(new_z) * 0.5
cx = cos(new_x_div_2)
sx = sin(new_x_div_2)
cy = cos(new_y_div_2)
sy = sin(new_y_div_2)
cz = cos(new_z_div_2)
sz = sin(new_z_div_2)
new_q_x = sx * cy * cz - cx * sy * sz
new_q_y = cx * sy * cz + sx * cy * sz
new_q_z = cx * cy * sz - sx * sy * cz
new_q_w = cx * cy * cz + sx * sy * sz
#calculate new quaternion between old and new.
old_q_mul_new_q = (old_q_x * new_q_x + old_q_y * new_q_y + old_q_z * new_q_z + old_q_w * new_q_w)
dot = old_q_mul_new_q
if dot > 1.0:
dot = 1.0
elif dot < -1.0:
dot = -1.0
theta = abs(acos(dot))
st = sin(theta)
sut = sin(theta * complete)
sout = sin(theta * (1 - complete))
coeff1 = sout / st
coeff2 = sut / st
q_x = coeff1 * old_q_x + coeff2 * new_q_x
q_y = coeff1 * old_q_y + coeff2 * new_q_y
q_z = coeff1 * old_q_z + coeff2 * new_q_z
q_w = coeff1 * old_q_w + coeff2 * new_q_w
#Quaternion to z-y-x Euler angles conversion
#https://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles
sinx_cosp = 2 * (q_w * q_x + q_y * q_z)
cosx_cosp = 1 - 2 * (q_x * q_x + q_y * q_y)
siny = 2 * (q_w * q_y - q_z * q_x)
sinz_cosp1 = 2 * (q_x * q_y - q_w * q_z)
cosz_cosp1 = 1 - 2 * (q_x * q_x + q_z * q_z)
sinz_cosp2 = 2 * (q_w * q_z + q_x * q_y)
cosz_cosp2 = 1 - 2 * (q_y * q_y + q_z * q_z)
if siny >= 1:
x = 0
y = pi/2
z = atan2(sinz_cosp1, cosz_cosp1)
elif siny <= -1:
x = 0
y = -pi/2
z = atan2(sinz_cosp1, cosz_cosp1)
else:
x = atan2(sinx_cosp, cosx_cosp)
if siny > 1.0:
siny = 1.0
elif siny < -1.0:
siny = -1.0
y = asin(siny)
z = atan2(sinz_cosp2, cosz_cosp2)
x = degrees(x) % 360
y = degrees(y) % 360
z = degrees(z) % 360
return (x, y, z)
+19 -62
View File
@@ -414,7 +414,10 @@ def redraw_time():
def redraw(d, when):
"""
Documented in cdd.rst.
:doc: udd_utility
Causes the displayable `d` to be redrawn after `when` seconds have
elapsed.
"""
if not renpy.game.interface:
@@ -783,7 +786,8 @@ cdef class Render:
If `focus` is true, then focuses are added from the child to the
parent.
This will only blit on integer pixel boundaries.
The elements of `pos` are interpreted as a ``position`` :
int and absolute are numbers of pixels, pure-float is relative to the size of this render.
"""
if source is self:
@@ -795,8 +799,15 @@ cdef class Render:
(xo, yo) = pos
xo = int(xo)
yo = int(yo)
if renpy.config.int_render_blit:
xo = int(xo)
yo = int(yo)
else:
if type(xo) is float:
xo *= self.width
if type(yo) is float:
yo *= self.height
# no need to convert to absolute
if index is None:
self.children.append((source, xo, yo, focus, main))
@@ -809,73 +820,19 @@ cdef class Render:
return 0
cpdef int subpixel_blit(Render self, source, tuple pos, object focus=True, object main=True, object index=None):
cpdef int absolute_blit(Render self, source, tuple pos, *args, **kwargs):
"""
Blits `source` (a Render, Surface, or GL2Model) to this Render, offset by
xo and yo.
If `focus` is true, then focuses are added from the child to the
parent.
This blits at fractional pixel boundaries.
An proxy for blit that blits at fractional pixel boundaries.
"""
if source is self:
raise Exception("Blitting to self.")
if models:
if isinstance(source, pygame.Surface):
source = renpy.display.draw.load_texture(source)
(xo, yo) = pos
xo = float(xo)
yo = float(yo)
if index is None:
self.children.append((source, xo, yo, focus, main))
else:
self.children.insert(index, (source, xo, yo, focus, main))
if isinstance(source, Render):
self.depends_on_list.append(source)
source.parents.add(self)
return 0
cpdef int absolute_blit(Render self, source, tuple pos, object focus=True, object main=True, object index=None):
"""
Blits `source` (a Render or Surface) to this Render, offset by
xo and yo.
If `focus` is true, then focuses are added from the child to the
parent.
This blits at fractional pixel boundaries.
"""
if source is self:
raise Exception("Blitting to self.")
if models:
if isinstance(source, pygame.Surface):
source = renpy.display.draw.load_texture(source)
(xo, yo) = pos
xo = renpy.display.core.absolute(xo)
yo = renpy.display.core.absolute(yo)
if index is None:
self.children.append((source, xo, yo, focus, main))
else:
self.children.insert(index, (source, xo, yo, focus, main))
return self.blit(source, (xo, yo), *args, **kwargs)
if isinstance(source, Render):
self.depends_on_list.append(source)
source.parents.add(self)
return 0
subpixel_blit = absolute_blit # legacy
def get_size(self):
-3
View File
@@ -1002,9 +1002,6 @@ def prepare_screens():
s.ast.unprepare_screen()
s.ast.prepare_screen()
# Compile ATL in screens.
renpy.atl.compile_all()
prepared = True
finally:
+1 -1
View File
@@ -558,7 +558,7 @@ def draw_transformed(dest, clip, what, xo, yo, alpha, forward, reverse):
dest = dest.subsurface((minx, miny, maxx - minx, maxy - miny))
renpy.display.module.self(
renpy.display.module.transform(
what, dest,
cx, cy,
forward.xdx, forward.ydx,
+21 -119
View File
@@ -31,25 +31,9 @@ import types # @UnresolvedImport
import renpy
from renpy.display.layout import Container
from renpy.display.accelerator import RenderTransform
from renpy.display.accelerator import transform_render
from renpy.atl import position, any_object, bool_or_none, float_or_none, matrix, mesh
class Camera(renpy.object.Object):
"""
:doc: point_to_camera
Instances of this class can be used with point_to to point
at the location of the camera for a particular layer.
`layer`
The name of the layer.
"""
def __init__(self, layer="master"):
self.layer = layer
# The null object that's used if we don't have a defined child.
null = None
@@ -65,99 +49,40 @@ def get_null():
# Convert a position from cartesian to polar coordinates.
def cartesian_to_polar(x, y, xaround, yaround, available_width, available_height):
def cartesian_to_polar(x, y, xaround, yaround):
"""
Converts cartesian coordinates to polar coordinates.
"""
tx = type(x)
ty = type(y)
if not available_width:
available_width = renpy.config.screen_width
if not available_height:
available_height = renpy.config.screen_height
if type(xaround) is float:
xaround = int(xaround * available_width)
if type(yaround) is float:
yaround = int(yaround * available_height)
if tx is float:
x = x * available_width
if ty is float:
y = y * available_height
dx = x - xaround
dy = y - yaround
if tx is float:
if available_width:
dx /= available_width
else:
dx = x
if ty is float:
dy /= available_height
radius = math.hypot(dx, dy)
angle = math.atan2(dx, -dy) / math.pi * 180
if angle < 0:
angle += 360
radius = tx(radius)
print("AR", angle, radius)
return angle, radius
def polar_to_cartesian(angle, radius, xaround, yaround, available_width, available_height):
def polar_to_cartesian(angle, radius, xaround, yaround):
"""
Converts polar coordinates to cartesian coordinates.
Converts polart coordinates to cartesian coordinates.
"""
tr = type(radius)
if not available_width:
available_width = renpy.config.screen_width
if not available_height:
available_height = renpy.config.screen_height
if type(xaround) is float:
xaround = int(xaround * available_width)
if type(yaround) is float:
yaround = int(yaround * available_height)
angle = angle * math.pi / 180
dx = radius * math.sin(angle)
dy = -radius * math.cos(angle)
x = xaround + dx
y = yaround + dy
if tr is float:
x /= available_width
y /= available_height
x = tr(x)
y = tr(y)
print("XY", x, y)
x = type(xaround)(xaround + dx)
y = type(yaround)(yaround + dy)
return x, y
def first_not_none(*args):
"""
Returns the first argument that is not None, or the last argument if
@@ -176,9 +101,6 @@ class TransformState(renpy.object.Object):
last_angle = None
last_events = True
available_width = 0
available_height = 0
def __init__(self):
# Most fields on this object are set by add_property, at the bottom
@@ -315,36 +237,34 @@ class TransformState(renpy.object.Object):
def get_angle(self):
xpos = first_not_none(self.xpos, self.inherited_xpos, 0)
ypos = first_not_none(self.ypos, self.inherited_ypos, 0)
angle, _radius = cartesian_to_polar(xpos, ypos, self.xaround, self.yaround, self.available_width, self.available_height)
return angle or self.last_angle or 0
angle, _radius = cartesian_to_polar(xpos, ypos, self.xaround, self.yaround)
return angle
def get_radius(self):
xpos = first_not_none(self.xpos, self.inherited_xpos, 0)
ypos = first_not_none(self.ypos, self.inherited_ypos, 0)
_angle, radius = cartesian_to_polar(xpos, ypos, self.xaround, self.yaround, self.available_width, self.available_height)
_angle, radius = cartesian_to_polar(xpos, ypos, self.xaround, self.yaround)
return radius
def set_angle(self, value):
self.last_angle = 0
xpos = first_not_none(self.xpos, self.inherited_xpos, 0)
ypos = first_not_none(self.ypos, self.inherited_ypos, 0)
_angle, radius = cartesian_to_polar(xpos, ypos, self.xaround, self.yaround, self.available_width, self.available_height)
_angle, radius = cartesian_to_polar(xpos, ypos, self.xaround, self.yaround)
angle = value
self.xpos, self.ypos = polar_to_cartesian(angle, radius, self.xaround, self.yaround, self.available_width, self.available_height)
self.xpos, self.ypos = polar_to_cartesian(angle, radius, self.xaround, self.yaround)
if self.xanchoraround:
self.xanchor, self.yanchor = polar_to_cartesian(angle, radius, self.xaround, self.yaround, self.available_width, self.available_height)
self.xanchor, self.yanchor = polar_to_cartesian(angle, radius, self.xaround, self.yaround)
def set_radius(self, value):
xpos = first_not_none(self.xpos, self.inherited_xpos, 0)
ypos = first_not_none(self.ypos, self.inherited_ypos, 0)
angle, _radius = cartesian_to_polar(xpos, ypos, self.xaround, self.yaround, self.available_width, self.available_height)
angle, _radius = cartesian_to_polar(xpos, ypos, self.xaround, self.yaround)
radius = value
self.xpos, self.ypos = polar_to_cartesian(angle, radius, self.xaround, self.yaround, self.available_width, self.available_height)
self.xpos, self.ypos = polar_to_cartesian(angle, radius, self.xaround, self.yaround)
if self.xanchoraround:
self.xanchor, self.yanchor = polar_to_cartesian(angle, radius, self.xaround, self.yaround, self.available_width, self.available_height)
self.xanchor, self.yanchor = polar_to_cartesian(angle, radius, self.xaround, self.yaround)
angle = property(get_angle, set_angle)
radius = property(get_radius, set_radius)
@@ -513,15 +433,14 @@ class Transform(Container):
focus=None,
default=False,
_args=None,
alt=None,
**kwargs):
properties = {k: kwargs.pop(k) for k in style_properties if k in kwargs}
self.kwargs = kwargs
self.style_arg = style
super(Transform, self).__init__(style=style, focus=focus, default=default, _args=_args, **properties)
super(Transform, self).__init__(style=style, focus=focus, default=default, _args=_args, alt=alt)
self.function = function
@@ -831,21 +750,7 @@ class Transform(Container):
# The render method is now defined in accelerator.pyx.
def render(self, width, height, st, at):
# Prevent time from ticking backwards, as can happen if we replace a
# transform but keep its state.
if st + self.st_offset <= self.st:
self.st_offset = self.st - st
if at + self.at_offset <= self.at:
self.at_offset = self.at - at
self.st = st = st + self.st_offset
self.at = at = at + self.at_offset
# Update the state.
self.update_state()
return RenderTransform(self).render(width, height, st, at)
return transform_render(self, width, height, st, at)
def event(self, ev, x, y, st):
@@ -1042,9 +947,6 @@ class ATLTransform(renpy.atl.ATLTransformBase, Transform):
return repr((self.child, self.atl.loc))
# Names of style properties that should be sent to the parent.
style_properties = {'alt'}
# Names of transform properties, and if the property should be handled with
# diff2 or diff4.
all_properties = set()
@@ -1123,7 +1025,7 @@ add_property("nearest", bool_or_none, None)
add_property("perspective", any_object, None)
add_property("rotate", float, None)
add_property("rotate_pad", bool, True)
add_property("point_to", any_object, None)
add_property("poi", (float, float, float), None)
add_property("orientation", (float, float, float), None)
add_property("xrotate", float, None)
add_property("yrotate", float, None)
@@ -1175,7 +1077,7 @@ ALIASES = {
"around" : (position, position),
"offset" : (int, int),
"pos" : (position, position),
"radius" : position,
"radius" : float,
"size" : (int, int),
"xalign" : float,
"xcenter" : position,
-5
View File
@@ -639,11 +639,6 @@ class AlphaDissolve(Transition):
super(AlphaDissolve, self).__init__(delay, **properties)
self.control = renpy.display.layout.Fixed()
control = renpy.easy.displayable(control)
if control._duplicatable:
control = control._duplicate(self._args)
self.control.add(control)
self.old_widget = renpy.easy.displayable(old_widget)
+6 -18
View File
@@ -110,29 +110,19 @@ def default_tts_function(s):
fsencode = renpy.exports.fsencode
amplitude = renpy.game.preferences.get_mixer("voice")
amplitude_100 = int(amplitude * 100)
if "RENPY_TTS_COMMAND" in os.environ:
process = subprocess.Popen([ os.environ["RENPY_TTS_COMMAND"], fsencode(s) ])
elif renpy.linux:
cmd = [ "espeak", "-a", fsencode(str(amplitude_100)) ]
if renpy.config.tts_voice is not None:
cmd.extend([ "-v", fsencode(renpy.config.tts_voice) ])
cmd.append(fsencode(s))
process = subprocess.Popen(cmd)
if renpy.config.tts_voice is None:
process = subprocess.Popen([ "espeak", fsencode(s) ])
else:
process = subprocess.Popen([ "espeak", "-v", fsencode(renpy.config.tts_voice), fsencode(s) ])
elif renpy.macintosh:
s = "[[volm {}]]".format(amplitude) + s
if renpy.config.tts_voice is None:
process = subprocess.Popen([ "say", fsencode(s) ])
else:
@@ -147,13 +137,13 @@ def default_tts_function(s):
say_vbs = os.path.join(os.path.dirname(sys.executable), "say.vbs")
s = s.replace('"', "")
process = subprocess.Popen([ "wscript", fsencode(say_vbs), fsencode(s), fsencode(voice), fsencode(str(amplitude_100)) ])
process = subprocess.Popen([ "wscript", fsencode(say_vbs), fsencode(s), fsencode(voice) ])
elif renpy.emscripten and renpy.config.webaudio:
try:
from renpy.audio.webaudio import call
call("tts", s, amplitude)
call("tts", s)
except Exception:
pass
@@ -264,8 +254,6 @@ def displayable(d):
else:
prefix = renpy.translation.translate_string("Self-voicing enabled. ")
last_raw = None
for i in renpy.config.tts_voice_channels:
if not prefix and renpy.audio.music.get_playing(i):
return
+9 -52
View File
@@ -100,9 +100,6 @@ fullscreen = False
# place.
reset_channels = set()
# These store the textures for movies in the same group.
group_texture = { }
def early_interact():
"""
@@ -249,15 +246,9 @@ def get_movie_texture_web(channel, mask_channel, side_mask, mipmap):
return tex, new
def render_movie(channel, width, height, group=None):
def render_movie(channel, width, height):
tex, _new = get_movie_texture(channel)
if group is not None:
if tex is None:
tex = group_texture.get(group, None)
else:
group_texture[group] = tex
if tex is None:
return None
@@ -379,13 +370,6 @@ class Movie(renpy.display.core.Displayable):
If False, the movie will not loop. If `image` is defined, the image
will be displayed when the movie ends. Otherwise, the displayable will
become transparent.
`group`
If not None, this should be a string. If given, and if the movie has not
yet started playing, and another movie in the same group has played in
the previous frame, the last frame from that movie will be used for
this movie. This can prevent flashes of transparency when switching
between two movies.
"""
fullscreen = False
@@ -403,7 +387,6 @@ class Movie(renpy.display.core.Displayable):
play_callback = None
loop = True
group = None
def any_loadable(self, name):
@@ -434,6 +417,7 @@ class Movie(renpy.display.core.Displayable):
if self.mask_channel is not None:
self.mask_channel = self.channel + "_mask"
def ensure_channel(self, name):
if name is None:
@@ -449,7 +433,7 @@ class Movie(renpy.display.core.Displayable):
renpy.audio.music.register_channel(name, renpy.config.movie_mixer, loop=True, stop_on_mute=False, movie=True, framedrop=framedrop, force=True)
def __init__(self, fps=24, size=None, channel="movie", play=None, mask=None, mask_channel=None, image=None, play_callback=None, side_mask=False, loop=True, start_image=None, group=None, **properties):
def __init__(self, fps=24, size=None, channel="movie", play=None, mask=None, mask_channel=None, image=None, play_callback=None, side_mask=False, loop=True, start_image=None, **properties):
global movie_channel_serial
@@ -491,23 +475,16 @@ class Movie(renpy.display.core.Displayable):
self.play_callback = play_callback
self.group = group
if (self.channel == "movie") and (renpy.config.hw_video) and renpy.mobile:
raise Exception("Movie(channel='movie') doesn't work on mobile when config.hw_video is true. (Use a different channel argument.)")
def _handles_event(self, event):
return event == "show"
def set_transform_event(self, event):
if event == "show":
reset_channels.add(self.channel)
def render(self, width, height, st, at):
if self._play and not (renpy.game.preferences.video_image_fallback is True):
if channel_movie.get(self.channel, None) is not self:
channel_movie[self.channel] = self
channel_movie[self.channel] = self
if st == 0:
reset_channels.add(self.channel)
playing = renpy.audio.music.get_playing(self.channel)
@@ -516,9 +493,6 @@ class Movie(renpy.display.core.Displayable):
if self.channel in reset_channels:
not_playing = False
if self.group is not None and self.group in group_texture:
not_playing = False
if (self.image is not None) and not_playing:
surf = renpy.display.render.render(self.image, width, height, st, at)
w, h = surf.get_size()
@@ -531,12 +505,6 @@ class Movie(renpy.display.core.Displayable):
tex, _ = get_movie_texture(self.channel, self.mask_channel, self.side_mask, self.style.mipmap)
if self.group is not None:
if tex is None:
tex = group_texture.get(self.group, None)
else:
group_texture[self.group] = tex
if (not not_playing) and (tex is not None):
width, height = tex.get_size()
@@ -559,7 +527,7 @@ class Movie(renpy.display.core.Displayable):
if not playing:
rv = None
else:
rv = render_movie(self.channel, w, h, group=self.group)
rv = render_movie(self.channel, w, h)
if rv is None:
rv = renpy.display.render.Render(w, h)
@@ -645,6 +613,7 @@ def update_playing():
renpy.game.context().movie = dict(channel_movie)
reset_channels.clear()
def frequent():
"""
Called to update the video playback. Returns true if a video refresh is
@@ -655,18 +624,6 @@ def frequent():
renpy.audio.audio.advance_time()
# Cycle the group textures.
global group_texture
old_group_texture = group_texture
group_texture = { }
for movies in displayable_channels.values():
for m in movies:
if m.group is not None:
group_texture[m.group] = old_group_texture.get(m.group, None)
# Determine if we need to redraw.
if displayable_channels:
update = True
+4 -11
View File
@@ -75,7 +75,7 @@ from renpy.display.image import image_exists, image_exists as has_image, list_im
from renpy.display.image import get_available_image_tags, get_available_image_attributes, check_image_attributes, get_ordered_image_attributes
from renpy.display.image import get_registered_image
from renpy.display.im import load_surface, load_image, load_rgba
from renpy.display.im import load_surface, load_image
from renpy.curry import curry, partial
from renpy.display.video import movie_start_fullscreen, movie_start_displayable, movie_stop
@@ -132,7 +132,6 @@ renpy_pure("unelide_filename")
renpy_pure("known_languages")
renpy_pure("check_text_tags")
renpy_pure("filter_text_tags")
renpy_pure("split_properties")
import time
import sys
@@ -836,9 +835,6 @@ def web_input(prompt, default='', allow=None, exclude='{}', length=None, mask=Fa
renpy.exports.mode('input')
# Take the user out of fullscreen during input.
renpy.game.preferences.fullscreen = False
prompt = renpy.text.extras.filter_text_tags(prompt, allow=set())
roll_forward = renpy.exports.roll_forward_info()
@@ -868,7 +864,7 @@ def web_input(prompt, default='', allow=None, exclude='{}', length=None, mask=Fa
return rv
def input(prompt, default='', allow=None, exclude='{}', length=None, with_none=None, pixel_width=None, screen="input", mask=None, copypaste=True, multiline=False, **kwargs): # @ReservedAssignment
def input(prompt, default='', allow=None, exclude='{}', length=None, with_none=None, pixel_width=None, screen="input", mask=None, copypaste=True, **kwargs): # @ReservedAssignment
"""
:doc: input
@@ -908,9 +904,6 @@ def input(prompt, default='', allow=None, exclude='{}', length=None, with_none=N
`copypaste`
When true, copying from and pasting to this input is allowed.
`multiline`
When true, move caret to next line is allowed.
If :var:`config.disable_input` is True, this function only returns
`default`.
@@ -947,7 +940,7 @@ def input(prompt, default='', allow=None, exclude='{}', length=None, with_none=N
if has_screen(screen):
widget_properties = { }
widget_properties["input"] = dict(default=default, length=length, allow=allow, exclude=exclude, editable=not fixed, pixel_width=pixel_width, mask=mask, copypaste=copypaste, multiline=multiline)
widget_properties["input"] = dict(default=default, length=length, allow=allow, exclude=exclude, editable=not fixed, pixel_width=pixel_width, mask=mask, copypaste=copypaste)
show_screen(screen, _transient=True, _widget_properties=widget_properties, prompt=prompt, **show_properties)
@@ -1454,7 +1447,7 @@ def say(who, what, *args, **kwargs):
e "Hello, world."
$ renpy.say(e, "Hello, world.")
$ e("Hello, world.") # when e is not a string
$ e("Hello, world.")
"""
if renpy.config.old_substitutions:
-10
View File
@@ -47,7 +47,6 @@ cdef class GL2Draw:
cdef tuple default_clip
cdef float dpi_scale
cdef object shader_cache
cdef bint ever_set_position
cdef public tuple clip_rtt_box
@@ -74,15 +73,6 @@ cdef class GL2Draw:
# The framebuffer object used for offscreen rendering.
cdef GLuint fbo
# The color texture object used for pixel tests (1x1).
cdef GLuint color_renderbuffer_1px
# The depth renderbuffer object used for pixel tests. (1x1)
cdef GLuint depth_renderbuffer_1px
# The framebuffer object used for pixel tests (1x1)
cdef GLuint fbo_1px
# The texture_loader singleton.
cdef public TextureLoader texture_loader
+14 -96
View File
@@ -76,9 +76,6 @@ vsync = True
# A list of frame end times, used for the same purpose.
frame_times = [ ]
# The default position of the window.
default_position = (pygame.WINDOWPOS_CENTERED, pygame.WINDOWPOS_CENTERED)
cdef class GL2Draw:
def __init__(self, name):
@@ -124,9 +121,6 @@ cdef class GL2Draw:
# The shader cache,
self.shader_cache = None
# Has the position of this window ever been set?
self.ever_set_position = False
def get_texture_size(self):
"""
Returns the amount of memory locked up in textures.
@@ -148,7 +142,7 @@ cdef class GL2Draw:
if old_surface is not None:
maximized = old_surface.get_flags() & pygame.WINDOW_MAXIMIZED
else:
maximized = renpy.game.preferences.maximized
maximized = False
# Information about the virtual size.
vwidth, vheight = self.virtual_size
@@ -376,10 +370,6 @@ cdef class GL2Draw:
self.window = None
if self.window is None:
if renpy.game.preferences.maximized:
window_flags |= pygame.WINDOW_MAXIMIZED
try:
renpy.display.log.write("Windowed mode.")
self.window = pygame.display.set_mode((pwidth, pheight), window_flags)
@@ -450,35 +440,22 @@ cdef class GL2Draw:
# Are we in fullscreen mode?
fullscreen = bool(pygame.display.get_window().get_window_flags() & (pygame.WINDOW_FULLSCREEN_DESKTOP | pygame.WINDOW_FULLSCREEN))
# Are we maximized?
maximized = bool(pygame.display.get_window().get_window_flags() & pygame.WINDOW_MAXIMIZED)
# See if we've ever set the screen position, and if not, center the window.
if not fullscreen and not maximized:
if not self.ever_set_position:
self.ever_set_position = True
pygame.display.get_window().set_position(default_position)
# Get the size of the created screen.
pwidth, pheight = renpy.display.core.get_size()
renpy.game.preferences.fullscreen = fullscreen
renpy.game.interface.fullscreen = fullscreen
vwidth, vheight = self.virtual_size
self.physical_size = (pwidth, pheight)
self.drawable_size = pygame.display.get_drawable_size()
renpy.display.log.write("Screen sizes: virtual=%r physical=%r drawable=%r" % (self.virtual_size, self.physical_size, self.drawable_size))
# Update the preferences.
renpy.game.preferences.fullscreen = fullscreen
renpy.game.interface.fullscreen = fullscreen
if not fullscreen:
renpy.game.preferences.maximized = maximized
if not fullscreen and not maximized:
renpy.game.preferences.physical_size = self.get_physical_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)
else:
@@ -565,12 +542,8 @@ cdef class GL2Draw:
width = max(width, 256)
height = max(height, 256)
if pygame.display.get_window().get_window_flags() & pygame.WINDOW_FULLSCREEN:
maximized = renpy.game.preferences.maximized
else:
maximized = False
pygame.display.get_window().resize((width, height), opengl=True, fullscreen=fullscreen, maximized=maximized)
pygame.display.get_window().restore()
pygame.display.get_window().resize((width, height), opengl=True, fullscreen=fullscreen)
def update(self, force=False):
"""
@@ -595,18 +568,6 @@ cdef class GL2Draw:
Called when terminating the use of the OpenGL context.
"""
global default_position
# Are we in fullscreen mode?
fullscreen = bool(pygame.display.get_window().get_window_flags() & (pygame.WINDOW_FULLSCREEN_DESKTOP | pygame.WINDOW_FULLSCREEN))
# Are we maximized?
maximized = bool(pygame.display.get_window().get_window_flags() & pygame.WINDOW_MAXIMIZED)
# See if we've ever set the screen position, and if not, center the window.
if not fullscreen and not maximized:
default_position = pygame.display.get_position()
self.kill_textures()
if self.texture_loader is not None:
@@ -650,14 +611,11 @@ cdef class GL2Draw:
# Generate the framebuffer.
glGenFramebuffers(1, &self.fbo)
glGenFramebuffers(1, &self.fbo_1px)
glGenRenderbuffers(1, &self.color_renderbuffer)
glGenRenderbuffers(1, &self.color_renderbuffer_1px)
if renpy.config.depth_size:
glGenRenderbuffers(1, &self.depth_renderbuffer)
glGenRenderbuffers(1, &self.depth_renderbuffer_1px)
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max_texture_size)
glGetIntegerv(GL_MAX_RENDERBUFFER_SIZE, &max_renderbuffer_size)
@@ -684,7 +642,6 @@ cdef class GL2Draw:
self.texture_loader.max_texture_width = width
self.texture_loader.max_texture_height = height
# Full-size fbo.
self.change_fbo(self.fbo)
glBindRenderbuffer(GL_RENDERBUFFER, self.color_renderbuffer)
@@ -715,37 +672,6 @@ cdef class GL2Draw:
GL_RENDERBUFFER,
self.depth_renderbuffer)
# 1px fbo.
self.change_fbo(self.fbo_1px)
glBindRenderbuffer(GL_RENDERBUFFER, self.color_renderbuffer_1px)
glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA8, 1, 1)
glFramebufferRenderbuffer(
GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0,
GL_RENDERBUFFER,
self.color_renderbuffer_1px)
if renpy.config.depth_size:
glBindRenderbuffer(GL_RENDERBUFFER, self.depth_renderbuffer_1px)
if self.gles:
if renpy.config.depth_size >= 24:
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, 1, 1)
else:
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, 1, 1)
else:
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, 1, 1)
glFramebufferRenderbuffer(
GL_FRAMEBUFFER,
GL_DEPTH_ATTACHMENT,
GL_RENDERBUFFER,
self.depth_renderbuffer_1px)
glBindRenderbuffer(GL_RENDERBUFFER, default_renderbuffer)
self.change_fbo(self.default_fbo)
@@ -754,20 +680,12 @@ cdef class GL2Draw:
self.change_fbo(self.default_fbo)
# Full-size fbo.
glDeleteFramebuffers(1, &self.fbo)
glDeleteRenderbuffers(1, &self.color_renderbuffer)
if renpy.config.depth_size:
glDeleteRenderbuffers(1, &self.depth_renderbuffer)
# 1px fbo.
glDeleteFramebuffers(1, &self.fbo_1px)
glDeleteRenderbuffers(1, &self.color_renderbuffer_1px)
if renpy.config.depth_size:
glDeleteRenderbuffers(1, &self.depth_renderbuffer_1px)
def can_block(self):
"""
@@ -1022,7 +940,7 @@ cdef class GL2Draw:
self.load_all_textures(what)
# Switch to the right FBO, and the right viewport.
self.change_fbo(self.fbo_1px)
self.change_fbo(self.fbo)
# Set up the viewport.
glViewport(0, 0, 1, 1)
@@ -1231,7 +1149,7 @@ cdef class GL2DrawingContext:
"""
cdef float halfwidth
cdef float halfheight
cdef float halfheigh
# This is the equivalent of projecting (0, 0, 0, 1), and getting x and y.
cdef float sx = transform.xdw
@@ -1257,6 +1175,9 @@ cdef class GL2DrawingContext:
if model.reverse is not IDENTITY:
transform = transform * model.reverse
if properties["pixel_perfect"]:
transform = self.correct_pixel_perfect(transform)
# If a clip polygon is in place, clip the mesh with it.
if clip_polygon is not None:
@@ -1350,13 +1271,10 @@ cdef class GL2DrawingContext:
has_reverse = (r.reverse is not None) and (r.reverse is not IDENTITY)
if r.properties and r.properties.get("pixel_perfect", False) and properties["pixel_perfect"] is None:
transform = self.correct_pixel_perfect(transform)
if has_reverse or r.properties:
properties = self.merge_properties(properties, r.properties)
if has_reverse:
if has_reverse and (properties["pixel_perfect"] is None):
properties["pixel_perfect"] = False
if r.shaders is not None:
+8 -8
View File
@@ -8,11 +8,11 @@ cdef class AttributeLayout:
# A map from a string giving the name of the attribute to the
# offset of the attribute.
cdef public dict offset
cdef dict offset
# The number of floats that make up the attributes for a single
# point.
cdef public int stride
cdef int stride
cdef class Mesh:
"""
@@ -21,28 +21,28 @@ cdef class Mesh:
"""
# The number of points that space has been allocated for.
cdef public int allocated_points
cdef int allocated_points
# The number of points that are in use.
cdef public int points
cdef int points
# The data corresponding to each point.
cdef float *point_data
# The number of floats corresponding to each point.
cdef public int point_size
cdef int point_size
# An AttributeLayout object controlling how attributes are stored.
cdef public AttributeLayout layout
cdef AttributeLayout layout
# The non-geometry attribute data. This is allocated_points * attribute_per_point in size.
cdef float *attribute
# The number of triangles that spaces has been allocated for.,
cdef public int allocated_triangles
cdef int allocated_triangles
# The number of triangles that are in use.
cdef public int triangles
cdef int triangles
# The triangle data, where each triangle consists of the index of three
# points. This is 3 * allocated_triangles in size.
-74
View File
@@ -32,80 +32,6 @@ TEXTURE_LAYOUT.add_attribute("a_tex_coord", 2)
cdef class Mesh:
def set_geometry_data(self, geometry):
"""
Sets the geometry data corresponding to this mesh.
`geometry`
This should be a sequence of floats, which are interpreted
as x, y for a Mesh2 or x, y, z for a Mesh3. The length of
the sequence must be a multiple of the point size of the
mesh, and must be less than or equal to the number of
allocated points.
This sets the `points` attribute of the mesh to the number of
points in the geometry.
"""
points = len(geometry) // self.point_size
if points > self.allocated_points:
raise Exception("Geometry contains too much data.")
self.points = points
cdef int i
cdef int len_geometry = len(geometry)
for 0 <= i < len_geometry:
self.point_data[i] = geometry[i]
def set_attribute_data(self, attributes):
"""
Sets the attribute data corresponding to this mesh.
`attributes`
This should be a list of floats, with the first
layout.stride floats corresponding to the first point, the
next layout.stride floats corresponding to the second point,
and so on. The length of the sequence must be a multiple of
the stride of the layout, and must be less than or equal to
the number of allocated points.
"""
cdef int i
cdef int len_attributes = len(attributes)
if len_attributes > self.allocated_points * self.layout.stride:
raise Exception("Attributes contains too much data.")
for 0 <= i < len_attributes:
self.attribute[i] = attributes[i]
def set_triangle_data(self, triangles):
"""
Sets the triangle data corresponding to this mesh.
`triangles`
This should be a list of integers, with each triple
corresponding to a triangle. The length of the sequence
must be a multiple of 3, and must be less than or equal to
the number of allocated triangles.
This sets the `triangles` attribute of the mesh to the number
of triangles given here.
"""
cdef int i
cdef int len_triangles = len(triangles)
if len_triangles > self.allocated_triangles * 3:
raise Exception("Triangles contains too much data.")
self.triangles = len_triangles // 3
for 0 <= i < len_triangles:
self.triangle[i] = triangles[i]
def get_triangles(self):
"""
Returns the triangles that make up this mesh as triples.
+1 -1
View File
@@ -105,7 +105,7 @@ class ShaderPart(object):
used.add(m.group(0))
for l in variables.split("\n"):
l = l.partition("//")[0].strip(' ;')
l = l.strip(' ;')
a = l.split()
if not a:
+1 -1
View File
@@ -37,7 +37,7 @@ cdef class TextureLoader:
# The total size (in bytes) of all the textures that have been allocated
# but not deallocated.
cdef object total_texture_size
cdef int total_texture_size
# The program used for fast texture loading
cdef Program ftl_program

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