Compare commits

...

47 Commits

Author SHA1 Message Date
Tom Rothamel ddaf9f3de3 Check in keywords. 2018-11-08 02:02:15 -05:00
Tom Rothamel 8900d6f3df Update changelog. 2018-11-07 20:48:46 -05:00
Tom Rothamel 2e2f2ea460 Merge pull request #1625 from Beuc/patch-4
Fixes to French translation
2018-11-07 20:28:39 -05:00
Tom Rothamel adb928e234 Merge pull request #1624 from Beuc/patch-3
Fix missing spaces in the_question's screens.rpy
2018-11-07 20:27:56 -05:00
Beuc 53261a7a52 Fixes to French translation 2018-11-07 17:06:17 +01:00
Beuc 2e6f61e673 Fix missing spaces in the_question's screens.rpy 2018-11-07 16:04:31 +01:00
Tom Rothamel 1392cd9dad Allow FilePageNext and FilePagePrevious to choose if they go to auto and quick.
Fixes #1621.
2018-11-07 02:09:49 -05:00
Tom Rothamel c2be31d5de Merge pull request #1622 from Andykl/Transalion_Fix
Fix typos in Russian translate
2018-11-06 12:24:38 -05:00
Andy_kl e419711493 Fix typos in Russian translate 2018-11-06 17:37:43 +03:00
Tom Rothamel c734c5cda1 Merge pull request #1619 from Andykl/Launcher_Adds
Updated working of input screen for launcher
2018-11-05 22:00:28 -05:00
Tom Rothamel bde048b359 Merge pull request #1620 from Andykl/Rework_variable_viewer
Added button which hides deleted variables to the Variable Viewer.
2018-11-04 18:50:08 -05:00
Tom Rothamel 9878ccec4b Store the game version in _version and the json. 2018-11-04 17:41:10 -05:00
Andy_kl 30d8911abf Added button which hides deleted variables to the Variable Viewer. 2018-11-04 23:57:23 +03:00
Tom Rothamel d9ab291a68 Move absolute into minstore and mark as pure. 2018-11-04 12:53:39 -05:00
Tom Rothamel 1bc29461d1 Movie can now take a single movie with color and mask data side by side.
This should prevent movie sprites from going out of sync, by
taking both the color and mask data from a single file.

Fixes #1515.
2018-11-03 17:39:40 -04:00
Tom Rothamel f2e62c571c Document that screens can take positional arguments. 2018-11-03 17:39:40 -04:00
Andy_kl 0208328307 Updated russian translate 2018-11-03 21:38:27 +03:00
Andy_kl 3ee71e9b0d Added text-tag comment for translators. 2018-11-03 21:37:42 +03:00
Andy_kl d83788fa23 Added uppercase letters for translation name 2018-11-03 20:58:21 +03:00
Andy_kl 3c2cebacef Added underscore and space in the names of projects and files 2018-11-03 20:54:17 +03:00
Tom Rothamel 834b9fa1d1 Define centerd and vcentered normally.
Fixes #1347.
2018-11-03 13:17:51 -04:00
Tom Rothamel 9dd55e7b66 Merge pull request #1618 from Andykl/Fix_1161
Fix #1161
2018-11-03 13:16:57 -04:00
Tom Rothamel 857a8a65a2 Update sponsor docs. 2018-11-03 13:04:35 -04:00
Andy_kl dc58e6e8c8 Revert "Fix #1161"
This reverts commit c6dd267772.
2018-11-03 20:00:47 +03:00
Andy_kl 7f8101e2ee Revert "Fix #1045"
This reverts commit c2895f465c.
2018-11-03 19:59:07 +03:00
Andy_kl f7b389a5bc Updated working of input screen 2018-11-03 09:52:07 +03:00
Andy_kl c2895f465c Fix #1045 2018-11-03 06:43:08 +03:00
Andy_kl 075ba4bc49 Fix #1347 2018-11-03 06:41:36 +03:00
Andy_kl c6dd267772 Fix #1161 2018-11-03 04:53:58 +03:00
Tom Rothamel 06443a5f2e Fix typo. 2018-11-02 17:15:29 -04:00
Tom Rothamel ed564397d2 Merge pull request #1615 from Andykl/Fix_Issues
Fix issues with quick_menu on phones and performance encoding.
2018-11-01 22:12:47 -04:00
Andy_kl 66ef5ba2cf Fix #1360 2018-11-01 20:47:17 +03:00
Andy_kl fed3430d76 Fix #1603 2018-11-01 19:12:25 +03:00
Tom Rothamel cca4bf016c Set the compatibility channel looping properly. 2018-10-31 23:34:10 -04:00
Tom Rothamel 432ba06a48 Fix audio crash in moonlight walks. 2018-10-30 23:17:44 -04:00
Tom Rothamel 92fb4098b2 Update changelog. 2018-10-30 22:48:22 -04:00
Tom Rothamel a4340f7798 Merge pull request #1574 from Andykl/Drag_Changes
Extension of the Drag'n'Drop functional
2018-10-30 21:52:18 -04:00
Tom Rothamel 80ec5ad31e Merge pull request #1584 from Andykl/UserStatement_change
Changes in register_statement
2018-10-30 21:52:00 -04:00
Tom Rothamel df4d653b86 Merge pull request #1600 from vollschauer/master
Add delay to renpy.sound.set_volume
2018-10-30 21:50:37 -04:00
Andy_kl bcfa6d126b Doc this 2018-10-31 03:39:34 +03:00
Unknown d521e79b46 Add delay to renpy.sound.set_volume 2018-10-21 20:17:24 +02:00
Andy_kl 1789b5a2ca More correctly check of the block value 2018-09-29 20:50:32 +03:00
Andy_kl bc121ac0cc Added "possible" value for block argument 2018-09-29 20:27:50 +03:00
Andy_kl a2e8a536b4 Added init_priority for register_statement 2018-09-29 20:07:29 +03:00
Andy_kl 715899ade4 Added drop_allowable property for Drag class 2018-09-20 07:13:49 +03:00
Andy_kl d829d1ab2f Added min_overlap property 2018-09-20 04:51:16 +03:00
Andy_kl 2069612eff Fix typo 2018-09-20 04:11:30 +03:00
40 changed files with 540 additions and 372 deletions
+10 -13
View File
@@ -1421,16 +1421,18 @@ screen quick_menu():
zorder 100
hbox:
style_prefix "quick"
if quick_menu:
xalign 0.5
yalign 1.0
hbox:
style_prefix "quick"
textbutton _("Back") action Rollback()
textbutton _("Skip") action Skip() alternate Skip(fast=True, confirm=True)
textbutton _("Auto") action Preference("auto-forward", "toggle")
textbutton _("Menu") action ShowMenu()
xalign 0.5
yalign 1.0
textbutton _("Back") action Rollback()
textbutton _("Skip") action Skip() alternate Skip(fast=True, confirm=True)
textbutton _("Auto") action Preference("auto-forward", "toggle")
textbutton _("Menu") action ShowMenu()
style window:
@@ -1512,8 +1514,3 @@ style slider_pref_vbox:
style slider_pref_slider:
variant "small"
xsize gui.scale(600)
+23 -16
View File
@@ -23,24 +23,32 @@ label add_file:
python hide:
import os
import codecs
filename = ""
while True:
filename = interface.input(
_("FILENAME"),
_("Enter the name of the script file to create."),
allow=interface.FILENAME_LETTERS,
cancel=Jump("navigation"),
default=filename,
)
filename = filename.strip()
if not filename:
interface.error(_("The file name may not be empty."), label=None)
continue
filename = interface.input(_("FILENAME"), _("Enter the name of the script file to create."), filename="withslash", cancel=Jump("navigation"))
if "." in filename and not filename.endswith(".rpy"):
interface.error(_("The filename must have the .rpy extension."), label=None)
continue
elif "." not in filename:
filename += ".rpy"
if "." in filename and not filename.endswith(".rpy"):
interface.error(_("The filename must have the .rpy extension."), label="navigation")
elif "." not in filename:
filename += ".rpy"
path = os.path.join(project.current.gamedir, filename)
dir = os.path.dirname(path)
path = os.path.join(project.current.gamedir, filename)
dir = os.path.dirname(path)
if os.path.exists(path):
interface.error(_("The file already exists."), label="navigation")
contents = u"\uFEFF"
contents += _("# Ren'Py automatically loads all script files ending with .rpy. To use this\n# file, define a label and jump to it from another file.\n")
contents += "\n"
if os.path.exists(path):
interface.error(_("The file already exists."), label=None)
continue
try:
os.makedirs(dir)
@@ -54,4 +62,3 @@ label add_file:
f.write(contents.encode("utf-8"))
jump navigation_refresh
+28 -30
View File
@@ -327,25 +327,6 @@ label new_gui_project:
python:
gui_new = True
project_name = interface.input(
_("PROJECT NAME"),
_("Please enter the name of your project:"),
filename=True,
cancel=Jump("front_page"))
project_name = project_name.strip()
if not project_name:
interface.error(_("The project name may not be empty."))
project_dir = os.path.join(persistent.projects_directory, project_name)
if project.manager.get(project_name) is not None:
interface.error(_("[project_name!q] already exists. Please choose a different project name."), project_name=project_name)
if os.path.exists(project_dir):
interface.error(_("[project_dir!q] already exists. Please choose a different project name."), project_dir=project_dir)
gui_replace_images = True
gui_replace_code = True
gui_update_code = True
@@ -369,20 +350,37 @@ label gui_project_size:
if gui_size == "custom":
gui_width = ""
while True:
gui_width = interface.input(
_("WIDTH"),
_("Please enter the width of your game, in pixels."),
cancel=Jump("front_page"),
allow=interface.DIGITS_LETTERS,
)
gui_width = interface.input(_("WIDTH"), _("Please enter the width of your game, in pixels."), cancel=Jump("front_page"))
try:
gui_width = int(gui_width)
except:
interface.error(_("The width must be a number."), label=None)
continue
break
try:
gui_width = int(gui_width)
except:
interface.error(_("The width must be a number."))
gui_height = ""
while True:
gui_height = interface.input(
_("HEIGHT"),
_("Please enter the height of your game, in pixels."),
cancel=Jump("front_page"),
allow=interface.DIGITS_LETTERS,
)
gui_height = interface.input(_("HEIGHT"), _("Please enter the height of your game, in pixels."), cancel=Jump("front_page"))
try:
gui_height = int(gui_height)
except:
interface.error(_("The height must be a number."))
try:
gui_height = int(gui_height)
except:
interface.error(_("The height must be a number."), label=None)
continue
break
gui_size = (gui_width, gui_height)
+22 -6
View File
@@ -251,7 +251,12 @@ screen launcher_input:
add SPACER
input style "l_default" value ScreenVariableInputValue("value", returnable=True) size 24 xalign 0.5 color INPUT_COLOR
input style "l_default":
value ScreenVariableInputValue("value", returnable=True)
size 24
xalign 0.5
color INPUT_COLOR
allow allow
if filename:
add SPACER
@@ -384,7 +389,13 @@ init python in interface:
yield
store._ignore_action = Jump("front_page")
def input(title, message, filename=False, sanitize=True, cancel=None, default=""):
import string
DIGITS_LETTERS = string.digits
PROJECT_LETTERS = DIGITS_LETTERS + string.ascii_letters + " _"
FILENAME_LETTERS = PROJECT_LETTERS + "\\/"
TRANSLATE_LETTERS = string.ascii_letters + "_"
def input(title, message, filename=False, sanitize=True, cancel=None, allow=None, default=""):
"""
Requests typewritten input from the user.
"""
@@ -393,7 +404,15 @@ init python in interface:
while True:
rv = renpy.call_screen("launcher_input", title=title, message=message, filename=filename, cancel=cancel, default=rv)
rv = renpy.call_screen(
"launcher_input",
title=title,
message=message,
filename=filename or (allow in [PROJECT_LETTERS, FILENAME_LETTERS]),
allow=allow,
cancel=cancel,
default=rv
)
if sanitize:
if ("[" in rv) or ("{" in rv):
@@ -507,6 +526,3 @@ init python in interface:
"""
return common(_("CHOICE"), store.QUESTION_COLOR, message, choices=choices, selected=selected, **kwargs)
+39 -34
View File
@@ -62,28 +62,52 @@ label new_project:
if persistent.projects_directory is None:
$ interface.error(_("The projects directory could not be set. Giving up."))
if not persistent.legacy:
python:
if persistent.legacy:
python:
check_language_support()
gui_kind = interface.choice(
_("Which interface would you like to use? The new GUI has a modern look, supports wide screens and mobile devices, and is easier to customize. Legacy themes might be necessary to work with older example code.\n\n[language_support!t]\n\nIf in doubt, choose the new GUI, then click Continue on the bottom-right."),
[ ( 'new_gui_project', _("New GUI Interface") ), ( 'new_theme_project', _("Legacy Theme Interface")) ],
"new_gui_project",
cancel=Jump("front_page"),
)
else:
new_project_language = (_preferences.language or "english").title()
gui_kind = "new_gui_project"
# When translating this, feel free to replace [new_project_language] with the translation of your language.
$ interface.info(_("You will be creating an [new_project_language] language project. Change the launcher language in preferences to create a project in another language."))
jump new_gui_project
# When translating this, feel free to replace [new_project_language] with the translation of your language.
interface.info(_("You will be creating an [new_project_language]{#this substitution may be localized} language project. Change the launcher language in preferences to create a project in another language."))
python:
check_language_support()
gui_kind = interface.choice(
_("Which interface would you like to use? The new GUI has a modern look, supports wide screens and mobile devices, and is easier to customize. Legacy themes might be necessary to work with older example code.\n\n[language_support!t]\n\nIf in doubt, choose the new GUI, then click Continue on the bottom-right."),
[ ( 'new_gui_project', _("New GUI Interface") ), ( 'new_theme_project', _("Legacy Theme Interface")) ],
"new_gui_project",
cancel=Jump("front_page"),
project_name = ""
while True:
project_name = interface.input(
_("PROJECT NAME"),
_("Please enter the name of your project:"),
allow=interface.PROJECT_LETTERS,
cancel=Jump("front_page"),
default=project_name,
)
renpy.jump(gui_kind)
project_name = project_name.strip()
if not project_name:
interface.error(_("The project name may not be empty."), label=None)
continue
project_dir = os.path.join(persistent.projects_directory, project_name)
if project.manager.get(project_name) is not None:
interface.error(_("[project_name!q] already exists. Please choose a different project name."), project_name=project_name, label=None)
continue
if os.path.exists(project_dir):
interface.error(_("[project_dir!q] already exists. Please choose a different project name."), project_dir=project_dir, label=None)
continue
break
jump expression gui_kind
screen select_template:
@@ -125,25 +149,6 @@ screen select_template:
label new_theme_project:
python hide:
project_name = interface.input(
_("PROJECT NAME"),
_("Please enter the name of your project:"),
filename=True,
cancel=Jump("front_page"))
project_name = project_name.strip()
if not project_name:
interface.error(_("The project name may not be empty."))
project_dir = os.path.join(persistent.projects_directory, project_name)
if project.manager.get(project_name) is not None:
interface.error(_("[project_name!q] already exists. Please choose a different project name."), project_name=project_name)
if os.path.exists(project_dir):
interface.error(_("[project_dir!q] already exists. Please choose a different project name."), project_dir=project_dir)
if len(project.manager.templates) == 1:
template = project.manager.templates[0]
else:
+1 -2
View File
@@ -1253,7 +1253,7 @@ translate indonesian strings:
new "Navigasi: [project.current.display_name!q]"
# new_project.rpy:71
old "You will be creating an [new_project_language] language project. Change the launcher language in preferences to create a project in another language."
old "You will be creating an [new_project_language]{#this substitution may be localized} language project. Change the launcher language in preferences to create a project in another language."
new "Kamu akan membuat bahasa proyek : [new_project_language]. Ganti bahasa launcher di pengaturan untuk membuat proyek dalam bahasa lain."
# preferences.rpy:187
@@ -1271,4 +1271,3 @@ translate indonesian strings:
# translations.rpy:343
old "Extract Dialogue: [project.current.display_name!q]"
new "Extrak Dialog: [project.current.display_name!q]"
+1 -2
View File
@@ -1221,7 +1221,7 @@ translate japanese strings:
new "ナビゲーション: [project.current.display_name!q]"
# new_project.rpy:71
old "You will be creating an [new_project_language] language project. Change the launcher language in preferences to create a project in another language."
old "You will be creating an [new_project_language]{#this substitution may be localized} language project. Change the launcher language in preferences to create a project in another language."
new "日本語のプロジェクトを作成します。別の言語のプロジェクトを作成するには、設定でランチャーの言語を変更してください。"
# preferences.rpy:187
@@ -1321,4 +1321,3 @@ translate japanese strings:
# front_page.rpy:221
old "Actions"
new "アクション"
+1 -2
View File
@@ -913,7 +913,7 @@
new "Direktori projek tidak boleh ditetapkan. Putus asa."
# new_project.rpy:71
old "You will be creating an [new_project_language] language project. Change the launcher language in preferences to create a project in another language."
old "You will be creating an [new_project_language]{#this substitution may be localized} language project. Change the launcher language in preferences to create a project in another language."
new "Anda akan mencipta projek bahasa [new_project_language]. Tukar bahasa pelancar dalam menu keutamaan untuk mencipta projek dalam bahasa yang lain."
# new_project.rpy:79
@@ -1263,4 +1263,3 @@
# updater.rpy:201
old "Proceed"
new "Teruskan"
+1 -2
View File
@@ -1130,7 +1130,7 @@ translate piglatin strings:
new "Hetay rojectspay irectoryday ouldcay otnay ebay etsay. Ivinggay upay."
# new_project.rpy:71
old "You will be creating an [new_project_language] language project. Change the launcher language in preferences to create a project in another language."
old "You will be creating an [new_project_language]{#this substitution may be localized} language project. Change the launcher language in preferences to create a project in another language."
new "Ouyay illway ebay reatingcay anay [new_project_language] anguagelay rojectpay. Hangecay hetay auncherlay anguagelay inay referencespay otay reatecay aay rojectpay inay anotheray anguagelay."
# new_project.rpy:79
@@ -1484,4 +1484,3 @@ translate piglatin strings:
# updater.rpy:188
old "Fetching the list of update channels"
new "Etchingfay hetay istlay ofay updateay annelschay"
+7
View File
@@ -813,3 +813,10 @@ translate russian strings:
old "return"
new "вернуться"
# _developer\developer.rpym:154
old "Hide deleted"
new "Скрыть удалённые"
# _developer\developer.rpym:154
old "Show deleted"
new "Показать удалённые"
+15 -7
View File
@@ -21,6 +21,10 @@ translate russian strings:
old "The filename must have the .rpy extension."
new "Имя должно иметь расширение .rpy."
# add_file.rpy:37
old "The file name may not be empty."
new "Имя файла не может быть пустым."
# add_file.rpy:39
old "The file already exists."
new "Файл уже существует."
@@ -31,11 +35,11 @@ translate russian strings:
# android.rpy:30
old "To build Android packages, please download RAPT, unzip it, and place it into the Ren'Py directory. Then restart the Ren'Py launcher."
new "Чтобы построить Android-пакет, пожалуйста, загрузите RAPT, разархивируйте его и поместить в директорию Ren'Py. Затем перезагрузите лаунчер Ren'Py."
new "Чтобы построить Android-пакет, пожалуйста, загрузите RAPT, разархивируйте его, и поместите в директорию Ren'Py. Затем перезагрузите лаунчер Ren'Py."
# android.rpy:31
old "A 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 требуется инструментарий разработки 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."
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."
@@ -215,7 +219,7 @@ translate russian strings:
# androidstrings.rpy:17
old "The build seems to have failed."
new "Ой, ошибка со сборкой приключилась..."
new "Похоже, сборка провалилась."
# androidstrings.rpy:18
old "Launching app."
@@ -225,6 +229,10 @@ translate russian strings:
old "The build seems to have succeeded."
new "Кажется, сборка прошла успешно!"
# androidstrings.rpy:20
old "The armeabi-v7a version works on most phones on tablets, while the x86_64 version works on the simulator and chromebooks."
new "Версия armeabi-v7a работает на большинстве смартфонов и планшетов, а версия x86_64 требуется для симуляторов и хромбуков."
# androidstrings.rpy:20
old "What is the full name of your application? This name will appear in the list of installed applications."
new "Каким будет полное имя вашего приложения? Это имя будет представлено в списке установленных приложений."
@@ -367,7 +375,7 @@ translate russian strings:
# androidstrings.rpy:55
old "Do you accept the Android SDK Terms and Conditions?"
new "Вы принимаете условияя и положения пользования Android SDK?"
new "Вы принимаете условия и положения пользования Android SDK?"
# androidstrings.rpy:56
old "I'm downloading the Android SDK. This might take a while."
@@ -1146,8 +1154,8 @@ translate russian strings:
new "Директория проектов не может быть установлена. Сдаюсь."
# new_project.rpy:71
old "You will be creating an [new_project_language] language project. Change the launcher language in preferences to create a project in another language."
new "Вы создаёте проект на языке [new_project_language]. Чтобы создать проект на другом языке, измените язык лаунчера."
old "You will be creating an [new_project_language]{#this substitution may be localized} language project. Change the launcher language in preferences to create a project in another language."
new "Вы создаёте проект на русском языке. Чтобы создать проект на другом языке, измените язык лаунчера."
# new_project.rpy:79
old "Which interface would you like to use? The new GUI has a modern look, supports wide screens and mobile devices, and is easier to customize. Legacy themes might be necessary to work with older example code.\n\n[language_support!t]\n\nIf in doubt, choose the new GUI, then click Continue on the bottom-right."
@@ -898,7 +898,7 @@ translate simplified_chinese strings:
new "传统主题界面"
# new_project.rpy:71
old "You will be creating an [new_project_language] language project. Change the launcher language in preferences to create a project in another language."
old "You will be creating an [new_project_language]{#this substitution may be localized} language project. Change the launcher language in preferences to create a project in another language."
new "您将创建一个 [new_project_language] 语言的工程。要创建其他语言的工程,请在设置里更改启动器语言。"
# new_project.rpy:90
@@ -1248,4 +1248,3 @@ translate simplified_chinese strings:
# dmgcheck.rpy:50
old "This is probably because Ren'Py is running directly from a Macintosh drive image. To fix this, quit this launcher, copy the entire %s folder somewhere else on your computer, and run Ren'Py again."
new "这可能是由于 Ren'Py 直接从 Macintosh 磁盘镜像中运行导致的。要修复此问题,退出启动器,复制整个 %s 文件夹到您计算机的其他任意位置,并重新运行 Ren'Py。"
+1 -1
View File
@@ -914,7 +914,7 @@ translate spanish strings:
new "No se puede establecer el directorio de proyectos. Abandonando."
# new_project.rpy:71
old "You will be creating an [new_project_language] language project. Change the launcher language in preferences to create a project in another language."
old "You will be creating an [new_project_language]{#this substitution may be localized} language project. Change the launcher language in preferences to create a project in another language."
new "Vas a crear un proyecto en idioma [new_project_language]. Cambia el idioma del lanzador en preferencias para crear un proyecto en otro idioma."
# new_project.rpy:79
+1 -1
View File
@@ -116,7 +116,7 @@ screen translate:
value FieldInputValue(persistent, "translate_language")
size 24
color INPUT_COLOR
allow interface.TRANSLATE_LETTERS
# Left side.
frame:
style "l_indent"
+2 -2
View File
@@ -335,7 +335,7 @@ class Channel(object):
"""
# Update the channel volume.
vol = self.chan_volume * renpy.game.preferences.volumes[self.mixer]
vol = self.chan_volume * renpy.game.preferences.volumes.get(self.mixer, 1.0)
if vol != self.actual_volume:
renpysound.set_volume(self.number, vol)
@@ -343,7 +343,7 @@ class Channel(object):
# This should be set from something that checks to see if our
# mixer is muted.
force_stop = self.context.force_stop or (renpy.game.preferences.mute[self.mixer] and self.stop_on_mute)
force_stop = self.context.force_stop or (renpy.game.preferences.mute.get(self.mixer, False) and self.stop_on_mute)
if self.playing and force_stop:
renpysound.stop(self.number)
+2 -2
View File
@@ -58,8 +58,8 @@ set_mixer = renpy.audio.music.set_mixer
set_queue_empty_callback = renpy.audio.music.set_queue_empty_callback
def set_volume(volume, channel="sound"):
renpy.audio.music.set_volume(volume, 0, channel=channel)
def set_volume(volume, delay=0, channel="sound"):
renpy.audio.music.set_volume(volume, delay, channel=channel)
def set_pan(pan, delay, channel="sound"):
+40 -23
View File
@@ -748,26 +748,35 @@ init -1500 python:
class FilePageNext(Action, DictEquality):
"""
:doc: file_action
:doc: file_action
Goes to the next file page.
Goes to the next file page.
`max`
If set, this should be an integer that gives the number of
the maximum file page we can go to.
`max`
If set, this should be an integer that gives the number of
the maximum file page we can go to.
`wrap`
If true, we can go to the first page when on the last file page if max is set.
"""
`wrap`
If true, we can go to the first page when on the
last file page if `max` is set.
`auto`
If true and wrap is set, this can bring the player to
the page of automatic saves.
`quick`
If true and wrap is set, this can bring the player to
the page of automatic saves.
"""
alt = _("Next file page.")
def __init__(self, max=None, wrap=False):
def __init__(self, max=None, wrap=False, auto=True, quick=True):
page = persistent._file_page
if page == "auto":
if config.has_quicksave:
if config.has_quicksave and quick:
page = "quick"
else:
page = "1"
@@ -781,9 +790,9 @@ init -1500 python:
if max is not None:
if page > max:
if wrap:
if config.has_autosave:
if config.has_autosave and auto:
page = "auto"
elif config.has_quicksave:
elif config.has_quicksave and quick:
page = "quick"
else:
page = "1"
@@ -815,40 +824,48 @@ init -1500 python:
Goes to the previous file page, if possible.
`max`
If set, this should be an integer that gives the number of
the maximum file page we can go to. This is required to enable
wrap.
`max`
If set, this should be an integer that gives the number of
the maximum file page we can go to. This is required to enable
wrap.
`wrap`
If true, we can go to the last page when on the first file page if max is set.
`auto`
If true, this can bring the player to
the page of automatic saves.
`quick`
If true, this can bring the player to
the page of automatic saves.
`wrap`
If true, we can go to the last page when on the first file page if max is set.
"""
alt = _("Previous file page.")
def __init__(self, max=None, wrap=False):
def __init__(self, max=None, wrap=False, auto=True, quick=True):
if wrap and max is not None:
max = str(max)
else:
max = None
page = persistent._file_page
if page == "auto":
page = max
elif page == "quick":
if config.has_autosave:
if config.has_autosave and auto:
page = "auto"
else:
page = max
elif page == "1":
if config.has_quicksave:
if config.has_quicksave and quick:
page = "quick"
elif config.has_autosave:
elif config.has_autosave and auto:
page = "auto"
else:
page = max
+3
View File
@@ -221,3 +221,6 @@ init -1500 python:
init -1500:
image text = renpy.ParameterizedText(style="centered_text")
image vtext = renpy.ParameterizedText(style="centered_vtext")
# Set _version to the version when the game was first started.
default _version = config.version
+3 -9
View File
@@ -352,7 +352,7 @@ init -1400:
define irisout = CropMove(1.0, "irisout")
define irisin = CropMove(1.0, "irisin")
# Various uses of PushMove.
define pushright = PushMove(1.0, "pushright")
define pushleft = PushMove(1.0, "pushleft")
@@ -375,6 +375,8 @@ init -1400:
# The default narrator.
define _narrator = Character(None, kind=adv, what_style='say_thought')
define centered = Character(None, what_style="centered_text", window_style="centered_window")
define vcentered = Character(None, what_style="centered_vtext", window_style="centered_window")
init 1400 python:
if not hasattr(store, 'narrator'):
@@ -383,14 +385,6 @@ init 1400 python:
renpy.pure('narrator')
renpy.pure('name_only')
if not hasattr(store, 'centered'):
centered = Character(None, what_style="centered_text", window_style="centered_window")
if not hasattr(store, 'vcentered'):
vcentered = Character(None, what_style="centered_vtext", window_style="centered_window")
renpy.pure('centered')
renpy.pure('vcentered')
# This is necessary to ensure that config.default_transform works.
if config.default_transform:
config.default_transform._show()
+3 -1
View File
@@ -79,8 +79,10 @@ init 1600:
else:
for i, m in enumerate(mixers):
renpy.sound.set_mixer(i, m, default=True)
if m == 'music':
if i >= 3:
renpy.music.set_music(i, True, default=True)
else:
renpy.music.set_music(i, False, default=True)
+19 -7
View File
@@ -30,7 +30,7 @@ screen _developer:
modal True
frame:
style_group ""
style_prefix ""
has side "t c b":
spacing gui._scale(10)
@@ -74,7 +74,7 @@ screen _developer:
screen _image_attributes():
frame:
style_group ""
style_prefix ""
right_padding 0
has side "c b":
@@ -110,13 +110,19 @@ label _image_attributes:
return
screen _variable_viewer(entries):
screen _variable_viewer(all_entries, deleted_entries):
zorder 1010
modal True
default show_deleted = True
python:
if show_deleted:
entries = all_entries
else:
entries = [(n, v) for n, v in all_entries if n not in deleted_entries]
frame:
style_group ""
style_prefix ""
right_padding 0
has side "t c b":
@@ -144,6 +150,9 @@ screen _variable_viewer(entries):
textbutton _(u"Return"):
action Return(True)
if all_entries and deleted_entries:
textbutton (_(u"Hide deleted") if show_deleted else _(u"Show deleted")):
action ToggleScreenVariable("show_deleted")
label _debugger_screen:
@@ -157,6 +166,7 @@ label _debugger_screen:
aRepr.maxstring = 120
entries = [ ]
deleted_entries = set()
for sn, d in renpy.python.store_dicts.items():
@@ -181,11 +191,14 @@ label _debugger_screen:
name = (sn + "." + vn)[6:]
if vn not in d:
deleted_entries.add(name)
entries.append((name, value))
entries.sort(key=lambda e : e[0])
renpy.call_screen("_variable_viewer", entries=entries)
renpy.call_screen("_variable_viewer", all_entries=entries, deleted_entries=deleted_entries)
return
@@ -477,7 +490,7 @@ screen _image_location_picker(image_files):
default filter = ""
frame:
style_group ""
style_prefix ""
has side "t c b":
spacing gui._scale(10)
@@ -651,4 +664,3 @@ init python:
config.underlay.append(renpy.Keymap(
image_load_log = ToggleScreen("_image_load_log")
))
-2
View File
@@ -219,8 +219,6 @@ BarValue = renpy.ui.BarValue
Style = renpy.style.Style # @UndefinedVariable
absolute = renpy.display.core.absolute
NoRollback = renpy.python.NoRollback
+29 -5
View File
@@ -47,10 +47,11 @@ def default_drag_group():
return rv
def default_drag_joined(drag):
return [ (drag, 0, 0) ]
def default_drop_allowable(drop, drags):
return True
class Drag(renpy.display.core.Displayable, renpy.python.RevertableObject):
"""
@@ -168,6 +169,12 @@ class Drag(renpy.display.core.Displayable, renpy.python.RevertableObject):
If false, the default, the drag is dropped onto the droppable with
the largest degree of overlap.
`drop_allowable`
A callback that is called to determine whether this drop allow
the current drags dropped onto. It is called with two arguments.
The first is the Drag which determines its sensitivity.
The second is a list of Drags that are being dragged.
Except for `d`, all of the parameters are available as fields (with
the same name) on the Drag object. In addition, after the drag has
been rendered, the following fields become available:
@@ -177,7 +184,7 @@ class Drag(renpy.display.core.Displayable, renpy.python.RevertableObject):
`w`, `h`
The width and height of the Drag's child, in pixels.
"""
"""
focusable = True
@@ -198,6 +205,7 @@ class Drag(renpy.display.core.Displayable, renpy.python.RevertableObject):
drag_raise=True,
dragged=None,
dropped=None,
drop_allowable=default_drop_allowable,
drag_handle=(0.0, 0.0, 1.0, 1.0),
drag_joined=default_drag_joined,
clicked=None,
@@ -219,6 +227,7 @@ class Drag(renpy.display.core.Displayable, renpy.python.RevertableObject):
self.drag_raise = drag_raise
self.dragged = dragged
self.dropped = dropped
self.drop_allowable = drop_allowable
self.drag_handle = drag_handle
self.drag_joined = drag_joined
self.clicked = clicked
@@ -740,6 +749,11 @@ class DragGroup(renpy.display.layout.MultiBox):
All positional parameters to the DragGroup constructor should be
Drags, that are added to the DragGroup.
`min_overlap`
An integer which means the minimum number of pixels at the
overlap so that drop will be allow.
"""
_list_type = renpy.python.RevertableList
@@ -753,6 +767,9 @@ class DragGroup(renpy.display.layout.MultiBox):
replaces = properties.pop("replaces", None)
min_overlap = properties.pop("min_overlap", 0)
self.min_overlap = min_overlap
super(DragGroup, self).__init__(**properties)
if replaces is not None:
@@ -873,7 +890,11 @@ class DragGroup(renpy.display.layout.MultiBox):
overlap = rect_overlap_area(r1, r2)
if overlap >= max_overlap:
if (
overlap >= max_overlap and
overlap >= self.min_overlap and
c.drop_allowable(c, joined)
):
rv = c
max_overlap = overlap
@@ -898,8 +919,11 @@ class DragGroup(renpy.display.layout.MultiBox):
if c.x is None:
continue
if (x >= c.x and y >= c.y and
x < (c.x+c.w) and y < (c.y+c.h)):
if (
x >= c.x and y >= c.y and
x < (c.x + c.w) and y < (c.y + c.h) and
c.drop_allowable(c, joined)
):
return c
def get_children(self):
+35 -6
View File
@@ -137,7 +137,7 @@ def interact():
return fullscreen
def get_movie_texture(channel, mask_channel=None):
def get_movie_texture(channel, mask_channel=None, side_mask=False):
if not renpy.audio.music.get_playing(channel):
return None, False
@@ -145,16 +145,29 @@ def get_movie_texture(channel, mask_channel=None):
c = renpy.audio.music.get_channel(channel)
surf = c.read_video()
if mask_channel:
if side_mask:
if surf is not None:
w, h = surf.get_size()
w //= 2
mask_surf = surf.subsurface((w, 0, w, h))
surf = surf.subsurface((0, 0, w, h))
else:
mask_surf = None
elif mask_channel:
mc = renpy.audio.music.get_channel(mask_channel)
mask_surf = mc.read_video()
else:
mask_surf = None
if mask_channel:
if mask_surf is not None:
# Something went wrong with the mask video.
if surf and mask_surf:
if surf:
renpy.display.module.alpha_munge(mask_surf, surf, renpy.display.im.identity)
else:
surf = None
@@ -228,6 +241,16 @@ class Movie(renpy.display.core.Displayable):
file will be automatically played on `channel` when the Movie is
shown, and automatically stopped when the movie is hidden.
`side_mask`
If true, this tells Ren'Py to use the side-by-side mask mode for
the Movie. In this case, the movie is divided in half. The left
half is used for color information, while the right half is used
for alpha information. The width of the displayable is half the
width of the movie file.
Where possible, `side_mask` should be used over `mask` as it has
no chance of frames going out of sync.
`mask`
If given, this should be the path to a movie file that is used as
the alpha channel of this displayable. The movie file will be
@@ -282,6 +305,7 @@ class Movie(renpy.display.core.Displayable):
mask = None
mask_channel = None
side_mask = False
image = None
@@ -302,7 +326,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)
def __init__(self, fps=24, size=None, channel="movie", play=None, mask=None, mask_channel=None, image=None, play_callback=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, **properties):
super(Movie, self).__init__(**properties)
global auto_channel_serial
@@ -314,6 +338,9 @@ class Movie(renpy.display.core.Displayable):
self.channel = channel
self._play = play
if side_mask:
mask = None
self.mask = mask
if mask is None:
@@ -323,6 +350,8 @@ class Movie(renpy.display.core.Displayable):
else:
self.mask_channel = mask_channel
self.side_mask = side_mask
self.ensure_channel(self.channel)
self.ensure_channel(self.mask_channel)
@@ -357,7 +386,7 @@ class Movie(renpy.display.core.Displayable):
if self.size is None:
tex, _ = get_movie_texture(self.channel, self.mask_channel)
tex, _ = get_movie_texture(self.channel, self.mask_channel, self.side_mask)
if playing and (tex is not None):
width, height = tex.get_size()
+1 -1
View File
@@ -425,7 +425,7 @@ def save(slotname, extra_info='', mutate_flag=False):
screenshot = renpy.game.interface.get_screenshot()
json = { "_save_name" : extra_info, "_renpy_version" : list(renpy.version_tuple) }
json = { "_save_name" : extra_info, "_renpy_version" : list(renpy.version_tuple), "_version" : renpy.config.version }
for i in renpy.config.save_json_callbacks:
i(json)
+2
View File
@@ -49,6 +49,8 @@ from renpy.translation import translate_string as __ # @UnusedImport
from renpy.python import store_eval as eval
from renpy.display.core import absolute
def _(s):
"""
+3
View File
@@ -93,6 +93,8 @@ def analyze():
return
s = "\n"
s = s.encode("utf-8")
renpy.log.real_stdout.write(s)
renpy.display.log.write(s)
@@ -108,6 +110,7 @@ def analyze():
dt[3],
event.format(*args),
)
s = s.encode("utf-8")
renpy.log.real_stdout.write(s)
renpy.display.log.write(s)
+1
View File
@@ -52,6 +52,7 @@ pure_functions = {
# minstore.py
"_",
"_p",
"absolute",
# defaultstore.py
"ImageReference", "Image", "Frame", "Solid", "LiveComposite", "LiveCrop",
+2
View File
@@ -882,6 +882,7 @@ Keyword("droppable")
Keyword("drag_raise")
Keyword("dragged")
Keyword("dropped")
Keyword("drop_allowable")
Keyword("drag_handle")
Keyword("drag_joined")
Keyword("clicked")
@@ -893,6 +894,7 @@ add(ui_properties)
add(position_properties)
FunctionStatementParser("draggroup", "ui.draggroup", many)
Keyword("min_overlap")
add(ui_properties)
add(position_properties)
+2
View File
@@ -461,6 +461,7 @@ Keyword("droppable")
Keyword("drag_raise")
Keyword("dragged")
Keyword("dropped")
Keyword("drop_allowable")
Keyword("drag_handle")
Keyword("drag_joined")
Keyword("drag_offscreen")
@@ -473,6 +474,7 @@ Keyword("alternate")
Style("child")
DisplayableParser("draggroup", renpy.display.dragdrop.DragGroup, None, many, replaces=True)
Keyword("min_overlap")
DisplayableParser("mousearea", renpy.display.behavior.MouseArea, 0, replaces=True)
Keyword("hovered")
+43 -19
View File
@@ -32,7 +32,22 @@ registry = { }
parsers = renpy.parser.ParseTrie()
def register(name, parse=None, lint=None, execute=None, predict=None, next=None, scry=None, block=False, init=False, translatable=False, execute_init=None, label=None, warp=None): # @ReservedAssignment
def register(
name,
parse=None,
lint=None,
execute=None,
predict=None,
next=None,
scry=None,
block=False,
init=False,
translatable=False,
execute_init=None,
init_priority=0,
label=None,
warp=None,
):
"""
:doc: statement_register
:name: renpy.register_statement
@@ -48,7 +63,8 @@ def register(name, parse=None, lint=None, execute=None, predict=None, next=None,
When this is False, the statement does not expect a block. When True, it
expects a block, but leaves it up to the lexer to parse that block. If the
string "script", the block is interpreted as containing one or more
Ren'Py script language statements.
Ren'Py script language statements. If the string "possible", the
block expect condition is determined by the parse function.
`parse`
This is a function that takes a Lexer object. This function should parse the
@@ -99,21 +115,29 @@ def register(name, parse=None, lint=None, execute=None, predict=None, next=None,
`init`
True if this statement should be run at init-time. (If the statement
is not already inside an init block, it's automatically placed inside
an init 0 block.) This calls the execute function, in addition to the
an init block.) This calls the execute function, in addition to the
execute_init function.
`init_priority`
An integer that determines the priority of initialisation of init block.
"""
name = tuple(name.split())
registry[name] = dict(parse=parse,
lint=lint,
execute=execute,
execute_init=execute_init,
predict=predict,
next=next,
scry=scry,
label=label,
warp=warp)
registry[name] = dict(
parse=parse,
lint=lint,
execute=execute,
execute_init=execute_init,
predict=predict,
next=next,
scry=scry,
label=label,
warp=warp,
)
if block not in [True, False, "script", "possible"]:
raise Exception("Unknown \"block\" argument value: {}".format(block))
# The function that is called to create an ast.UserStatement.
def parse_user_statement(l, loc):
@@ -123,21 +147,21 @@ def register(name, parse=None, lint=None, execute=None, predict=None, next=None,
rv = renpy.ast.UserStatement(loc, l.text, l.subblock)
rv.translatable = translatable
if not block:
if block is False:
l.expect_noblock(" ".join(name) + " statement")
l.advance()
elif block is True:
l.expect_block(" ".join(name) + " statement")
elif block == "script":
l.expect_block(" ".join(name) + " statement")
rv.code_block = renpy.parser.parse_block(l.subblock_lexer())
l.advance()
else:
l.expect_block(" ".join(name) + " statement")
l.advance()
l.advance()
finally:
renpy.exports.pop_error_handler()
if init and not l.init:
rv = renpy.ast.Init(loc, [ rv ], 0)
rv = renpy.ast.Init(loc, [rv], init_priority + l.init_offset)
return rv
+21 -1
View File
@@ -31,6 +31,18 @@ emulation mode.
Ren'Py now better reports errors in text tags that require a value but are
not given one.
The new :var:`_version` variable indicates the version of the game itself
that was used when a new game is first created. This only stores the version
at game creation - after that, it's up to the creator to keep it updated.
The :func:`Movie` displayable now supports a new mode the color data and
alpha mask data are placed side-by-side in the same file. This prevents
issues where a main and mask movie could go out of sync.
The :func:`FilePageNext` and :func:`FilePagePrevious` functions now take
arguments that control if the they can bring the player to the auto or
quick save pages.
Translations
------------
@@ -39,6 +51,8 @@ system, and use it to set the language. Please see
:var:`config.enable_language_autodetect` and the :ref:`Translation <translation>`
documentation for how this works.
The French, German, Korean, and Russian translations have been updated.
Fixes
-----
@@ -53,10 +67,16 @@ if ``eileen happy`` exists and ``eileen happy unknown`` was shown, the
additional attribute would be ignored.
Lint has been improved to deal with images that take attributes that are
not in the image name, like layerd images.
not in the image name, like layered images.
Ren'Py generates choice menu images that are suitable for use on the phone.
Android Fixes
-------------
As Ren'Py's new Android support only worked well on a 64-bit version of
Java 8, we make that 64-bit requirement explicit.
.. _renpy-7.1.1:
File diff suppressed because one or more lines are too long
+10 -12
View File
@@ -1408,16 +1408,18 @@ screen quick_menu():
zorder 100
hbox:
style_prefix "quick"
if quick_menu:
xalign 0.5
yalign 1.0
hbox:
style_prefix "quick"
textbutton _("Back") action Rollback()
textbutton _("Skip") action Skip() alternate Skip(fast=True, confirm=True)
textbutton _("Auto") action Preference("auto-forward", "toggle")
textbutton _("Menu") action ShowMenu()
xalign 0.5
yalign 1.0
textbutton _("Back") action Rollback()
textbutton _("Skip") action Skip() alternate Skip(fast=True, confirm=True)
textbutton _("Auto") action Preference("auto-forward", "toggle")
textbutton _("Menu") action ShowMenu()
style window:
@@ -1455,7 +1457,3 @@ style slider_pref_vbox:
style slider_pref_slider:
variant "small"
xsize 900
+1 -6
View File
@@ -1823,16 +1823,11 @@ Screen Statements
In addition to the screen statement, there are three Ren'Py script
language statements that involve screens.
Two of these statements take a keyword argument list. This is a Python
argument list, in parentheses, consisting of only keyword
arguments. Positional arguments, extra positional arguments (*), and
extra keyword arguments (**) are not allowed.
Show Screen
-----------
The ``show screen`` statement causes a screen to be shown. It takes an
screen name, and an optional argument list. If present, the arguments
screen name, and an optional Python argument list. If present, the arguments
are used to initialize the scope of the screen.
The show screen statement takes an optional ``nopredict`` keyword, that
+148 -148
View File
@@ -1,187 +1,187 @@
<ul class='sponsors'>
<li> __skwrl__ (6.99.14.37.1.1)
<li> Adia Alderson (6.99.137.1.1)
<li> Aleema (6.99.137.1.1)
<li> <a href="http://alexdodge.net/" rel="nofollow">Alex Dodge</a> (6.99.147.1.1)
<li> <a href="https://rabidb.com/" rel="nofollow">AlexSSZ</a> (6.99.137.1.1)
<li> <a href="https://alic-szecsei.com" rel="nofollow">Alic Szecsei</a> (6.99.14.37.1.1)
<li> Anne Camlin (7.07.1.1)
<li> __skwrl__ (6.99.14.37.1.2)
<li> Adia Alderson (6.99.137.1.2)
<li> Aleema (6.99.137.1.2)
<li> <a href="http://alexdodge.net/" rel="nofollow">Alex Dodge</a> (6.99.147.1.2)
<li> <a href="https://rabidb.com/" rel="nofollow">AlexSSZ</a> (6.99.137.1.2)
<li> <a href="https://alic-szecsei.com" rel="nofollow">Alic Szecsei</a> (6.99.14.37.1.2)
<li> Anne Camlin (7.07.1.2)
<li> <a href="https://lemmasoft.renai.us/forums/viewtopic.php?f=51&t=34131" rel="nofollow">AR09FQF-AQ09FRF</a> (6.99.14.17.0)
<li> Asatiir (6.99.137.0)
<li> <a href="https://www.atwistedspirit.com/" rel="nofollow">ATwistedSpirit</a> (7.17.1.1)
<li> <a href="https://www.atwistedspirit.com/" rel="nofollow">ATwistedSpirit</a> (7.17.1.2)
<li> <a href="https://patchworkprincess.moe/" rel="nofollow">Azura (Vanessa Parker)</a> (7.07.1)
<li> <a href="https://www.youtube.com/channel/UC3Xm0sk-rRCtD-yVp64WPWQ" rel="nofollow">BadGamer</a> (6.99.14.37.1.1)
<li> <a href="https://www.youtube.com/channel/UC3Xm0sk-rRCtD-yVp64WPWQ" rel="nofollow">BadGamer</a> (6.99.14.37.1.2)
<li> Belfort and Bastion (6.99.137.1)
<li> Biotikos Development (6.99.137.1.1)
<li> Biotikos Development (6.99.137.1.2)
<li> Bob (6.99.137.0)
<li> <a href="https://bobcgames.tumblr.com" rel="nofollow">Bob Conway</a> (6.99.14.17.1.1)
<li> Bob Reus (7.17.1.1)
<li> Booom313's tinker corner (6.99.147.1.1)
<li> Boreas Bear (6.99.137.1.1)
<li> <a href="http://boyslaughplus.moe" rel="nofollow">Boys Laugh +</a> (6.99.137.1.1)
<li> <a href="https://bobcgames.tumblr.com" rel="nofollow">Bob Conway</a> (6.99.14.17.1.2)
<li> Bob Reus (7.17.1.2)
<li> Booom313's tinker corner (6.99.147.1.2)
<li> Boreas Bear (6.99.137.1.2)
<li> <a href="http://boyslaughplus.moe" rel="nofollow">Boys Laugh +</a> (6.99.137.1.2)
<li> Brett Douglas (6.99.146.99.14.3)
<li> Brimney (6.99.137.1.1)
<li> <a href="https://www.renpy.org/agegate?url=https://www.brunimultimedia.com" rel="nofollow">Bruni Multimedia</a> (6.99.147.1.1)
<li> Brimney (6.99.137.1.2)
<li> <a href="https://www.renpy.org/agegate?url=https://www.brunimultimedia.com" rel="nofollow">Bruni Multimedia</a> (6.99.147.1.2)
<li> <a href="http://www.bura.cl" rel="nofollow">BURA</a> (6.99.13)
<li> Cameron Woodard (6.99.14.37.1.1)
<li> Cara Hillstock (6.99.137.1.1)
<li> <a href="https://www.celebrityhunter.com.br" rel="nofollow">Celebrity Hunter</a> (7.17.1.1)
<li> Charlene Gilbert (6.99.137.1.1)
<li> <a href="http://charliethegoldfish.com" rel="nofollow">Charlie Francis Cassidy</a> (6.99.137.1.1)
<li> Chekhov's Ghost (7.17.1.1)
<li> Cherry Kiss Games (6.99.14.17.1.1)
<li> Chrysoula Tzavelas (6.99.137.1.1)
<li> <a href="https://cloverfirefly.itch.io" rel="nofollow">cloverfirefly</a> (6.99.137.1.1)
<li> CobaltCore (7.1.1)
<li> CobraPL (7.17.1.1)
<li> <a href="https://www.renpy.org/agegate?url=https://obscurasoft.com/" rel="nofollow">Coming Out On Top</a> (6.99.137.1.1)
<li> <a href="http://www.computerart.club/" rel="nofollow">computerart.club</a> (6.99.147.1.1)
<li> CookieNomNom (7.1.1)
<li> Crazy Cactus (6.99.14.37.1.1)
<li> <a href="https://www.renpy.org/agegate?url=http://cricketbat.me" rel="nofollow">cricketbat_</a> (7.07.1.1)
<li> Cameron Woodard (6.99.14.37.1.2)
<li> Cara Hillstock (6.99.137.1.2)
<li> <a href="https://www.celebrityhunter.com.br" rel="nofollow">Celebrity Hunter</a> (7.17.1.2)
<li> Charlene Gilbert (6.99.137.1.2)
<li> <a href="http://charliethegoldfish.com" rel="nofollow">Charlie Francis Cassidy</a> (6.99.137.1.2)
<li> Chekhov's Ghost (7.17.1.2)
<li> Cherry Kiss Games (6.99.14.17.1.2)
<li> Chrysoula Tzavelas (6.99.137.1.2)
<li> <a href="https://cloverfirefly.itch.io" rel="nofollow">cloverfirefly</a> (6.99.137.1.2)
<li> CobaltCore (7.1.17.1.2)
<li> CobraPL (7.17.1.2)
<li> <a href="https://www.renpy.org/agegate?url=https://obscurasoft.com/" rel="nofollow">Coming Out On Top</a> (6.99.137.1.2)
<li> <a href="http://www.computerart.club/" rel="nofollow">computerart.club</a> (6.99.147.1.2)
<li> CookieNomNom (7.1.17.1.2)
<li> Crazy Cactus (6.99.14.37.1.2)
<li> <a href="https://www.renpy.org/agegate?url=http://cricketbat.me" rel="nofollow">cricketbat_</a> (7.07.1.2)
<li> <a href="http://cultofape.com" rel="nofollow">CultOfApe</a> (6.99.147.0)
<li> Culture4Jam (6.99.137.1.1)
<li> Daniel Burns (7.17.1.1)
<li> Culture4Jam (6.99.137.1.2)
<li> Daniel Burns (7.17.1.2)
<li> <a href="http://dark-aii.net" rel="nofollow">Dark-Aii</a> (6.99.14.16.99.14.3)
<li> <a href="http://www.darksirengames.com" rel="nofollow">DarkSirenGames</a> (6.99.137.1.1)
<li> Darryl Taylor (7.07.1.1)
<li> David Koster (6.99.147.1.1)
<li> David Yingling (6.99.14.17.1.1)
<li> Dee (7.17.1.1)
<li> Denny Cheng (6.99.14.27.1.1)
<li> Dharker Studios Ltd (6.99.136.99.14, 7.1.1)
<li> <a href="http://coriginate.com" rel="nofollow">Ds110</a> (6.99.137.1.1)
<li> DuoDevelopers (7.1.1)
<li> E. William Brown (6.99.137.1.1)
<li> <a href="https://twitter.com/WC_EchoFrost" rel="nofollow">EchoFrost (Watercress)</a> (6.99.14.27.1.1)
<li> <a href="https://www.youtube.com/c/ElaineDoesCoding" rel="nofollow">ElaineDoesCoding</a> (7.07.1.1)
<li> eric chi hung ng (7.07.1.1)
<li> Euan 'Xolf' Robertson (6.99.137.1.1)
<li> <a href="http://www.darksirengames.com" rel="nofollow">DarkSirenGames</a> (6.99.137.1.2)
<li> Darryl Taylor (7.07.1.2)
<li> David Koster (6.99.147.1.2)
<li> David Yingling (6.99.14.17.1.2)
<li> Dee (7.17.1.2)
<li> Denny Cheng (6.99.14.27.1.2)
<li> Dharker Studios Ltd (6.99.136.99.14, 7.1.17.1.2)
<li> <a href="http://coriginate.com" rel="nofollow">Ds110</a> (6.99.137.1.2)
<li> DuoDevelopers (7.1.17.1.2)
<li> E. William Brown (6.99.137.1.2)
<li> <a href="https://twitter.com/WC_EchoFrost" rel="nofollow">EchoFrost (Watercress)</a> (6.99.14.27.1.2)
<li> <a href="https://www.youtube.com/c/ElaineDoesCoding" rel="nofollow">ElaineDoesCoding</a> (7.07.1.2)
<li> eric chi hung ng (7.07.1.2)
<li> Euan 'Xolf' Robertson (6.99.137.1.2)
<li> Eve Hallows (6.99.136.99.14)
<li> Exiscoming (6.99.147.1.1)
<li> <a href="https://moonlitworks.com/" rel="nofollow">Eyzi</a> (7.07.1.1)
<li> Fuseblower (7.07.1.1)
<li> George (7.17.1.1)
<li> <a href="http://www.gtbono.com" rel="nofollow">Giovanni Tempobono</a> (7.17.1.1)
<li> <a href="https://goldengamebarn.com/" rel="nofollow">Golden Game Barn</a> (6.99.137.1.1)
<li> <a href="https://twitter.com/goodtalesvn" rel="nofollow">Good Tales</a> (7.17.1.1)
<li> Great Chicken Studio (6.99.147.1.1)
<li> Grimiku (7.07.1.1)
<li> Gunso (6.99.137.1.1)
<li> HAG Productions (7.1.1)
<li> <a href="http://hanb.jp" rel="nofollow">HanbitGaram (MOEWORK Entertainment)</a> (7.17.1.1)
<li> Exiscoming (6.99.147.1.2)
<li> <a href="https://moonlitworks.com/" rel="nofollow">Eyzi</a> (7.07.1.2)
<li> Fuseblower (7.07.1.2)
<li> George (7.17.1.2)
<li> <a href="http://www.gtbono.com" rel="nofollow">Giovanni Tempobono</a> (7.17.1.2)
<li> <a href="https://goldengamebarn.com/" rel="nofollow">Golden Game Barn</a> (6.99.137.1.2)
<li> <a href="https://twitter.com/goodtalesvn" rel="nofollow">Good Tales</a> (7.17.1.2)
<li> Great Chicken Studio (6.99.147.1.2)
<li> Grimiku (7.07.1.2)
<li> Gunso (6.99.137.1.2)
<li> HAG Productions (7.1.17.1.2)
<li> <a href="http://hanb.jp" rel="nofollow">HanbitGaram (MOEWORK Entertainment)</a> (7.17.1.2)
<li> Happimochi (6.99.136.99.14)
<li> HopesGaming (7.1.1)
<li> HopesGaming (7.1.17.1.2)
<li> <a href="https://ijemin.com" rel="nofollow">I_Jemin</a> (6.99.137.0)
<li> <a href="https://irredeemable.net/" rel="nofollow">Irredeemable Games</a> (6.99.147.1.1)
<li> J. C. Holder (6.99.137.1.1)
<li> <a href="https://irredeemable.net/" rel="nofollow">Irredeemable Games</a> (6.99.147.1.2)
<li> J. C. Holder (6.99.137.1.2)
<li> James Tyner (6.99.137.1)
<li> JeongPyo Lee (6.99.137.1.1)
<li> Joanna B (6.99.137.1.1)
<li> JoeBanks (7.17.1.1)
<li> Jonas Kyratzes (7.1.1)
<li> jonnymelabo (6.99.137.1.1)
<li> JeongPyo Lee (6.99.137.1.2)
<li> Joanna B (6.99.137.1.2)
<li> JoeBanks (7.17.1.2)
<li> Jonas Kyratzes (7.1.17.1.2)
<li> jonnymelabo (6.99.137.1.2)
<li> Josh Kaplan (6.99.136.99.14.2)
<li> K. Starbuck (6.99.136.99.14)
<li> Kampmichi (7.1.1)
<li> Kayde Initials (6.99.137.1.1)
<li> <a href="http://kexboy.com" rel="nofollow">KEXBOY</a> (6.99.137.1.1)
<li> Kikai Digital (7.07.1.1)
<li> <a href="http://www.gamesbykinmoku.com" rel="nofollow">Kinmoku</a> (6.99.137.1.1)
<li> <a href="http://krsm94.web.fc2.com/" rel="nofollow">Klast Halc (crAsm)</a> (6.99.14.27.1.1)
<li> Kosmos Games (6.99.147.1.1)
<li> <a href="https://de.koubaibu.tech/" rel="nofollow">Koubaibu Technology Group</a> (7.17.1.1)
<li> lain105/EckoMars (6.99.137.1.1)
<li> LateWhiteRabbit (6.99.147.1.1)
<li> <a href="https://lernakow.itch.io" rel="nofollow">Lernakow</a> (6.99.14.37.1.1)
<li> LewdKitty (7.07.1.1)
<li> <a href="https://www.renpy.org/agegate?url=https://www.lewdlab.com/" rel="nofollow">Lewdlab</a> (6.99.14.17.1.1)
<li> <a href="https://lemmasoft.renai.us/forums/viewtopic.php?f=66&t=48011&p=482643" rel="nofollow">Lezalith</a> (7.17.1.1)
<li> Lictor (6.99.14.27.1.1)
<li> Little Napoleon (7.17.1.1)
<li> <a href="http://trash.moe/" rel="nofollow">Lore</a> (6.99.137.1.1)
<li> Luke Jackson (6.99.137.1.1)
<li> <a href="http://luscious-spirit-studios.tumblr.com/" rel="nofollow">Luscious Spirit Studios</a> (6.99.137.1.1)
<li> <a href="https://www.renpy.org/agegate?url=https://www.patreon.com/Luxee" rel="nofollow">Luxee</a> (6.99.14.37.1.1)
<li> Maeve Bandruid (6.99.137.1.1)
<li> <a href="https://www.renpy.org/agegate?url=https://www.patreon.com/manitu" rel="nofollow">MANITU Games CO.</a> (6.99.137.1.1)
<li> <a href="https://manorstories.fr" rel="nofollow">ManorStories</a> (6.99.147.1.1)
<li> <a href="http://www.marionettecode.com/" rel="nofollow">Marionette</a> (6.99.147.1.1)
<li> Kampmichi (7.1.17.1.2)
<li> Kayde Initials (6.99.137.1.2)
<li> <a href="http://kexboy.com" rel="nofollow">KEXBOY</a> (6.99.137.1.2)
<li> Kikai Digital (7.07.1.2)
<li> <a href="http://www.gamesbykinmoku.com" rel="nofollow">Kinmoku</a> (6.99.137.1.2)
<li> <a href="http://krsm94.web.fc2.com/" rel="nofollow">Klast Halc (crAsm)</a> (6.99.14.27.1.2)
<li> Kosmos Games (6.99.147.1.2)
<li> <a href="https://de.koubaibu.tech/" rel="nofollow">Koubaibu Technology Group</a> (7.17.1.2)
<li> lain105/EckoMars (6.99.137.1.2)
<li> LateWhiteRabbit (6.99.147.1.2)
<li> <a href="https://lernakow.itch.io" rel="nofollow">Lernakow</a> (6.99.14.37.1.2)
<li> LewdKitty (7.07.1.2)
<li> <a href="https://www.renpy.org/agegate?url=https://www.lewdlab.com/" rel="nofollow">Lewdlab</a> (6.99.14.17.1.2)
<li> <a href="https://lemmasoft.renai.us/forums/viewtopic.php?f=66&t=48011&p=482643" rel="nofollow">Lezalith</a> (7.17.1.2)
<li> Lictor (6.99.14.27.1.2)
<li> Little Napoleon (7.17.1.2)
<li> <a href="http://trash.moe/" rel="nofollow">Lore</a> (6.99.137.1.2)
<li> Luke Jackson (6.99.137.1.2)
<li> <a href="http://luscious-spirit-studios.tumblr.com/" rel="nofollow">Luscious Spirit Studios</a> (6.99.137.1.2)
<li> <a href="https://www.renpy.org/agegate?url=https://www.patreon.com/Luxee" rel="nofollow">Luxee</a> (6.99.14.37.1.2)
<li> Maeve Bandruid (6.99.137.1.2)
<li> <a href="https://www.renpy.org/agegate?url=https://www.patreon.com/manitu" rel="nofollow">MANITU Games CO.</a> (6.99.137.1.2)
<li> <a href="https://manorstories.fr" rel="nofollow">ManorStories</a> (6.99.147.1.2)
<li> <a href="http://www.marionettecode.com/" rel="nofollow">Marionette</a> (6.99.147.1.2)
<li> MAW.3D.Art (6.99.13)
<li> Max J Sher (6.99.137.1.1)
<li> MCatter Dev (7.17.1.1)
<li> <a href="https://meagantrott.com" rel="nofollow">Meagan Trott</a> (6.99.137.1.1)
<li> <a href="http://metasepia.icecavern.net" rel="nofollow">Metasepia Games</a> (6.99.137.1.1)
<li> <a href="http://www.meyaoi.com" rel="nofollow">Meyaoi Games</a> (6.99.136.99.14, 6.99.14.37.1.1)
<li> Meyvol (6.99.14.17.1.1)
<li> Michael Simon (7.1.1)
<li> Michaela Laws (6.99.137.1.1)
<li> Max J Sher (6.99.137.1.2)
<li> MCatter Dev (7.17.1.2)
<li> <a href="https://meagantrott.com" rel="nofollow">Meagan Trott</a> (6.99.137.1.2)
<li> <a href="http://metasepia.icecavern.net" rel="nofollow">Metasepia Games</a> (6.99.137.1.2)
<li> <a href="http://www.meyaoi.com" rel="nofollow">Meyaoi Games</a> (6.99.136.99.14, 6.99.14.37.1.2)
<li> Meyvol (6.99.14.17.1.2)
<li> Michael Simon (7.1.17.1.2)
<li> Michaela Laws (6.99.137.1.2)
<li> <a href="http://www.milkteestudios.com" rel="nofollow">Milktee Studios</a> (7.07.1)
<li> Miss Skizzors (7.07.1.1)
<li> Montse Latre (7.1.1)
<li> <a href="https://mrvaldez.ph/" rel="nofollow">MrValdez</a> (7.07.1.1)
<li> Miss Skizzors (7.07.1.2)
<li> Montse Latre (7.1.17.1.2)
<li> <a href="https://mrvaldez.ph/" rel="nofollow">MrValdez</a> (7.07.1.2)
<li> <a href="https://ms45.itch.io" rel="nofollow">Ms .45</a> (6.99.13)
<li> nasredin (6.99.14.37.1.1)
<li> Natalie Van Sistine (7.07.1.1)
<li> <a href="https://cafe.naver.com/vmo.cafe" rel="nofollow">Naver cafe VMO</a> (7.17.1.1)
<li> nasredin (6.99.14.37.1.2)
<li> Natalie Van Sistine (7.07.1.2)
<li> <a href="https://cafe.naver.com/vmo.cafe" rel="nofollow">Naver cafe VMO</a> (7.17.1.2)
<li> <a href="http://cafe.naver.com/vmo" rel="nofollow">NaverCafe VMO</a> (6.99.137.1)
<li> Neigan (7.0)
<li> Nicholas Swenson (6.99.147.1.1)
<li> <a href="https://www.patreon.com/nikraria" rel="nofollow">nikraria</a> (6.99.137.1.1)
<li> Nova Alamak (6.99.14.37.1.1)
<li> Nicholas Swenson (6.99.147.1.2)
<li> <a href="https://www.patreon.com/nikraria" rel="nofollow">nikraria</a> (6.99.137.1.2)
<li> Nova Alamak (6.99.14.37.1.2)
<li> <a href="http://devety.com" rel="nofollow">Oleksii olety Kyrylchuk</a> (6.99.14.16.99.14.2)
<li> <a href="https://www.renpy.org/agegate?url=https://www.patreon.com/palantogames" rel="nofollow">Palanto Games</a> (7.07.1.1)
<li> Panthera Morag (6.99.137.1.1)
<li> Patchwork Princess (7.17.1.1)
<li> <a href="https://www.renpy.org/agegate?url=https://www.patreon.com/palantogames" rel="nofollow">Palanto Games</a> (7.07.1.2)
<li> Panthera Morag (6.99.137.1.2)
<li> Patchwork Princess (7.17.1.2)
<li> Patricia (6.99.137.1.1)
<li> <a href="http://peachpattch.com/" rel="nofollow">peachpattch</a> (6.99.147.1.1)
<li> philat (6.99.14.17.1.1)
<li> plasterbrain (6.99.137.1.1)
<li> <a href="http://peachpattch.com/" rel="nofollow">peachpattch</a> (6.99.147.1.2)
<li> philat (6.99.14.17.1.2)
<li> plasterbrain (6.99.137.1.2)
<li> Ploppertje (6.99.136.99.14.3)
<li> Podge (6.99.137.1.1)
<li> Podge (6.99.137.1.2)
<li> Puriwit Sesupaponphong (6.99.13)
<li> Puriwit Sesupaponphong (6.99.137.1)
<li> Pólyí Konrád (7.17.1.1)
<li> <a href="http://www.cottoncandycyanide.com/" rel="nofollow">Quantum Suicide</a> (7.17.1.1)
<li> <a href="http://razzartvisual.com/" rel="nofollow">Razz</a> (6.99.137.1.1)
<li> <a href="http://www.cottoncandycyanide.com/" rel="nofollow">Quantum Suicide</a> (7.17.1.2)
<li> <a href="http://razzartvisual.com/" rel="nofollow">Razz</a> (6.99.137.1.2)
<li> <a href="https://twitter.com/ragnarhomsar" rel="nofollow">Realga</a> (7.07.1)
<li> René Dudfield (6.99.137.1.1)
<li> Richard (6.99.147.1.1)
<li> <a href="http://impqueen.com/" rel="nofollow">Rinmaru</a> (6.99.137.1.1)
<li> Rizia Praja (6.99.14.17.1.1)
<li> René Dudfield (6.99.137.1.2)
<li> Richard (6.99.147.1.2)
<li> <a href="http://impqueen.com/" rel="nofollow">Rinmaru</a> (6.99.137.1.2)
<li> Rizia Praja (6.99.14.17.1.2)
<li> Robyn Rosenfeld (7.1)
<li> <a href="http://sunkoiwish.com/" rel="nofollow">Royce A Xaiyeon</a> (6.99.137.1.1)
<li> Ryan Balgos (6.99.147.1.1)
<li> <a href="http://sunkoiwish.com/" rel="nofollow">Royce A Xaiyeon</a> (6.99.137.1.2)
<li> Ryan Balgos (6.99.147.1.2)
<li> Ryan Whited (6.99.147.1)
<li> <a href="https://saiffyros.wordpress.com/" rel="nofollow">Saiffyros</a> (6.99.147.1.1)
<li> Sam Yang (6.99.137.1.1)
<li> Simply Aria (6.99.147.1.1)
<li> <a href="http://sleepyagents.co.uk" rel="nofollow">Sleepy Agents</a> (6.99.137.1.1)
<li> Snowlocke (7.07.1.1)
<li> <a href="https://saiffyros.wordpress.com/" rel="nofollow">Saiffyros</a> (6.99.147.1.2)
<li> Sam Yang (6.99.137.1.2)
<li> Simply Aria (6.99.147.1.2)
<li> <a href="http://sleepyagents.co.uk" rel="nofollow">Sleepy Agents</a> (6.99.137.1.2)
<li> Snowlocke (7.07.1.2)
<li> <a href="http://store.steampowered.com/app/570350/Sorry_Entschuldigung__A_Psychological_Horror_Visual_Novel/" rel="nofollow">Sorry. (Entschuldigung)</a> (6.99.14.27.1)
<li> Spyros Panagiotopoulos (6.99.147.1)
<li> Steamlynx (6.99.14.17.1.1)
<li> Stefan Gagne (6.99.137.1.1)
<li> <a href="https://www.renpy.org/agegate?url=http://www.patreon.com/errilhl" rel="nofollow">Studio Errilhl</a> (6.99.14.37.1.1)
<li> Taosym (6.99.137.1.1)
<li> Steamlynx (6.99.14.17.1.2)
<li> Stefan Gagne (6.99.137.1.2)
<li> <a href="https://www.renpy.org/agegate?url=http://www.patreon.com/errilhl" rel="nofollow">Studio Errilhl</a> (6.99.14.37.1.2)
<li> Taosym (6.99.137.1.2)
<li> Teofilo Hurtado (6.99.147.1.1)
<li> Thomas Charlie (6.99.137.1.1)
<li> Timothy Landreth (6.99.137.1.1)
<li> Timothy Young (6.99.14.17.1.1)
<li> TJ Huckabee (6.99.137.1.1)
<li> Thomas Charlie (6.99.137.1.2)
<li> Timothy Landreth (6.99.137.1.2)
<li> Timothy Young (6.99.14.17.1.2)
<li> TJ Huckabee (6.99.137.1.2)
<li> ToastCrust (6.99.136.99.14)
<li> Tobias Wüthrich (6.99.136.99.14.3)
<li> <a href="http://tremmigames.tk/" rel="nofollow">tremmiGames</a> (7.07.1.1)
<li> trooper6 (6.99.137.1.1)
<li> <a href="https://www.youtube.com/tryinmorning" rel="nofollow">tryinmorning</a> (6.99.137.1.1)
<li> <a href="https://studiomugenjohncel.wordpress.com/" rel="nofollow">Uncle Mugen (Mugenjohncel</a> (6.99.14.27.1.1)
<li> <a href="http://www.visualsaga.com/" rel="nofollow">Visual Saga</a> (6.99.137.1.1)
<li> <a href="http://tremmigames.tk/" rel="nofollow">tremmiGames</a> (7.07.1.2)
<li> trooper6 (6.99.137.1.2)
<li> <a href="https://www.youtube.com/tryinmorning" rel="nofollow">tryinmorning</a> (6.99.137.1.2)
<li> <a href="https://studiomugenjohncel.wordpress.com/" rel="nofollow">Uncle Mugen (Mugenjohncel</a> (6.99.14.27.1.2)
<li> <a href="http://www.visualsaga.com/" rel="nofollow">Visual Saga</a> (6.99.137.1.2)
<li> Vollschauer (6.99.136.99.14)
<li> <a href="http://vxlloyd.com" rel="nofollow">VX Lloyd</a> (6.99.14.37.0)
<li> Wayne Wollesen (6.99.14.37.1.1)
<li> <a href="https://www.facebook.com/weeabooriot" rel="nofollow">Weeabooriot Cosplay</a> (6.99.137.1.1)
<li> <a href="https://arcaniinteractive.com/" rel="nofollow">William Lucht</a> (7.07.1.1)
<li> William Tumeo (6.99.137.1.1)
<li> <a href="http://winterwolves.com/ambersmagicshop.htm" rel="nofollow">Winter Wolves</a> (6.99.137.1.1)
<li> <a href="http://astralore.com/" rel="nofollow">Yakmala!</a> (6.99.137.1.1)
<li> <a href="https://www.facebook.com/weeabooriot" rel="nofollow">Weeabooriot Cosplay</a> (6.99.137.1.2)
<li> <a href="https://arcaniinteractive.com/" rel="nofollow">William Lucht</a> (7.07.1.2)
<li> William Tumeo (6.99.137.1.2)
<li> <a href="http://winterwolves.com/ambersmagicshop.htm" rel="nofollow">Winter Wolves</a> (6.99.137.1.2)
<li> <a href="http://astralore.com/" rel="nofollow">Yakmala!</a> (6.99.137.1.2)
</ul>
+9
View File
@@ -127,6 +127,15 @@ and rolled-back when rollback occurs.
Controls of if skipping is allowed.
.. var:: _version = ...
This is set to :var:`config.version` when a new game is started. It can be
use by the ``after_load`` label or :var:`config.after_load_callbacks` to
determine which upgrades need to be done.
This is only set once, upon the initial start. After that, the game is
responsible for updating _version as necessary.
.. var:: _window = False
This set by the ``window show`` and ``window hide`` statements, and indirectly
+3 -3
View File
@@ -799,10 +799,10 @@ screen preferences():
style_prefix "radio"
label _("Language")
textbutton "English" text_font "DejaVuSans.ttf"action Language(None)
textbutton "Français" text_font "DejaVuSans.ttf"action Language("french")
textbutton "English" text_font "DejaVuSans.ttf" action Language(None)
textbutton "Français" text_font "DejaVuSans.ttf" action Language("french")
textbutton "Русский" text_font "DejaVuSans.ttf" action Language("russian")
textbutton "Bahasa Melayu" text_font "DejaVuSans.ttf"action Language("malay")
textbutton "Bahasa Melayu" text_font "DejaVuSans.ttf" action Language("malay")
#end language_picker
+3 -3
View File
@@ -187,7 +187,7 @@ translate french strings:
# screens.rpy:782
old "Rollback Side"
new "Rollback"
new "Rembobinage côté"
# screens.rpy:783
#old "Disable"
@@ -215,7 +215,7 @@ translate french strings:
# screens.rpy:800
old "Language"
new "Langage"
new "Langue"
# screens.rpy:815
old "Text Speed"
@@ -351,7 +351,7 @@ translate french strings:
# screens.rpy:1111
old "Mouse Wheel Up\nClick Rollback Side"
new "Molette de souris vers le haut\nClic dans le sens Rollback"
new "Molette de souris vers le haut\nClic du côté rembobinage"
# screens.rpy:1115
old "Mouse Wheel Down"
File diff suppressed because one or more lines are too long