Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e9c8d62a17 | |||
| 6fc6f63980 | |||
| 2bff817f5a |
Vendored
-6
@@ -186,12 +186,6 @@
|
||||
"foreground": "#ffffff"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "renpy.meta.color.#f00",
|
||||
"settings": {
|
||||
"foreground": "#f00"
|
||||
}
|
||||
},
|
||||
{
|
||||
"scope": "text.notes.info",
|
||||
"settings": {
|
||||
|
||||
+1
-9
@@ -53,12 +53,4 @@ The quality is not perfect, but it should make sense to any developer
|
||||
fluent in Finnish but not English. Adjustments will be made if better
|
||||
translations are suggested.
|
||||
|
||||
* Lari Liuhamo (Diapolo10) <lari.liuhamo+github116504@gmail.com>
|
||||
|
||||
Ukrainian
|
||||
---------
|
||||
|
||||
Translation to Ukrainian language. Most of translations provided by Veydzher.
|
||||
Feel free to report me any mistakes, fixes or improvements.
|
||||
|
||||
* Veydzher <veydzherdgswift008@gmail.com>
|
||||
* Lari Liuhamo (Diapolo10) <lari.liuhamo+github116504@gmail.com>
|
||||
@@ -8,15 +8,13 @@ import sys
|
||||
|
||||
from renpy import version_tuple # @UnresolvedImport
|
||||
|
||||
branch = os.popen("git branch --show-current").read().strip()
|
||||
|
||||
SOURCE = [
|
||||
"/home/tom/ab/renpy",
|
||||
"/home/tom/ab/renpy-build-" + branch,
|
||||
"/home/tom/ab/renpy-build",
|
||||
"/home/tom/ab/pygame_sdl2",
|
||||
"/home/tom/ab/renpy-build/renpyweb",
|
||||
]
|
||||
|
||||
|
||||
from renpy.versions import generate_vc_version
|
||||
|
||||
version = generate_vc_version()["version"]
|
||||
@@ -24,9 +22,6 @@ short_version = version.rpartition(".")[0]
|
||||
major = version.partition(".")[0]
|
||||
print("Version", version)
|
||||
|
||||
if major == '7':
|
||||
SOURCE.append("/home/tom/ab/renpy-build-fix/renpyweb")
|
||||
|
||||
ap = argparse.ArgumentParser()
|
||||
|
||||
ap.add_argument("--release", action="store_true")
|
||||
|
||||
+1
-1
@@ -252,7 +252,7 @@ def main():
|
||||
"-q",
|
||||
"egg_info",
|
||||
"--tag-build",
|
||||
"+renpy" + args.version.replace("+", "-"),
|
||||
"+renpy" + args.version,
|
||||
"sdist",
|
||||
"-d",
|
||||
os.path.abspath(destination)
|
||||
|
||||
+1
-1
@@ -328,7 +328,7 @@ define gui.vbar_borders = Borders(gui.scale(4), gui.scale(4), gui.scale(4), gui.
|
||||
define gui.vscrollbar_borders = Borders(gui.scale(4), gui.scale(4), gui.scale(4), gui.scale(4))
|
||||
define gui.vslider_borders = Borders(gui.scale(4), gui.scale(4), gui.scale(4), gui.scale(4))
|
||||
|
||||
## What to do with unscrollable scrollbars in the game menu. "hide" hides them, while
|
||||
## What to do with unscrollable scrollbars in the gui. "hide" hides them, while
|
||||
## None shows them.
|
||||
define gui.unscrollable = "hide"
|
||||
|
||||
|
||||
@@ -96,6 +96,7 @@ style frame:
|
||||
## https://www.renpy.org/doc/html/screen_special.html#say
|
||||
|
||||
screen say(who, what):
|
||||
style_prefix "say"
|
||||
|
||||
window:
|
||||
id "window"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
@@ -1100,14 +1100,12 @@ fix_dlc("renios", "renios")
|
||||
|
||||
prefix = py("lib/py{major}-")
|
||||
|
||||
i686fn = os.path.join(config.renpy_base, prefix + "linux-i686/renpy")
|
||||
|
||||
if os.path.exists(i686fn):
|
||||
if os.path.exists(linux_i686):
|
||||
|
||||
self.add_file(
|
||||
linux_i686,
|
||||
prefix + "linux-i686/" + self.executable_name,
|
||||
i686fn,
|
||||
os.path.join(config.renpy_base, prefix + "linux-i686/renpy"),
|
||||
True)
|
||||
|
||||
self.add_file(
|
||||
@@ -1533,8 +1531,7 @@ fix_dlc("renios", "renios")
|
||||
|
||||
update = { variant : { "version" : self.update_versions[variant], "base_name" : self.base_name, "files" : update_files, "directories" : update_directories, "xbit" : update_xbit } }
|
||||
|
||||
update_fn = self.temp_filename(filename + ".update.json")
|
||||
|
||||
update_fn = os.path.join(self.destination, filename + ".update.json")
|
||||
|
||||
if self.include_update and not format.startswith("app-"):
|
||||
|
||||
@@ -1568,11 +1565,9 @@ fix_dlc("renios", "renios")
|
||||
in this thread or a background thread.
|
||||
"""
|
||||
|
||||
final_update_fn = os.path.join(self.destination, filename + ".update.json")
|
||||
|
||||
if self.build_update or dlc:
|
||||
if self.include_update and not self.build_update and not dlc:
|
||||
if os.path.exists(update_fn):
|
||||
shutil.copy(update_fn, final_update_fn)
|
||||
os.unlink(update_fn)
|
||||
|
||||
if not directory:
|
||||
file_hash = hash_file(path)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
@@ -216,7 +216,7 @@ screen front_page_project:
|
||||
|
||||
textbutton _("Android") action Jump("android")
|
||||
textbutton _("iOS") action Jump("ios")
|
||||
textbutton _("Web") action Jump("web")
|
||||
textbutton _("Web") + " " + _("(Beta)") action Jump("web")
|
||||
textbutton _("Generate Translations") action Jump("translate")
|
||||
textbutton _("Extract Dialogue") action Jump("extract_dialogue")
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
@@ -172,7 +172,7 @@ class CodeGenerator(object):
|
||||
|
||||
for l in self.lines:
|
||||
|
||||
m = re.match(r'^(\s*)define (.*?) =', l)
|
||||
m = re.match('^(\s*)define (.*?) =', l)
|
||||
|
||||
if m:
|
||||
indent = m.group(1)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 160 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 71 KiB |
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
@@ -169,7 +169,7 @@ def _check_hash(filename, hashj):
|
||||
download_file = ""
|
||||
download_url = ""
|
||||
|
||||
def download(url, filename, hash=None, headers=None, requests_kwargs={}):
|
||||
def download(url, filename, hash=None):
|
||||
"""
|
||||
Downloads `url` to `filename`, a tempfile.
|
||||
"""
|
||||
@@ -188,13 +188,9 @@ def download(url, filename, hash=None, headers=None, requests_kwargs={}):
|
||||
|
||||
progress_time = time.time()
|
||||
|
||||
all_headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36 renpy/8'}
|
||||
if headers:
|
||||
all_headers.update(headers)
|
||||
|
||||
try:
|
||||
|
||||
response = requests.get(url, stream=True, proxies=renpy.exports.proxies, timeout=15, headers=all_headers, **requests_kwargs)
|
||||
response = requests.get(url, stream=True, proxies=renpy.exports.proxies, timeout=15)
|
||||
response.raise_for_status()
|
||||
|
||||
total_size = int(response.headers.get('content-length', 1))
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
@@ -33,10 +33,6 @@ init python in interface:
|
||||
DOC_URL = "http://www.renpy.org/doc/html/"
|
||||
DOC_LOCAL_URL = "file:///" + DOC_PATH
|
||||
|
||||
# If true, the launcher should not link back to renpy.org.
|
||||
NO_LAUNCHER_LINKS = os.path.exists(os.path.join(config.renpy_base, "no_launcher_links.txt"))
|
||||
|
||||
|
||||
local_doc_exists = os.path.exists(DOC_PATH)
|
||||
|
||||
def get_doc_url(page):
|
||||
@@ -44,7 +40,7 @@ init python in interface:
|
||||
Returns the URL to the documentation page.
|
||||
"""
|
||||
|
||||
if local_doc_exists and (NO_LAUNCHER_LINKS or not persistent.use_web_doc):
|
||||
if local_doc_exists and not persistent.use_web_doc:
|
||||
from urllib.parse import urljoin
|
||||
from urllib.request import pathname2url
|
||||
|
||||
@@ -121,10 +117,7 @@ screen bottom_info:
|
||||
hbox:
|
||||
spacing INDENT
|
||||
textbutton _("Documentation") style "l_link" action interface.OpenDocumentation()
|
||||
|
||||
if not interface.NO_LAUNCHER_LINKS:
|
||||
textbutton _("Ren'Py Website") style "l_link" action OpenURL(interface.RENPY_URL)
|
||||
|
||||
textbutton _("Ren'Py Website") style "l_link" action OpenURL(interface.RENPY_URL)
|
||||
textbutton _("[interface.version]") style "l_link" action Jump("about")
|
||||
|
||||
hbox:
|
||||
@@ -140,7 +133,7 @@ screen bottom_info:
|
||||
textbutton _("preferences") style "l_link" action Jump("preferences")
|
||||
textbutton _("quit") style "l_link" action Quit(confirm=False)
|
||||
|
||||
if persistent.sponsor_message and not interface.NO_LAUNCHER_LINKS:
|
||||
if persistent.sponsor_message:
|
||||
|
||||
textbutton _("Ren'Py Sponsor Information"):
|
||||
style "l_link"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
@@ -50,7 +50,7 @@ init python:
|
||||
pass
|
||||
|
||||
with interface.error_handling(_("Downloading the itch.io butler.")):
|
||||
url = "https://broth.itch.zone/butler/{}/LATEST/archive/default".format(platform)
|
||||
url = "https://broth.itch.ovh/butler/{}/LATEST/archive/default".format(platform)
|
||||
|
||||
response = requests.get(url, headers={'User-Agent' : "Renpy"}, proxies=renpy.proxies)
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
@@ -32,7 +32,7 @@ init -1 python:
|
||||
if not renpy.loadable(fn1):
|
||||
return True
|
||||
|
||||
hash1 = renpy.open_file(fn1, encoding="utf-8").read()
|
||||
hash1 = renpy.file(fn1).read().decode("utf-8")
|
||||
|
||||
if not os.path.exists(fn2):
|
||||
return False
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
@@ -189,12 +189,7 @@ init -1 python hide:
|
||||
config.has_voice = False
|
||||
config.force_sound = False
|
||||
config.quit_action = Quit(confirm=False)
|
||||
|
||||
if renpy.macintosh:
|
||||
config.window_icon = "images/window-icon-mac.png"
|
||||
else:
|
||||
config.window_icon = "images/window-icon.png"
|
||||
|
||||
config.window_icon = "images/logo.png"
|
||||
config.has_autosave = False
|
||||
config.log_enable = False
|
||||
config.mouse_hide_time = None
|
||||
@@ -301,8 +296,6 @@ init python:
|
||||
build.classify_renpy("**.new", None)
|
||||
build.classify_renpy("**.bak", None)
|
||||
|
||||
build.classify_renpy("**.keystore", None)
|
||||
|
||||
build.classify_renpy("**/log.txt", None)
|
||||
build.classify_renpy("**/traceback.txt", None)
|
||||
build.classify_renpy("**/errors.txt", None)
|
||||
@@ -410,15 +403,9 @@ init python:
|
||||
build.classify_renpy("module/libhydrogen/**", "source")
|
||||
|
||||
# all-platforms binary.
|
||||
build.classify_renpy("lib/**/libpython{}.{}.dll".format(sys.version_info.major, sys.version_info.minor), "binary")
|
||||
build.classify_renpy("lib/**/libpython*.dll", None)
|
||||
|
||||
build.classify_renpy("lib/**/*steam_api*", "steam")
|
||||
build.classify_renpy("lib/**/*Live2D*", None)
|
||||
|
||||
|
||||
libpython = "lib/python{}.{}".format(sys.version_info.major, sys.version_info.minor)
|
||||
|
||||
if PY2:
|
||||
build.classify_renpy("lib/py2-linux-armv7l/**", "linux_arm")
|
||||
build.classify_renpy("lib/py2-linux-aarch64/**", "linux_arm")
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
|
||||
|
||||
translate german strings:
|
||||
|
||||
# screens.rpy:9
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
|
||||
# game/editor.rpy:327
|
||||
old "An exception occured while launching the text editor:\n[exception!q]"
|
||||
new "Ocorreu uma exceção ao executar o editor de texto:\n[exception!q]"
|
||||
new "Ocorreu uma exceção ao executar o editor de texto:\[exception!q]"
|
||||
|
||||
# game/editor.rpy:423
|
||||
old "Select Editor"
|
||||
|
||||
@@ -1874,7 +1874,7 @@
|
||||
|
||||
# game/androidstrings.rpy:43
|
||||
old "I was unable to use javac to compile a test file. If you haven't installed the Java Development Kit yet, please download it from:\n\n{a=https://adoptium.net/?variant=openjdk8}https://adoptium.net/?variant=openjdk8{/a}\n\nThe JDK is different from the JRE, so it's possible you have Java without having the JDK. Please make sure you installed the 'JavaSoft (Oracle) registry keys'.\n\nWithout a working JDK, I can't continue."
|
||||
new "Не удалось использовать javac для компиляции тестового файла. Если вы еще не установили Java Development Kit, загрузите его с:\n\n{a=https://adoptium.net/?variant=openjdk8}https://adoptium.net/?variant=openjdk8{/a}\n\nJDK отличается от JRE, поэтому возможно, что у вас есть Java без JDK. Пожалуйста, убедитесь, что вы установили 'переменные окружения JavaSoft (Oracle)'.\n\nБез работающего JDK я не могу продолжать."
|
||||
new "Не удалось использовать javac для компиляции тестового файла. Если вы еще не установили Java Development Kit, загрузите его с:\n\n{a=https://adoptium.net/?variant=openjdk8}https://adoptium.net/?variant=openjdk8{/a}\n\JDK отличается от JRE, поэтому возможно, что у вас есть Java без JDK. Пожалуйста, убедитесь, что вы установили 'переменные окружения JavaSoft (Oracle)'.\n\nБез работающего JDK я не могу продолжать."
|
||||
|
||||
# game/androidstrings.rpy:64
|
||||
old "I've opened the directory containing android.keystore and bundle.keystore. Please back them up, and keep them in a safe place."
|
||||
|
||||
@@ -884,7 +884,7 @@ translate spanish strings:
|
||||
|
||||
# renpy/common/00sync.rpy:593
|
||||
old "You can use this ID to download your save on another device.\nThis sync will expire in an hour.\nRen'Py Sync is supported by {a=https://www.renpy.org/sponsors.html}Ren'Py's Sponsors{/a}."
|
||||
new "Puede usar esta ID para descargar su guardado en otro dispositivo.\nEsta sincronización caducará en una hora.\nRenPy Sync está para {a=https://www.renpy.org/sponsors.html}los patrocinadores de Ren'Py{/a}."
|
||||
new "Puede usar esta ID para descargar su guardado en otro dispositivo.\nEsta sincronización caducará en una hora.\RenPy Sync está para {a=https://www.renpy.org/sponsors.html}los patrocinadores de Ren'Py{/a}."
|
||||
|
||||
# renpy/common/00sync.rpy:619
|
||||
old "Sync Error"
|
||||
|
||||
@@ -155,7 +155,7 @@ translate ukrainian strings:
|
||||
|
||||
# 00action_file.rpy:240
|
||||
old "%b %d, %H:%M"
|
||||
new "%d %b, %H:%M"
|
||||
new "%b %d, %H:%M"
|
||||
|
||||
# 00action_file.rpy:353
|
||||
old "Save slot %s: [text]"
|
||||
@@ -207,7 +207,7 @@ translate ukrainian strings:
|
||||
|
||||
# 00director.rpy:708
|
||||
old "The interactive director is not enabled here."
|
||||
new "Інтерактивний режисер тут не ввімкнено."
|
||||
new "Інтерактивний режисер тут не ввімкнений."
|
||||
|
||||
# 00director.rpy:1481
|
||||
old "⬆"
|
||||
@@ -223,7 +223,7 @@ translate ukrainian strings:
|
||||
|
||||
# 00director.rpy:1561
|
||||
old "(statement)"
|
||||
new "(оператор)"
|
||||
new "(функція)"
|
||||
|
||||
# 00director.rpy:1562
|
||||
old "(tag)"
|
||||
@@ -235,7 +235,7 @@ translate ukrainian strings:
|
||||
|
||||
# 00director.rpy:1564
|
||||
old "(transform)"
|
||||
new "(перетворення)"
|
||||
new "(трансформація)"
|
||||
|
||||
# 00director.rpy:1589
|
||||
old "(transition)"
|
||||
@@ -247,7 +247,7 @@ translate ukrainian strings:
|
||||
|
||||
# 00director.rpy:1602
|
||||
old "(filename)"
|
||||
new "(назва файлу)"
|
||||
new "(ім’я файла)"
|
||||
|
||||
# 00director.rpy:1631
|
||||
old "Change"
|
||||
@@ -267,7 +267,7 @@ translate ukrainian strings:
|
||||
|
||||
# 00director.rpy:1674
|
||||
old "Statement:"
|
||||
new "Оператор:"
|
||||
new "Функція:"
|
||||
|
||||
# 00director.rpy:1695
|
||||
old "Tag:"
|
||||
@@ -279,7 +279,7 @@ translate ukrainian strings:
|
||||
|
||||
# 00director.rpy:1729
|
||||
old "Transforms:"
|
||||
new "Перетворення:"
|
||||
new "Трансформації:"
|
||||
|
||||
# 00director.rpy:1748
|
||||
old "Behind:"
|
||||
@@ -295,7 +295,7 @@ translate ukrainian strings:
|
||||
|
||||
# 00director.rpy:1803
|
||||
old "Audio Filename:"
|
||||
new "Назва аудіофайлу:"
|
||||
new "Ім’я аудіофайлу::"
|
||||
|
||||
# 00gui.rpy:370
|
||||
old "Are you sure?"
|
||||
@@ -311,7 +311,7 @@ translate ukrainian strings:
|
||||
|
||||
# 00gui.rpy:373
|
||||
old "Loading will lose unsaved progress.\nAre you sure you want to do this?"
|
||||
new "Завантаження призведе до втрати незбереженого поступу.\nВи дійсно бажаєте продовжити?"
|
||||
new "Завантаження гри приведе до втрати незбереженого прогресу.\nВи дійсно бажаєте це зробити?"
|
||||
|
||||
# 00gui.rpy:374
|
||||
old "Are you sure you want to quit?"
|
||||
@@ -319,7 +319,7 @@ translate ukrainian strings:
|
||||
|
||||
# 00gui.rpy:375
|
||||
old "Are you sure you want to return to the main menu?\nThis will lose unsaved progress."
|
||||
new "Ви дійсно бажаєте повернутися до головного меню?\nЦя дія призведе до втрати незбереженого поступу."
|
||||
new "Ви дійсно бажаєте повернутися до головного меню?\nЦе призведе до втрати незбереженого прогресу."
|
||||
|
||||
# 00gui.rpy:376
|
||||
old "Are you sure you want to end the replay?"
|
||||
@@ -331,7 +331,7 @@ translate ukrainian strings:
|
||||
|
||||
# 00gui.rpy:378
|
||||
old "Are you sure you want to skip to the next choice?"
|
||||
new "Ви дійсно бажаєте пропускати до наступного вибору?"
|
||||
new "Ви дійсно бажаєте пропустити все до наступного вибору?"
|
||||
|
||||
# 00gui.rpy:379
|
||||
old "Are you sure you want to skip unseen dialogue to the next choice?"
|
||||
@@ -351,7 +351,7 @@ translate ukrainian strings:
|
||||
|
||||
# 00library.rpy:147
|
||||
old "Clipboard voicing enabled. "
|
||||
new "Озвучення буфера обміну ввімкнено."
|
||||
new "Озвучення буфера обміну увімкнено."
|
||||
|
||||
# 00library.rpy:148
|
||||
old "Self-voicing enabled. "
|
||||
@@ -371,11 +371,11 @@ translate ukrainian strings:
|
||||
|
||||
# 00library.rpy:153
|
||||
old "horizontal scroll"
|
||||
new "горизонтальна прокрутка"
|
||||
new "горизонтальне прокручування"
|
||||
|
||||
# 00library.rpy:154
|
||||
old "vertical scroll"
|
||||
new "вертикальна прокрутка"
|
||||
new "вертикальне прокручування"
|
||||
|
||||
# 00library.rpy:155
|
||||
old "activate"
|
||||
@@ -411,7 +411,7 @@ translate ukrainian strings:
|
||||
|
||||
# 00preferences.rpy:228
|
||||
old "skip transitions"
|
||||
new "пропускати переходи"
|
||||
new "пропустити переходи"
|
||||
|
||||
# 00preferences.rpy:230
|
||||
old "video sprites"
|
||||
@@ -423,7 +423,7 @@ translate ukrainian strings:
|
||||
|
||||
# 00preferences.rpy:248
|
||||
old "text speed"
|
||||
new "швидкість друку тексту"
|
||||
new "швидкість тексту"
|
||||
|
||||
# 00preferences.rpy:256
|
||||
old "joystick"
|
||||
@@ -435,19 +435,19 @@ translate ukrainian strings:
|
||||
|
||||
# 00preferences.rpy:263
|
||||
old "skip"
|
||||
new "пропускати"
|
||||
new "пропустити"
|
||||
|
||||
# 00preferences.rpy:266
|
||||
old "skip unseen [text]"
|
||||
new "пропускати весь [text]"
|
||||
new "пропустити весь [text]"
|
||||
|
||||
# 00preferences.rpy:271
|
||||
old "skip unseen text"
|
||||
new "пропускати весь текст"
|
||||
new "пропускати увесь текст"
|
||||
|
||||
# 00preferences.rpy:273
|
||||
old "begin skipping"
|
||||
new "почати пропуск"
|
||||
new "почати пропускати"
|
||||
|
||||
# 00preferences.rpy:277
|
||||
old "after choices"
|
||||
@@ -471,7 +471,7 @@ translate ukrainian strings:
|
||||
|
||||
# 00preferences.rpy:310
|
||||
old "auto-forward after click"
|
||||
new "перемотка після клацу"
|
||||
new "перемотка після дотику"
|
||||
|
||||
# 00preferences.rpy:319
|
||||
old "automatic move"
|
||||
@@ -479,7 +479,7 @@ translate ukrainian strings:
|
||||
|
||||
# 00preferences.rpy:328
|
||||
old "wait for voice"
|
||||
new "чекати на голос"
|
||||
new "чекати голос"
|
||||
|
||||
# 00preferences.rpy:337
|
||||
old "voice sustain"
|
||||
@@ -495,7 +495,7 @@ translate ukrainian strings:
|
||||
|
||||
# 00preferences.rpy:364
|
||||
old "debug voicing"
|
||||
new "налагоджувальне озвучення"
|
||||
new "режим налагодження синтезу мови"
|
||||
|
||||
# 00preferences.rpy:373
|
||||
old "emphasize audio"
|
||||
@@ -507,7 +507,7 @@ translate ukrainian strings:
|
||||
|
||||
# 00preferences.rpy:392
|
||||
old "gl powersave"
|
||||
new "енергозбереження"
|
||||
new "економія енергії"
|
||||
|
||||
# 00preferences.rpy:398
|
||||
old "gl framerate"
|
||||
@@ -523,7 +523,7 @@ translate ukrainian strings:
|
||||
|
||||
# 00preferences.rpy:414
|
||||
old "sound volume"
|
||||
new "гучність звукових ефектів"
|
||||
new "гучність звук. ефектів"
|
||||
|
||||
# 00preferences.rpy:415
|
||||
old "voice volume"
|
||||
@@ -535,7 +535,7 @@ translate ukrainian strings:
|
||||
|
||||
# 00preferences.rpy:417
|
||||
old "mute sound"
|
||||
new "без звукових ефектів"
|
||||
new "без звук. ефектів"
|
||||
|
||||
# 00preferences.rpy:418
|
||||
old "mute voice"
|
||||
@@ -547,19 +547,19 @@ translate ukrainian strings:
|
||||
|
||||
# 00preferences.rpy:500
|
||||
old "Clipboard voicing enabled. Press 'shift+C' to disable."
|
||||
new "Озвучення буфера обміну ввімкнено. Натисніть «Shift+C», щоб вимкнути."
|
||||
new "Озвучення буфера обміну увімкнено. Натисніть 'shift+C', щоб вимкнути."
|
||||
|
||||
# 00preferences.rpy:502
|
||||
old "Self-voicing would say \"[renpy.display.tts.last]\". Press 'alt+shift+V' to disable."
|
||||
new "Синтез мовлення сказав би «[renpy.display.tts.last]». Натисніть «Alt+Shift+V», щоб вимкнути."
|
||||
new "Синтез мовлення має сказати \"[renpy.display.tts.last]\". Натисніть 'alt+shift+V', щоб вимкнути."
|
||||
|
||||
# 00preferences.rpy:504
|
||||
old "Self-voicing enabled. Press 'v' to disable."
|
||||
new "Синтез мовлення увімкнено. Натисніть «V», щоб вимкнути."
|
||||
new "Синтез мовлення увімкнено. Натисніть 'v', щоб вимкнути його."
|
||||
|
||||
# _compat\gamemenu.rpym:198
|
||||
old "Empty Slot."
|
||||
new "Порожня комірка."
|
||||
new "Порожній комірка."
|
||||
|
||||
# _compat\gamemenu.rpym:355
|
||||
old "Previous"
|
||||
@@ -595,7 +595,7 @@ translate ukrainian strings:
|
||||
|
||||
# _developer\developer.rpym:51
|
||||
old "Image Location Picker"
|
||||
new "Вибирач розташування зображень"
|
||||
new "Вибір розташування зображень"
|
||||
|
||||
# _developer\developer.rpym:53
|
||||
old "Filename List"
|
||||
@@ -603,15 +603,15 @@ translate ukrainian strings:
|
||||
|
||||
# _developer\developer.rpym:57
|
||||
old "Show Image Load Log (F4)"
|
||||
new "Показати панель завантаження зображень (F4)"
|
||||
new "Показати журнал завант. зображень (F4)"
|
||||
|
||||
# _developer\developer.rpym:60
|
||||
old "Hide Image Load Log (F4)"
|
||||
new "Сховати панель завантаження зображень (F4)"
|
||||
new "Сховати журнал завант. зображень (F4)"
|
||||
|
||||
# _developer\developer.rpym:63
|
||||
old "Image Attributes"
|
||||
new "Атрибути зображень"
|
||||
new "Атрибути зображення"
|
||||
|
||||
# _developer\developer.rpym:90
|
||||
old "[name] [attributes] (hidden)"
|
||||
@@ -639,7 +639,7 @@ translate ukrainian strings:
|
||||
|
||||
# _developer\developer.rpym:435
|
||||
old "Right-click or escape to quit."
|
||||
new "Натисніть ПКМ або ESC, щоб вийти."
|
||||
new "Натисніть ПКМ або Escape, щоб вийти."
|
||||
|
||||
# _developer\developer.rpym:467
|
||||
old "Rectangle copied to clipboard."
|
||||
@@ -655,11 +655,11 @@ translate ukrainian strings:
|
||||
|
||||
# _developer\developer.rpym:617
|
||||
old "Textures: [tex_count] ([tex_size_mb:.1f] MB)"
|
||||
new "Текстури: [tex_count] ([tex_size_mb:.1f] МБ)"
|
||||
new "Текстури: [tex_count] ([tex_size_mb:.1f] Мб)"
|
||||
|
||||
# _developer\developer.rpym:621
|
||||
old "Image cache: [cache_pct:.1f]% ([cache_size_mb:.1f] MB)"
|
||||
new "Кеш зображень: [cache_pct:.1f]% ([cache_size_mb:.1f] МБ)"
|
||||
new "Кеш зображень: [cache_pct:.1f]% ([cache_size_mb:.1f] Мб)"
|
||||
|
||||
# _developer\developer.rpym:631
|
||||
old "✔ "
|
||||
@@ -671,7 +671,7 @@ translate ukrainian strings:
|
||||
|
||||
# _developer\developer.rpym:639
|
||||
old "\n{color=#cfc}✔ predicted image (good){/color}\n{color=#fcc}✘ unpredicted image (bad){/color}\n{color=#fff}Drag to move.{/color}"
|
||||
new "\n{color=#cfc}✔ передбачене зображення (добре){/color}\n{color=#fcc}✘ непередбачене зображення (погано){/color}\n{color=#fff}Перетягніть для пересування.{/color}"
|
||||
new "\n{color=#cfc}✔ передбачене зображення (добре){/color}\n{color=#fcc}✘ раптове зображення (погано){/color}\n{color=#fff}Перетягніть, щоб перемістити.{/color}"
|
||||
|
||||
# _developer\inspector.rpym:38
|
||||
old "Displayable Inspector"
|
||||
@@ -699,7 +699,7 @@ translate ukrainian strings:
|
||||
|
||||
# _developer\inspector.rpym:145
|
||||
old " (no properties affect the displayable)"
|
||||
new " (на об’єкт не впливають жодні властивості)"
|
||||
new " (на об’єкт не впливають жодні параметри)"
|
||||
|
||||
# _developer\inspector.rpym:147
|
||||
old " (default properties omitted)"
|
||||
@@ -767,7 +767,7 @@ translate ukrainian strings:
|
||||
|
||||
# 00updater.rpy:1452
|
||||
old "[u.version] is available. Do you want to install it?"
|
||||
new "[u.version] доступно. Бажаєте її установити?"
|
||||
new "[u.version] доступно. Бажаєте її встановити?"
|
||||
|
||||
# 00updater.rpy:1454
|
||||
old "Preparing to download the updates."
|
||||
@@ -783,7 +783,7 @@ translate ukrainian strings:
|
||||
|
||||
# 00updater.rpy:1462
|
||||
old "The updates have been installed. The program will restart."
|
||||
new "Оновлення було встановлено. Програму буде перезапущено."
|
||||
new "Оновлення встановлено. Програма буде перезапущена."
|
||||
|
||||
# 00updater.rpy:1464
|
||||
old "The updates have been installed."
|
||||
@@ -823,11 +823,11 @@ translate ukrainian strings:
|
||||
|
||||
# 00accessibility.rpy:76
|
||||
old "Font Override"
|
||||
new "Перевизначення шрифту"
|
||||
new "Замінити шрифт"
|
||||
|
||||
# 00accessibility.rpy:80
|
||||
old "Default"
|
||||
new "Стандартний"
|
||||
new "Стандратний"
|
||||
|
||||
# 00accessibility.rpy:84
|
||||
old "DejaVu Sans"
|
||||
@@ -859,7 +859,7 @@ translate ukrainian strings:
|
||||
|
||||
# 00accessibility.rpy:125
|
||||
old "Text-to-speech"
|
||||
new "Текст-у-мовлення"
|
||||
new "Перетворення тексту в мовлення"
|
||||
|
||||
# 00accessibility.rpy:129
|
||||
old "Clipboard"
|
||||
@@ -879,7 +879,7 @@ translate ukrainian strings:
|
||||
|
||||
# renpy/common/00accessibility.rpy:191
|
||||
old "The options on this menu are intended to improve accessibility. They may not work with all games, and some combinations of options may render the game unplayable. This is not an issue with the game or engine. For the best results when changing fonts, try to keep the text size the same as it originally was."
|
||||
new "Параметри цього меню призначені для покращення доступності. Вони можуть працювати не з усіма іграми, а деякі комбінації параметрів можуть зробити гру неможливою для гри. Це не є проблемою гри або рушія. Для отримання кращих результатів при зміні шрифтів намагайтеся зберігати розмір тексту таким, яким він був спочатку."
|
||||
new "Параметри цього меню призначені для покращення доступності. Вони можуть працювати не з усіма іграми, а деякі комбінації параметрів можуть зробити гру неможливою для гри. Це не є проблемою гри або рушія. Для досягнення найкращих результатів при зміні шрифтів намагайтеся зберігати розмір тексту таким, яким він був спочатку."
|
||||
|
||||
# renpy/common/00accessibility.rpy:193
|
||||
old "Self-Voicing Volume Drop"
|
||||
@@ -919,7 +919,7 @@ translate ukrainian strings:
|
||||
|
||||
# renpy/common/00preferences.rpy:535
|
||||
old "mute main"
|
||||
new "без основної гучності"
|
||||
new "без основи"
|
||||
|
||||
translate ukrainian strings:
|
||||
|
||||
@@ -941,11 +941,11 @@ translate ukrainian strings:
|
||||
|
||||
# renpy/common/00director.rpy:1768
|
||||
old "Click to set transform, right click to add to transform list."
|
||||
new "Натисніть, щоб установити перетворення, клацніть ПКМ, щоб додати до списку перетворень."
|
||||
new "Натисніть, щоб встановити трансформацію, натисніть ПКМ, щоб додати до списку трансформацій."
|
||||
|
||||
# renpy/common/00director.rpy:1789
|
||||
old "Click to set, right click to add to behind list."
|
||||
new "Натисніть, щоб установити, клацніть ПКМ, щоб додати до списку."
|
||||
new "Натисніть, щоб встановити, натисніть ПКМ, щоб додати до списку."
|
||||
|
||||
# renpy/common/00gui.rpy:456
|
||||
old "This save was created on a different device. Maliciously constructed save files can harm your computer. Do you trust this save's creator and everyone who could have changed the file?"
|
||||
@@ -953,7 +953,7 @@ translate ukrainian strings:
|
||||
|
||||
# renpy/common/00gui.rpy:457
|
||||
old "Do you trust the device the save was created on? You should only choose yes if you are the device's sole user."
|
||||
new "Чи довіряєте ви пристрою, на якому було створено збереження? Ви повинні натиснути «Так», лише якщо ви є єдиним користувачем пристрою."
|
||||
new "Чи довіряєте ви пристрою, на якому було створено збереження? Ви повинні вибрати «Так», тільки якщо ви є єдиним користувачем пристрою."
|
||||
|
||||
# renpy/common/00preferences.rpy:528
|
||||
old "audio when unfocused"
|
||||
@@ -961,7 +961,7 @@ translate ukrainian strings:
|
||||
|
||||
# renpy/common/00preferences.rpy:537
|
||||
old "web cache preload"
|
||||
new "попереднє завантаження вебкешу"
|
||||
new "попер. завантаження вебкешу"
|
||||
|
||||
# renpy/common/00preferences.rpy:552
|
||||
old "voice after game menu"
|
||||
@@ -973,7 +973,7 @@ translate ukrainian strings:
|
||||
|
||||
# renpy/common/00speechbubble.rpy:349
|
||||
old "(hide)"
|
||||
new "(сховати)"
|
||||
new "(приховати)"
|
||||
|
||||
# renpy/common/00sync.rpy:70
|
||||
old "Sync downloaded."
|
||||
@@ -985,7 +985,7 @@ translate ukrainian strings:
|
||||
|
||||
# renpy/common/00sync.rpy:192
|
||||
old "The Ren'Py Sync server timed out."
|
||||
new "Час під’єднання до Ren'Py Sync закінчився."
|
||||
new "Сервер Ren'Py Sync вийшов з ладу."
|
||||
|
||||
# renpy/common/00sync.rpy:194
|
||||
old "An unknown error occurred while connecting to the Ren'Py Sync server."
|
||||
@@ -993,11 +993,11 @@ translate ukrainian strings:
|
||||
|
||||
# renpy/common/00sync.rpy:267
|
||||
old "The Ren'Py Sync server does not have a copy of this sync. The sync ID may be invalid, or it may have timed out."
|
||||
new "Сервер Ren'Py Sync не має копії цієї синхронізації. Ідентифікатор синхронізації може бути недійсним або термін його дії закінчився."
|
||||
new "Сервер Ren'Py Sync не має копії цієї синхронізації. Ідентифікатор синхронізації може бути недійсним або його термін дії закінчився."
|
||||
|
||||
# renpy/common/00sync.rpy:409
|
||||
old "Please enter the sync ID you generated.\nNever enter a sync ID you didn't create yourself."
|
||||
new "Введіть згенерований вами ідентифікатор синхронізації.\nНіколи не вводьте не створений вами ідентифікатор синхронізації."
|
||||
new "Будь ласка, введіть згенерований вами ідентифікатор синхронізації.\nНіколи не вводьте ідентифікатор синхронізації, який ви не створювали."
|
||||
|
||||
# renpy/common/00sync.rpy:428
|
||||
old "The sync ID is not in the correct format."
|
||||
@@ -1013,19 +1013,19 @@ translate ukrainian strings:
|
||||
|
||||
# renpy/common/00sync.rpy:476
|
||||
old "The sync contains a file with an invalid name."
|
||||
new "Синхронізація містить файл з недійсною назвою."
|
||||
new "Синхронізація містить файл з невірною назвою."
|
||||
|
||||
# renpy/common/00sync.rpy:529
|
||||
old "This will upload your saves to the {a=https://sync.renpy.org}Ren'Py Sync Server{/a}.\nDo you want to continue?"
|
||||
new "Ця дія вивантажить ваші збереження на {a=https://sync.renpy.org}сервер Ren'Py Sync{/a}.\nБажаєте продовжити?"
|
||||
new "Це завантажить ваші збереження на {a=https://sync.renpy.org}сервер Ren'Py Sync{/a}.\nБажаєте продовжити?"
|
||||
|
||||
# renpy/common/00sync.rpy:558
|
||||
old "Enter Sync ID"
|
||||
new "Введіть ідентифікатор синхронізації"
|
||||
new "Уведіть ідентифікатор синхронізації"
|
||||
|
||||
# renpy/common/00sync.rpy:569
|
||||
old "This will contact the {a=https://sync.renpy.org}Ren'Py Sync Server{/a}."
|
||||
new "Ця дія зв’яжеться зі {a=https://sync.renpy.org}сервером Ren'Py Sync{/a}."
|
||||
new "Зв’язок зі {a=https://sync.renpy.org}сервером Ren'Py Sync{/a}."
|
||||
|
||||
# renpy/common/00sync.rpy:596
|
||||
old "Sync Success"
|
||||
@@ -1043,114 +1043,3 @@ translate ukrainian strings:
|
||||
old "Sync Error"
|
||||
new "Помилка синхронізації"
|
||||
|
||||
translate ukrainian strings:
|
||||
|
||||
# renpy/common/00accessibility.rpy:120
|
||||
old "Accessibility Menu. Use up and down arrows to navigate, and enter to activate buttons and bars."
|
||||
new "Меню доступності. Використовуйте стрілки вгору та вниз для навігації, а клавішу Enter для взаємодії між кнопками та смуг."
|
||||
|
||||
# renpy/common/00accessibility.rpy:197
|
||||
old "Self-voicing support is limited when using a touch screen."
|
||||
new "Підтримка синтезу мовлення обмежена при використанні сенсорного екрана."
|
||||
|
||||
# renpy/common/00director.rpy:1776
|
||||
old "Customize director.transforms to add more transforms."
|
||||
new "Налаштуйте «director.transforms», щоб додати більше перетворень."
|
||||
|
||||
# renpy/common/00director.rpy:1821
|
||||
old "Click to set."
|
||||
new "Клацніть, щоб установити."
|
||||
|
||||
# renpy/common/00director.rpy:1822
|
||||
old "Customize director.transitions to add more transitions."
|
||||
new "Налаштуйте «director.transitions», щоб додати більше переходів."
|
||||
|
||||
# renpy/common/00director.rpy:1845
|
||||
old "Customize director.audio_channels to add more channels."
|
||||
new "Налаштуйте «director.audio_channels», щоб додати більше каналів."
|
||||
|
||||
# renpy/common/00gui.rpy:454
|
||||
old "Are you sure you want to continue where you left off?"
|
||||
new "Ви дійсно бажаєте продовжити з того місця, на якому зупинилися?"
|
||||
|
||||
# renpy/common/00preferences.rpy:438
|
||||
old "self voicing enable"
|
||||
new "увімкнути синтез мовлення"
|
||||
|
||||
# renpy/common/00preferences.rpy:440
|
||||
old "self voicing disable"
|
||||
new "вимкнути синтез мовлення"
|
||||
|
||||
# renpy/common/00preferences.rpy:455
|
||||
old "clipboard voicing enable"
|
||||
new "увімкнути озвучення буфера обміну"
|
||||
|
||||
# renpy/common/00preferences.rpy:457
|
||||
old "clipboard voicing disable"
|
||||
new "вимкнути озвучення буфера обміну"
|
||||
|
||||
# renpy/common/00preferences.rpy:464
|
||||
old "debug voicing enable"
|
||||
new "увімкнути налагоджувальне озвучення"
|
||||
|
||||
# renpy/common/00preferences.rpy:466
|
||||
old "debug voicing disable"
|
||||
new "вимкнути налагоджувальне озвучення"
|
||||
|
||||
# renpy/common/00preferences.rpy:586
|
||||
old "restore window position"
|
||||
new "відновити положення вікна"
|
||||
|
||||
# renpy/common/00preferences.rpy:595
|
||||
old "reset"
|
||||
new "скинути"
|
||||
|
||||
# renpy/common/00speechbubble.rpy:408
|
||||
old "(clear retained bubbles)"
|
||||
new "(очистити залишкові бульбашки)"
|
||||
|
||||
# renpy/common/00updater.rpy:505
|
||||
old "No update methods found."
|
||||
new "Методів оновлення не знайдено."
|
||||
|
||||
# renpy/common/00updater.rpy:552
|
||||
old "Could not download file list: "
|
||||
new "Не вдалося завантажити список файлів: "
|
||||
|
||||
# renpy/common/00updater.rpy:555
|
||||
old "File list digest does not match."
|
||||
new "Дайджест списку файлів не збігається."
|
||||
|
||||
# renpy/common/00updater.rpy:2072
|
||||
old "Preparing to download the game data."
|
||||
new "Підготовка до завантаження даних гри."
|
||||
|
||||
# renpy/common/00updater.rpy:2074
|
||||
old "Downloading the game data."
|
||||
new "Завантаження даних гри."
|
||||
|
||||
# renpy/common/00updater.rpy:2076
|
||||
old "The game data has been downloaded."
|
||||
new "Дані гри було завантажено."
|
||||
|
||||
# renpy/common/00updater.rpy:2078
|
||||
old "An error occured when trying to download game data:"
|
||||
new "Виникла помилка при спробі завантажити дані гри:"
|
||||
|
||||
# renpy/common/00updater.rpy:2083
|
||||
old "This game cannot be run until the game data has been downloaded."
|
||||
new "Цю гру не можна буде запустити, доки не будуть завантажені дані гри."
|
||||
|
||||
# renpy/common/00updater.rpy:2090
|
||||
old "Retry"
|
||||
new "Повторити"
|
||||
|
||||
translate ukrainian strings:
|
||||
|
||||
# renpy/common/00translation.rpy:63
|
||||
old "Translation identifier: [identifier]"
|
||||
new "Ідентифікатор перекладу: [identifier]"
|
||||
|
||||
# renpy/common/00translation.rpy:84
|
||||
old " translates [tl.filename]:[tl.linenumber]"
|
||||
new " перекладає [tl.filename]:[tl.linenumber]"
|
||||
|
||||
@@ -89,6 +89,8 @@ translate ukrainian strings:
|
||||
old "stack: print the return stack"
|
||||
new "stack: вивести стек повернення"
|
||||
|
||||
translate ukrainian strings:
|
||||
|
||||
# renpy/common/_developer/developer.rpym:51
|
||||
old "Persistent Viewer"
|
||||
new "Переглядач даних"
|
||||
@@ -97,62 +99,11 @@ translate ukrainian strings:
|
||||
old "Speech Bubble Editor (Shift+B)"
|
||||
new "Редактор мовних бульбашок (Shift+B)"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:70
|
||||
old "Show Translation Info"
|
||||
new "Показати відомості про переклад"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:73
|
||||
old "Hide Translation Info"
|
||||
new "Сховати відомості про переклад"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:69
|
||||
old "Show Translation Identifiers"
|
||||
new "Показати ідентифікатори перекладу"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:72
|
||||
old "Hide Translation Identifiers"
|
||||
new "Сховати ідентифікатори перекладу"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:81
|
||||
old "Show Filename and Line"
|
||||
new "Показати назву файлу та рядок"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:84
|
||||
old "Hide Filename and Line"
|
||||
new "Сховати назву файлу та рядок"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:127
|
||||
old "Layer [l]:"
|
||||
new "Шар [l]:"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:131
|
||||
old " [name] [attributes] (hidden)"
|
||||
new " [name] [attributes] (приховано)"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:135
|
||||
old " [name] [attributes]"
|
||||
new " [name] [attributes]"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:606
|
||||
old "\n{color=#fff}Copied to clipboard.{/color}"
|
||||
new "\n{color=#fff}Скопійовано до буфера обміну.{/color}"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:612
|
||||
old "\n{color=#fff}Click to copy.\nDrag to move.{/color}"
|
||||
new "\n{color=#fff}Клацніть для копіювання.\nПеретягніть для пересування.{/color}"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:657
|
||||
old "Click to open in editor."
|
||||
new "Клацніть, щоб відкрити в редакторі."
|
||||
|
||||
# renpy/common/00console.rpy:725
|
||||
old "The console is using short representations. To disable this, type 'long', and to re-enable, type 'short'"
|
||||
new "Консоль використовує короткі представлення. Щоб вимкнути це, введіть 'long', а щоб увімкнути, введіть 'short'"
|
||||
|
||||
# renpy/common/00console.rpy:789
|
||||
old "help: show this help\n help <expr>: show signature and documentation of <expr>"
|
||||
new "help: показує цю довідку\n help <вираз>: показує підпис та документацію <виразу>"
|
||||
|
||||
# renpy/common/00console.rpy:813
|
||||
old "Help may display undocumented functions. Please check that the function or\nclass you want to use is documented.\n\n"
|
||||
new "У довідці можуть бути недокументовані функції. Будь ласка, перевірте, чи бажана функція або\nклас задокументовано.\n\n"
|
||||
new "У довідці можуть відображатися недокументовані функції. Будь ласка, перевірте, чи функцію або\nклас, який бажаєте використати, задокументовано.\n\n"
|
||||
|
||||
|
||||
@@ -59,7 +59,7 @@ translate ukrainian strings:
|
||||
|
||||
# 00gltest.rpy:213
|
||||
old "Performance Warning"
|
||||
new "Попередження про швидкодію"
|
||||
new "Попередження про продуктивність"
|
||||
|
||||
# 00gltest.rpy:218
|
||||
old "This computer is using software rendering."
|
||||
@@ -67,7 +67,7 @@ translate ukrainian strings:
|
||||
|
||||
# 00gltest.rpy:220
|
||||
old "This computer is not using shaders."
|
||||
new "Цей пристрій не використовує шейдери."
|
||||
new "Цей пристрій не використовує шейдерів."
|
||||
|
||||
# 00gltest.rpy:222
|
||||
old "This computer is displaying graphics slowly."
|
||||
@@ -103,15 +103,15 @@ translate ukrainian strings:
|
||||
|
||||
# 00gltest.rpy:268
|
||||
old "DirectX web setup has been started. It may start minimized in the taskbar. Please follow the prompts to install DirectX."
|
||||
new "Запущено вебналаштування DirectX. Вона може згорнутися на панелі завдань. Будь ласка, дотримуйтесь вказівок для встановлення DirectX."
|
||||
new "Запущено вебналаштування DirectX. Вона може згорнутися на панелі завдань. Будь ласка, дотримуйтесь підказок для встановлення DirectX."
|
||||
|
||||
# 00gltest.rpy:272
|
||||
old "{b}Note:{/b} Microsoft's DirectX web setup program will, by default, install the Bing toolbar. If you do not want this toolbar, uncheck the appropriate box."
|
||||
new "{b}Примітка:{/b} застосунок вебналаштування DirectX від Microsoft за стандартом установлює панель інструментів Bing. Якщо вам не потрібна вона, зніміть позначку у відповідному полі."
|
||||
new "{b}Нотатка:{/b} Програма вебналаштування DirectX від Microsoft за стандартом встановлює панель інструментів Bing. Якщо вам не потрібна ця панель, зніміть позначку у відповідному полі."
|
||||
|
||||
# 00gltest.rpy:276
|
||||
old "When setup finishes, please click below to restart this program."
|
||||
new "Після завершення установлення, натисніть нижче для перезапуску програми."
|
||||
new "Після завершення налаштування, натисніть нижче, щоб перезапустити програму."
|
||||
|
||||
# 00gltest.rpy:278
|
||||
old "Restart"
|
||||
@@ -155,7 +155,7 @@ translate ukrainian strings:
|
||||
|
||||
# _errorhandling.rpym:535
|
||||
old "Copies the traceback.txt file to the clipboard."
|
||||
new "Копіює вміст файлу traceback.txt у буфер обміну."
|
||||
new "Копіює файл traceback.txt у буфер обміну."
|
||||
|
||||
# _errorhandling.rpym:562
|
||||
old "An exception has occurred."
|
||||
@@ -167,7 +167,7 @@ translate ukrainian strings:
|
||||
|
||||
# _errorhandling.rpym:584
|
||||
old "Attempts a roll back to a prior time, allowing you to save or choose a different choice."
|
||||
new "Спробує відкатити до попереднього часу, дозволяючи вам зберегтися або вибрати інший варіант."
|
||||
new "Спроба відкату до попереднього часу, що дозволяє зберегти або вибрати інший варіант."
|
||||
|
||||
# _errorhandling.rpym:587
|
||||
old "Ignore"
|
||||
@@ -175,11 +175,11 @@ translate ukrainian strings:
|
||||
|
||||
# _errorhandling.rpym:591
|
||||
old "Ignores the exception, allowing you to continue."
|
||||
new "Ігнорує виняток, дозволяючи вам продовжити."
|
||||
new "Ігнорує цей виняток, дозволяючи вам продовжити."
|
||||
|
||||
# _errorhandling.rpym:593
|
||||
old "Ignores the exception, allowing you to continue. This often leads to additional errors."
|
||||
new "Ігнорує виняток, дозволяючи вам продовжити. Найчастіше призводить до додаткових помилок."
|
||||
new "Ігнорує цей виняток, дозволяючи вам продовжити. Найчастіше це призводить до додаткових помилок."
|
||||
|
||||
# _errorhandling.rpym:597
|
||||
old "Reload"
|
||||
@@ -199,11 +199,11 @@ translate ukrainian strings:
|
||||
|
||||
# _errorhandling.rpym:614
|
||||
old "Quits the game."
|
||||
new "Виходить з гри."
|
||||
new "Виходить із гри."
|
||||
|
||||
# _errorhandling.rpym:638
|
||||
old "Parsing the script failed."
|
||||
new "Помилка розбіру скрипта."
|
||||
new "Розбір скрипта не вдався."
|
||||
|
||||
# _errorhandling.rpym:664
|
||||
old "Opens the errors.txt file in a text editor."
|
||||
@@ -211,7 +211,7 @@ translate ukrainian strings:
|
||||
|
||||
# _errorhandling.rpym:668
|
||||
old "Copies the errors.txt file to the clipboard."
|
||||
new "Копіює вміст файлу errors.txt у буфер обміну."
|
||||
new "Копіює файл errors.txt у буфер обміну."
|
||||
|
||||
# _errorhandling.rpym:542
|
||||
old "Copy BBCode"
|
||||
@@ -219,7 +219,7 @@ translate ukrainian strings:
|
||||
|
||||
# _errorhandling.rpym:544
|
||||
old "Copies the traceback.txt file to the clipboard as BBcode for forums like https://lemmasoft.renai.us/."
|
||||
new "Копіює вміст файлу traceback.txt у буфер обміну як BBCode для форумів як https://lemmasoft.renai.us/."
|
||||
new "Копіює файл traceback.txt у буфер обміну як BBCode для форумів як https://lemmasoft.renai.us/."
|
||||
|
||||
# _errorhandling.rpym:546
|
||||
old "Copy Markdown"
|
||||
@@ -227,15 +227,15 @@ translate ukrainian strings:
|
||||
|
||||
# _errorhandling.rpym:548
|
||||
old "Copies the traceback.txt file to the clipboard as Markdown for Discord."
|
||||
new "Копіює вміст файлу traceback.txt у буфер обміну як Markdown для Discord."
|
||||
new "Копіює файл traceback.txt у буфер обміну як Markdown для Discord."
|
||||
|
||||
# _errorhandling.rpym:683
|
||||
old "Copies the errors.txt file to the clipboard as BBcode for forums like https://lemmasoft.renai.us/."
|
||||
new "Копіює вміст файлу errors.txt у буфер обміну як BBCode для форумів як https://lemmasoft.renai.us/."
|
||||
new "Копіює файл errors.txt у буфер обміну як BBCode для форумів як https://lemmasoft.renai.us/."
|
||||
|
||||
# _errorhandling.rpym:687
|
||||
old "Copies the errors.txt file to the clipboard as Markdown for Discord."
|
||||
new "Копіює вміст файлу errors.txt у буфер обміну як Markdown для Discord."
|
||||
new "Копіює файл errors.txt у буфер обміну як Markdown для Discord."
|
||||
|
||||
# renpy/common/00gltest.rpy:100
|
||||
old "Force GL Renderer"
|
||||
@@ -267,11 +267,11 @@ translate ukrainian strings:
|
||||
|
||||
# renpy/common/00gltest.rpy:256
|
||||
old "More details on how to fix this can be found in the {a=[url]}documentation{/a}."
|
||||
new "Детальніше про те, як це можна виправити, дивіться у {a=[url]}документації{/a}."
|
||||
new "Більше інформації про те, як це може бути виправлено, дивіться в {a=[url]}документації{/a}."
|
||||
|
||||
# renpy/common/00gltest.rpy:273
|
||||
old "Change render options"
|
||||
new "Змінити параметри візуалізації"
|
||||
new "Змінити параметри візцалізації"
|
||||
|
||||
# renpy/common/00gamepad.rpy:58
|
||||
old "Press or move the '[control!s]' [kind]."
|
||||
@@ -279,7 +279,7 @@ translate ukrainian strings:
|
||||
|
||||
# renpy/common/00gltest.rpy:136
|
||||
old "Enable (No Blocklist)"
|
||||
new "Увімкнути (без списку блоку)"
|
||||
new "Увімкнути (без списку блокування)"
|
||||
|
||||
# renpy/common/00gltest.rpy:259
|
||||
old "The {a=edit:1:log.txt}log.txt{/a} file may contain information to help you determine what is wrong with your computer."
|
||||
|
||||
@@ -13,10 +13,6 @@ translate ukrainian strings:
|
||||
old "## Calling gui.init resets the styles to sensible default values, and sets the width and height of the game."
|
||||
new "## Виклик gui.init скидає стилі до розумних значень за замовчуванням і встановлює ширину та висоту гри."
|
||||
|
||||
# gui/game/gui.rpy:14
|
||||
old "## Enable checks for invalid or unstable properties in screens or transforms"
|
||||
new "## Увімкнути перевірку недійсних або нестабільних властивостей в екранах або перетвореннях"
|
||||
|
||||
# gui/game/gui.rpy:17
|
||||
old "## GUI Configuration Variables"
|
||||
new "## Змінні конфігурації GUI"
|
||||
@@ -31,11 +27,11 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/gui.rpy:25
|
||||
old "## An accent color used throughout the interface to label and highlight text."
|
||||
new "## Акцентований колір, який використовується в інтерфейсі для позначення та виділення тексту."
|
||||
new "## Колір акценту, який використовується в інтерфейсі для позначення та виділення тексту."
|
||||
|
||||
# gui/game/gui.rpy:29
|
||||
old "## The color used for a text button when it is neither selected nor hovered."
|
||||
new "## Колір, який використовується для кнопки з текстом, коли її не вибрано або не наведено вказівником."
|
||||
new "## Колір, який використовується для текстової кнопки, коли вона не вибрана і не наведена."
|
||||
|
||||
# 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."
|
||||
@@ -43,23 +39,23 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/gui.rpy:36
|
||||
old "## The color that is used for buttons and bars that are hovered."
|
||||
new "## Колір, який використовується для кнопок і смуг, на які наводяться вказівником."
|
||||
new "## Колір, який використовується для кнопок і смуг, на які наводяться."
|
||||
|
||||
# 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 "## Колір, який використовується для кнопки з текстом, коли її вибрано, але користувач не в програмі. Кнопку вибрано, якщо це поточний екран або значення параметра."
|
||||
new "## Колір, який використовується для текстової кнопки, коли вона вибрана, але не в фокусі. Кнопку вибрано, якщо це поточний екран або значення параметра."
|
||||
|
||||
# gui/game/gui.rpy:43
|
||||
old "## The color used for a text button when it cannot be selected."
|
||||
new "## Колір кнопки з текстом, коли її неможливо вибрати."
|
||||
new "## Колір текстової кнопки, якщо її неможливо вибрати."
|
||||
|
||||
# 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 "## Кольори, що використовуються для незаповнених частин смуг. Вони не використовуються безпосередньо, а використовуються під час повторного створення файлів зображень смуги."
|
||||
new "## Кольори, що використовуються для незаповнених частин стовпчиків. Вони не використовуються безпосередньо, а використовуються під час повторного створення файлів зображень стовпчика."
|
||||
|
||||
# gui/game/gui.rpy:51
|
||||
old "## The colors used for dialogue and menu choice text."
|
||||
new "## Кольори, які використовуються для тексту діалогу та меню вибору."
|
||||
new "## Кольори, які використовуються для тексту діалогу та вибору меню."
|
||||
|
||||
# gui/game/gui.rpy:56
|
||||
old "## Fonts and Font Sizes"
|
||||
@@ -71,7 +67,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/gui.rpy:61
|
||||
old "## The font used for character names."
|
||||
new "## Шрифт, який використовується для імен персонажів."
|
||||
new "## Шрифт, який використовується для імен символів."
|
||||
|
||||
# gui/game/gui.rpy:64
|
||||
old "## The font used for out-of-game text."
|
||||
@@ -87,11 +83,11 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/gui.rpy:73
|
||||
old "## The size of text in the game's user interface."
|
||||
new "## Розмір тексту в інтерфейсі гри."
|
||||
new "## Розмір тексту в інтерфейсі користувача гри."
|
||||
|
||||
# gui/game/gui.rpy:76
|
||||
old "## The size of labels in the game's user interface."
|
||||
new "## Розмір міток в інтерфейсі гри."
|
||||
new "## Розмір міток в інтерфейсі користувача гри."
|
||||
|
||||
# gui/game/gui.rpy:79
|
||||
old "## The size of text on the notify screen."
|
||||
@@ -127,7 +123,7 @@ translate ukrainian strings:
|
||||
|
||||
# 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 "## Розташування імені персонажа, відносно текстового поля. Це може бути ціла кількість пікселів зліва чи зверху або 0,5 до центру."
|
||||
new "## Розташування імені персонажа, що говорить, відносно текстового поля. Це може бути ціла кількість пікселів зліва чи зверху або 0,5 до центру."
|
||||
|
||||
# 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."
|
||||
@@ -139,11 +135,11 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/gui.rpy:120
|
||||
old "## The borders of the box containing the character's name, in left, top, right, bottom order."
|
||||
new "## Межі поля, що містять імʼя персонажа, у порядку зліва, зверху, справа, знизу."
|
||||
new "## Межі поля, що містять ім'я персонажа, у порядку зліва, зверху, справа, знизу."
|
||||
|
||||
# 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 "## Якщо встановлено «True», тло поля імен буде мозаїкою, якщо «False», тло поля імен буде масштабовано."
|
||||
new "## Якщо True, фон поля імен буде мозаїкою, якщо False, фон вікна імен буде масштабовано."
|
||||
|
||||
# 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."
|
||||
@@ -163,11 +159,11 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/gui.rpy:145
|
||||
old "## These variables, along with the image files in gui/button, control aspects of how buttons are displayed."
|
||||
new "## Ці змінні разом із файлами зображень у gui/button контролюють аспекти показу кнопок."
|
||||
new "## Ці змінні разом із файлами зображень у gui/button контролюють аспекти відображення кнопок."
|
||||
|
||||
# gui/game/gui.rpy:148
|
||||
old "## The width and height of a button, in pixels. If None, Ren'Py computes a size."
|
||||
new "## Ширина та висота кнопки в пікселях. Якщо встановлено «None», Ren'Py обчислить розмір."
|
||||
new "## Ширина та висота кнопки в пікселях. Якщо немає, Ren'Py обчислює розмір."
|
||||
|
||||
# gui/game/gui.rpy:152
|
||||
old "## The borders on each side of the button, in left, top, right, bottom order."
|
||||
@@ -175,7 +171,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/gui.rpy:155
|
||||
old "## If True, the background image will be tiled. If False, the background image will be linearly scaled."
|
||||
new "## Якщо встановлено «True», зображення тла буде мозаїчно. Якщо «False», зображення тла буде лінійно масштабовано."
|
||||
new "## Якщо True, фонове зображення буде мозаїчно. Якщо False, фонове зображення буде лінійно масштабовано."
|
||||
|
||||
# gui/game/gui.rpy:159
|
||||
old "## The font used by the button."
|
||||
@@ -191,11 +187,11 @@ translate ukrainian strings:
|
||||
|
||||
# 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 "## Горизонтальне вирівнювання тексту кнопки. (0,0 — ліворуч, 0,5 — центр, 1,0 — праворуч)."
|
||||
new "## Горизонтальне вирівнювання тексту кнопки. (0,0 ліворуч, 0,5 центр, 1,0 праворуч)."
|
||||
|
||||
# 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 "## Ці змінні перевизначають налаштування для різних типів кнопок. Перегляньте документацію про GUI, щоб дізнатися про типи доступних кнопок і для чого кожна з них використовується."
|
||||
new "## Ці змінні перекривають налаштування для різних типів кнопок. Перегляньте документацію gui, щоб дізнатися про типи доступних кнопок і для чого кожна з них використовується."
|
||||
|
||||
# gui/game/gui.rpy:180
|
||||
old "## These customizations are used by the default interface:"
|
||||
@@ -215,23 +211,23 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/gui.rpy:218
|
||||
old "## File Slot Buttons"
|
||||
new "## Кнопки комірок збережень"
|
||||
new "## Кнопки слотів файлів"
|
||||
|
||||
# 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 "## Кнопка комірки збереження — це особливий вид кнопки. Він містить мале зображення та текст, що описує вміст комірки збереження. Комірка збереження використовує файли зображень у gui/button, як і інші типи кнопок."
|
||||
new "## Кнопка слота файлів — це особливий вид кнопки. Він містить ескіз зображення та текст, що описує вміст гнізда збереження. Слот збереження використовує файли зображень у gui/button, як і інші типи кнопок."
|
||||
|
||||
# gui/game/gui.rpy:224
|
||||
old "## The save slot button."
|
||||
new "## Кнопка комірки збереження."
|
||||
new "## Кнопка збереження слота."
|
||||
|
||||
# gui/game/gui.rpy:234
|
||||
old "## The width and height of thumbnails used by the save slots."
|
||||
new "## Ширина та висота малих зображень, що використовуються комірками збереження."
|
||||
new "## Ці змінні керують розташуванням і відстанню між різними елементами інтерфейсу користувача."
|
||||
|
||||
# gui/game/gui.rpy:238
|
||||
old "## The number of columns and rows in the grid of save slots."
|
||||
new "## Кількість стовпців і рядків у сітці комірок збереження."
|
||||
new "## Ширина та висота мініатюр, що використовуються слотами для збереження."
|
||||
|
||||
# gui/game/gui.rpy:243
|
||||
old "## Positioning and Spacing"
|
||||
@@ -239,7 +235,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/gui.rpy:245
|
||||
old "## These variables control the positioning and spacing of various user interface elements."
|
||||
new "## Ці змінні керують розташуванням і відстанню між різними елементами інтерфейсу."
|
||||
new "## Ці змінні керують розташуванням і відстанню між різними елементами інтерфейсу користувача."
|
||||
|
||||
# gui/game/gui.rpy:248
|
||||
old "## The position of the left side of the navigation buttons, relative to the left side of the screen."
|
||||
@@ -251,11 +247,11 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/gui.rpy:255
|
||||
old "## The vertical position of the notify screen."
|
||||
new "## Вертикальна позиція екрана сповіщень."
|
||||
new "## Вертикальне положення екрана сповіщень."
|
||||
|
||||
# gui/game/gui.rpy:258
|
||||
old "## The spacing between menu choices."
|
||||
new "## Інтервал між елементами у меню вибору."
|
||||
new "## Інтервал між пунктами меню."
|
||||
|
||||
# gui/game/gui.rpy:261
|
||||
old "## Buttons in the navigation section of the main and game menus."
|
||||
@@ -275,7 +271,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/gui.rpy:273
|
||||
old "## The spacing between file slots."
|
||||
new "## Відстань між комірками збережень."
|
||||
new "## Відстань між слотами файлів."
|
||||
|
||||
# gui/game/gui.rpy:276
|
||||
old "## The position of the main menu text."
|
||||
@@ -287,7 +283,7 @@ translate ukrainian strings:
|
||||
|
||||
# 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 "## Ці змінні керують виглядом рамок, що можуть містити компоненти інтерфейсу, коли накладання або вікно відсутні."
|
||||
new "## Ці змінні керують виглядом рамок, що можуть містити компоненти інтерфейсу користувача, коли накладання або вікно відсутні."
|
||||
|
||||
# gui/game/gui.rpy:285
|
||||
old "## Generic frames."
|
||||
@@ -299,7 +295,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/gui.rpy:291
|
||||
old "## The frame that is used as part of the skip screen."
|
||||
new "## Рамка, яка використовується як частина екрана пропуску."
|
||||
new "## Рамка, який використовується як частина екрана пропуску."
|
||||
|
||||
# gui/game/gui.rpy:294
|
||||
old "## The frame that is used as part of the notify screen."
|
||||
@@ -307,7 +303,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/gui.rpy:297
|
||||
old "## Should frame backgrounds be tiled?"
|
||||
new "## Чи слід фонові рамки розміщувати мозаїчно?"
|
||||
new "## Чи слід фонові рамки розміщувати плиткою?"
|
||||
|
||||
# gui/game/gui.rpy:301
|
||||
old "## Bars, Scrollbars, and Sliders"
|
||||
@@ -315,11 +311,11 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/gui.rpy:303
|
||||
old "## These control the look and size of bars, scrollbars, and sliders."
|
||||
new "## Ці керують виглядом і розміром панель, смуг прокрутки та повзунків."
|
||||
new "## Це керує виглядом і розміром смуг, смуг прокрутки та повзунків."
|
||||
|
||||
# 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 "## Стандартний інтерфейс використовує лише повзунки та вертикальні смуги прокрутки. Усі інші смуги використовуються лише на екранах, написаних автором."
|
||||
new "## GUI за замовчуванням використовує лише повзунки та вертикальні смуги прокручування. Усі інші смужки використовуються лише на екранах, написаних автором."
|
||||
|
||||
# gui/game/gui.rpy:308
|
||||
old "## The height of horizontal bars, scrollbars, and sliders. The width of vertical bars, scrollbars, and sliders."
|
||||
@@ -327,7 +323,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/gui.rpy:314
|
||||
old "## True if bar images should be tiled. False if they should be linearly scaled."
|
||||
new "## True якщо зображення панелей мають бути мозаїчно. False, якщо вони повинні бути лінійно масштабовані."
|
||||
new "## True якщо зображення панелей мають бути мозаїками. False, якщо вони повинні бути лінійно масштабовані."
|
||||
|
||||
# gui/game/gui.rpy:319
|
||||
old "## Horizontal borders."
|
||||
@@ -339,7 +335,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/gui.rpy:329
|
||||
old "## What to do with unscrollable scrollbars in the gui. \"hide\" hides them, while None shows them."
|
||||
new "## Що робити з непрокручуваними смугами прокрутки в інтерфейсі. Значення «hide» приховує їх, а «None» показує їх."
|
||||
new "## Що робити з непрокручуваними смугами прокручування в gui. \"hide\" приховує їх, а «Нічого» показує їх."
|
||||
|
||||
# gui/game/gui.rpy:334
|
||||
old "## History"
|
||||
@@ -355,16 +351,12 @@ translate ukrainian strings:
|
||||
|
||||
# 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 "## Висота запису на екрані історії або «None», щоб зробити висоту змінною шляхом швидкодії."
|
||||
new "## Висота запису на екрані історії або «Нічого», щоб зробити висоту змінною за рахунок продуктивності."
|
||||
|
||||
# gui/game/gui.rpy:345
|
||||
old "## The position, width, and alignment of the label giving the name of the speaking character."
|
||||
new "## Положення, ширина та вирівнювання мітки, що вказує ім’я персонажа, що говорить."
|
||||
|
||||
# gui/game/gui.rpy:347
|
||||
old "## Additional space to add between history screen entries."
|
||||
new "## Додатковий простір для додавання між записами на екрані «Історія»."
|
||||
|
||||
# gui/game/gui.rpy:352
|
||||
old "## The position, width, and alignment of the dialogue text."
|
||||
new "## Позиція, ширина та вирівнювання тексту діалогу."
|
||||
@@ -379,7 +371,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/gui.rpy:363
|
||||
old "## The borders of the background of the NVL-mode background window."
|
||||
new "## Межі тла вікна заднього плану режиму NVL."
|
||||
new "## Межі фону заднього плану режиму NVL."
|
||||
|
||||
# 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."
|
||||
@@ -407,7 +399,7 @@ translate ukrainian strings:
|
||||
|
||||
# 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 "## Це визначає, де дозволений розрив рядка. Стандартне значення підходить для більшості мов. Список доступних значень можна знайти на https://www.renpy.org/doc/html/style_properties.html#style-property-language"
|
||||
new "## Це визначає, де дозволений розрив рядка. Стандартне значення підходить для більшості мов. Список доступних значень можна знайти за адресою https://www.renpy.org/doc/html/style_properties.html#style-property-language"
|
||||
|
||||
# gui/game/gui.rpy:412
|
||||
old "## Mobile devices"
|
||||
@@ -415,15 +407,15 @@ translate ukrainian strings:
|
||||
|
||||
# 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 "## Це збільшує розмір кнопок швидкої панелі доступу, щоб їх було легше торкатися на планшетах і телефонах."
|
||||
new "## Це збільшує розмір швидких кнопок, щоб їх було легше торкатися на планшетах і телефонах."
|
||||
|
||||
# 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 "## Це змінює розмір і відстань між різними елементами інтерфейсу, щоб вони були видимими на телефонах."
|
||||
new "## Це змінює розмір і відстань між різними елементами gui, щоб вони були видимими на телефонах."
|
||||
|
||||
# gui/game/gui.rpy:429
|
||||
old "## Font sizes."
|
||||
new "## Розміри шрифтів"
|
||||
new "## Розміри шрифту"
|
||||
|
||||
# gui/game/gui.rpy:437
|
||||
old "## Adjust the location of the textbox."
|
||||
@@ -435,8 +427,15 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/gui.rpy:457
|
||||
old "## File button layout."
|
||||
new "## Макет кнопки збереження."
|
||||
new "## Макет кнопки файлу."
|
||||
|
||||
# gui/game/gui.rpy:461
|
||||
old "## NVL-mode."
|
||||
new "## NVL-режим."
|
||||
|
||||
translate ukrainian strings:
|
||||
|
||||
# gui/game/gui.rpy:14
|
||||
old "## Enable checks for invalid or unstable properties in screens or transforms"
|
||||
new "## Увімкнути перевірку недійсних або нестабільних властивостей у екранах або перетвореннях"
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/options.rpy:4
|
||||
old "## Lines beginning with two '#' marks are comments, and you shouldn't uncomment them. Lines beginning with a single '#' mark are commented-out code, and you may want to uncomment them when appropriate."
|
||||
new "## Рядки, що починаються з двох решіток «##» є коментарями і вам не потрібно розкоментовувати їх. Рядки, що починаються з однієї решітки «#» є закоментованим кодом, і ви можете за потреби розкоментувати їх."
|
||||
new "## Рядки, що починаються з двох позначок «#», є коментарями, і ви не повинні розкоментувати їх. Рядки, що починаються з одного знака «#», є закоментованим кодом, і ви можете за потреби розкоментувати їх."
|
||||
|
||||
# gui/game/options.rpy:10
|
||||
old "## Basics"
|
||||
@@ -15,7 +15,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/options.rpy:12
|
||||
old "## A human-readable name of the game. This is used to set the default window title, and shows up in the interface and error reports."
|
||||
new "## Зрозуміла назва гри. Використовується для задання заголовка вікна за стандартом і показується в інтерфейсі та звітах про помилки."
|
||||
new "## Зрозуміла назва гри. Це використовується для встановлення заголовка вікна за замовчуванням і відображається в інтерфейсі та звітах про помилки."
|
||||
|
||||
# gui/game/options.rpy:15
|
||||
old "## The _() surrounding the string marks it as eligible for translation."
|
||||
@@ -23,11 +23,11 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/options.rpy:17
|
||||
old "Ren'Py 7 Default GUI"
|
||||
new "Стандартний GUI Ren'Py 7"
|
||||
new "Графічний інтерфейс Ren'Py 7 за замовчуванням"
|
||||
|
||||
# gui/game/options.rpy:20
|
||||
old "## Determines if the title given above is shown on the main menu screen. Set this to False to hide the title."
|
||||
new "## Визначає, чи наведений вище заголовок показано на екрані головного меню. Установіть значення «False» для приховання заголовка."
|
||||
new "## Визначає, чи заголовок, наведений вище, відображається на екрані головного меню. Встановіть значення False, щоб приховати назву."
|
||||
|
||||
# gui/game/options.rpy:26
|
||||
old "## The version of the game."
|
||||
@@ -35,27 +35,27 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/options.rpy:31
|
||||
old "## Text that is placed on the game's about screen. Place the text between the triple-quotes, and leave a blank line between paragraphs."
|
||||
new "## Текст, який розміщено на екрані «Про гру». Поставте текст між потрійними лапками, а між абзацами залиште порожній рядок."
|
||||
new "## Текст, який розміщується на екрані інформації про гру. Поставте текст між потрійними лапками, а між абзацами залиште порожній рядок."
|
||||
|
||||
# gui/game/options.rpy:38
|
||||
old "## A short name for the game used for executables and directories in the built distribution. This must be ASCII-only, and must not contain spaces, colons, or semicolons."
|
||||
new "## Коротка назва гри, яка використовується для виконуваних файлів і тек у вбудованому дистрибутиві. Дозволено лише символи ASCII та не повинно містити пробілів, двокрапок чи крапок з комою."
|
||||
new "## Коротка назва гри, яка використовується для виконуваних файлів і тек у вбудованому дистрибутиві. Це має бути лише ASCII і не повинно містити пробілів, двокрапки чи крапки з комою."
|
||||
|
||||
# gui/game/options.rpy:45
|
||||
old "## Sounds and music"
|
||||
new "## Звуки й музика"
|
||||
new "## Звуки і музика"
|
||||
|
||||
# gui/game/options.rpy:47
|
||||
old "## These three variables control, among other things, which mixers are shown to the player by default. Setting one of these to False will hide the appropriate mixer."
|
||||
new "## Ці три змінні визначають, серед іншого, які мікшери показуватимуться гравцеві за стандартом. Установивши значення «False» одній з них, відповідний мікшер буде приховано."
|
||||
new "## Ці три змінні керують, серед іншого, тим, які міксери відображаються гравцеві за замовчуванням. Встановлення для одного з них значення False приховає відповідний мікшер."
|
||||
|
||||
# gui/game/options.rpy:56
|
||||
old "## To allow the user to play a test sound on the sound or voice channel, uncomment a line below and use it to set a sample sound to play."
|
||||
new "## Щоб дозволити користувачеві відтворювати тестовий звук на звуковому або голосовому каналі, розкоментуйте рядок нижче та скористайтеся ним, щоб задати зразок звуку для відтворення."
|
||||
new "## Щоб дозволити користувачеві відтворювати тестовий звук на звуковому або голосовому каналі, розкоментуйте рядок нижче та використовуйте його, щоб встановити зразок звуку для відтворення."
|
||||
|
||||
# gui/game/options.rpy:63
|
||||
old "## Uncomment the following line to set an audio file that will be played while the player is at the main menu. This file will continue playing into the game, until it is stopped or another file is played."
|
||||
new "## Розкоментуйте наступний рядок, щоб налаштувати аудіофайл, який відтворюватиметься, коли гравець у головному меню. Цей файл продовжуватиме відтворюватися у грі, доки його не буде зупинено або не буде відтворено інший файл."
|
||||
new "## Розкоментуйте наступний рядок, щоб налаштувати аудіофайл, який відтворюватиметься, коли плеєр перебуває в головному меню. Цей файл продовжуватиме відтворюватися в грі, доки його не буде зупинено або не буде відтворено інший файл."
|
||||
|
||||
# gui/game/options.rpy:70
|
||||
old "## Transitions"
|
||||
@@ -63,7 +63,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/options.rpy:72
|
||||
old "## These variables set transitions that are used when certain events occur. Each variable should be set to a transition, or None to indicate that no transition should be used."
|
||||
new "## Ці змінні встановлюють переходи, які використовуються, коли відбуваються певні події. Кожна змінна має бути встановлена на певний перехід або «None», щоб вказати, що перехід не слід використовувати."
|
||||
new "## Ці змінні встановлюють переходи, які використовуються, коли відбуваються певні події. Кожна змінна має бути встановлена на перехід або None, щоб вказати, що перехід не слід використовувати."
|
||||
|
||||
# gui/game/options.rpy:76
|
||||
old "## Entering or exiting the game menu."
|
||||
@@ -83,7 +83,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/options.rpy:97
|
||||
old "## A variable to set the transition used when the game starts does not exist. Instead, use a with statement after showing the initial scene."
|
||||
new "## Змінна для встановлення переходу, який використовується під час запуску гри, не існує. Замість цього використовуйте оператор «with» після показу початкової сцени."
|
||||
new "## Змінна для встановлення переходу, який використовується під час запуску гри, не існує. Замість цього використовуйте оператор with після показу початкової сцени."
|
||||
|
||||
# gui/game/options.rpy:102
|
||||
old "## Window management"
|
||||
@@ -91,11 +91,11 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/options.rpy:104
|
||||
old "## This controls when the dialogue window is displayed. If \"show\", it is always displayed. If \"hide\", it is only displayed when dialogue is present. If \"auto\", the window is hidden before scene statements and shown again once dialogue is displayed."
|
||||
new "## Цей параметр визначає час показу діалогового вікна. Якщо задано «show», воно завжди показуватиметься. Якщо задано «hide», воно показуватиметься лише за наявності діалогу. Якщо задано «auto», вікно буде приховано перед операторами сцени та показано знову, коли відобразиться діалог."
|
||||
new "## Цей параметр визначає час відображення діалогового вікна. Якщо \"show\", він завжди відображається. Якщо \"hide\", воно відображається лише за наявності діалогу. Якщо \"auto\", вікно буде приховано перед операторами сцени та показано знову, коли відобразиться діалог."
|
||||
|
||||
# gui/game/options.rpy:109
|
||||
old "## After the game has started, this can be changed with the \"window show\", \"window hide\", and \"window auto\" statements."
|
||||
new "## Після початку гри це можна змінити через оператори «window show», «window hide» та «window auto»."
|
||||
new "## Після початку гри це можна змінити за допомогою операторів \"window show\", \"window hide\" і \"window auto\"."
|
||||
|
||||
# gui/game/options.rpy:115
|
||||
old "## Transitions used to show and hide the dialogue window"
|
||||
@@ -103,23 +103,23 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/options.rpy:121
|
||||
old "## Preference defaults"
|
||||
new "## Стандартні налаштування"
|
||||
new "## Параметри за замовчуванням"
|
||||
|
||||
# gui/game/options.rpy:123
|
||||
old "## Controls the default text speed. The default, 0, is infinite, while any other number is the number of characters per second to type out."
|
||||
new "## Керує стандартною швидкістю друку тексту. Стандартне значення, 0, означає різку появу тексту, а будь-яке інше число означатиме кількість символів за секунду для друку."
|
||||
new "## Керує швидкістю тексту за замовчуванням. За замовчуванням, 0, є нескінченним, тоді як будь-яке інше число означає кількість символів за секунду, які потрібно ввести."
|
||||
|
||||
# gui/game/options.rpy:129
|
||||
old "## The default auto-forward delay. Larger numbers lead to longer waits, with 0 to 30 being the valid range."
|
||||
new "## Затримка автоматичного перемотування за стандартом. Більші значення призводять до довшого очікування, допустимий діапазон від 0 до 30."
|
||||
new "## Затримка автоматичного пересилання за замовчуванням. Більші числа призводять до довшого очікування, при цьому допустимим діапазоном є від 0 до 30."
|
||||
|
||||
# gui/game/options.rpy:135
|
||||
old "## Save directory"
|
||||
new "## Тека збережень"
|
||||
new "## Зберегти теку"
|
||||
|
||||
# gui/game/options.rpy:137
|
||||
old "## Controls the platform-specific place Ren'Py will place the save files for this game. The save files will be placed in:"
|
||||
new "## Дозволяє вказати місце на платформі, куди Ren'Py зберігатиме файли збережень для цієї гри. Місце розміщення файлів збереження:"
|
||||
new "## Контролює місце, де Ren'Py буде розміщувати файли збереження для цієї гри. Файли збереження будуть розміщені в:"
|
||||
|
||||
# gui/game/options.rpy:140
|
||||
old "## Windows: %APPDATA\\RenPy\\<config.save_directory>"
|
||||
@@ -135,7 +135,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/options.rpy:146
|
||||
old "## This generally should not be changed, and if it is, should always be a literal string, not an expression."
|
||||
new "## Як правило, його не слід змінювати, а якщо змінювати, то це завжди має бути буквальний рядок, а не вираз."
|
||||
new "## Як правило, це не слід змінювати, і якщо це так, завжди має бути літеральний рядок, а не вираз."
|
||||
|
||||
# gui/game/options.rpy:152
|
||||
old "## Icon"
|
||||
@@ -143,19 +143,19 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/options.rpy:154
|
||||
old "## The icon displayed on the taskbar or dock."
|
||||
new "## Значок, що показується на панелі завдань або док-станції."
|
||||
new "## Значок, що відображається на панелі завдань або док-станції."
|
||||
|
||||
# gui/game/options.rpy:159
|
||||
old "## Build configuration"
|
||||
new "## Конфігурація збірки"
|
||||
new "## Створити конфігурацію"
|
||||
|
||||
# gui/game/options.rpy:161
|
||||
old "## This section controls how Ren'Py turns your project into distribution files."
|
||||
new "## Цей розділ керує тим, як Ren'Py перетворює ваш проєкт на файли для розповсюдження."
|
||||
new "## Цей розділ керує тим, як Ren'Py перетворює ваш проєкт у файли розповсюдження."
|
||||
|
||||
# gui/game/options.rpy:166
|
||||
old "## The following functions take file patterns. File patterns are case- insensitive, and matched against the path relative to the base directory, with and without a leading /. If multiple patterns match, the first is used."
|
||||
new "## Наступні функції приймають шаблони файлів. Шаблони файлів не залежать від регістру і збігаються за шляхом відносно основної теки, з та без скісної риски «/» на початку. Якщо збігається декілька шаблонів, використовується перший."
|
||||
new "## Наступні функції приймають шаблони файлів. Шаблони файлів не чутливі до регістру та зіставляються зі шляхом відносно основної теки, з / без нього на початку. Якщо збігається декілька шаблонів, використовується перший."
|
||||
|
||||
# gui/game/options.rpy:171
|
||||
old "## In a pattern:"
|
||||
@@ -163,42 +163,44 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/options.rpy:173
|
||||
old "## / is the directory separator."
|
||||
new "## / є роздільником тек."
|
||||
new "## / є роздільником теки."
|
||||
|
||||
# gui/game/options.rpy:175
|
||||
old "## * matches all characters, except the directory separator."
|
||||
new "## * збігається з усіма символами, окрім роздільника тек."
|
||||
new "## * відповідає всім символам, крім роздільника теки."
|
||||
|
||||
# gui/game/options.rpy:177
|
||||
old "## ** matches all characters, including the directory separator."
|
||||
new "## ** збігаються з усіма символами, включаючи роздільника тек."
|
||||
new "## ** відповідає всім символам, включаючи роздільник теки."
|
||||
|
||||
# gui/game/options.rpy:179
|
||||
old "## For example, \"*.txt\" matches txt files in the base directory, \"game/**.ogg\" matches ogg files in the game directory or any of its subdirectories, and \"**.psd\" matches psd files anywhere in the project."
|
||||
new "## Наприклад, «*.txt» збігається з файламм txt у базовій теці, «game/**.ogg» збігається з файлами ogg у теці «game» або будь-якій з її підтек, а «**.psd» збігається з файлами psd будь-де в проєкті."
|
||||
new "## Наприклад, \"*.txt\" відповідає файлам txt у базовому каталозі, \"game/**.ogg\" відповідає файлам ogg у каталозі гри або будь-якому з його під-тек, а \"**.psd \" відповідає файлам psd будь-де в проєкті."
|
||||
|
||||
# gui/game/options.rpy:183
|
||||
old "## Classify files as None to exclude them from the built distributions."
|
||||
new "## Для виключення файлів із збірки файлів розповсюдження, класифікуйте їх як «None»."
|
||||
new "## Класифікуйте файли як None, щоб виключити їх із вбудованих дистрибутивів."
|
||||
|
||||
# gui/game/options.rpy:191
|
||||
old "## To archive files, classify them as 'archive'."
|
||||
new "## Для архівації файлів, класифікуйте їх як «archive»."
|
||||
new "## Щоб архівувати файли, класифікуйте їх як 'archive'."
|
||||
|
||||
# gui/game/options.rpy:196
|
||||
old "## Files matching documentation patterns are duplicated in a mac app build, so they appear in both the app and the zip file."
|
||||
new "## Файли, що відповідають шаблонам документації, дублюються у збірці застосунку для Mac, тому вони зʼявляються як застосунок, так і zip-файл."
|
||||
new "## Файли, що відповідають шаблонам документації, дублюються у створенні програми Mac, тому вони з’являються як у програмі, так і в zip-файлі."
|
||||
|
||||
# gui/game/options.rpy:203
|
||||
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 "## Для завантаження файлів розширення та здійснення покупок у застосунку потрібен ліцензійний ключ Google Play. Його можна знайти на сторінці «Сервіси та API» в консолі розробника Google Play."
|
||||
new "## Для завантаження файлів розширення та здійснення покупок у програмі потрібен ліцензійний ключ Google Play. Його можна знайти на сторінці \"Services & APIs\" консолі розробника Google Play."
|
||||
|
||||
# gui/game/options.rpy:210
|
||||
old "## The username and project name associated with an itch.io project, separated by a slash."
|
||||
new "## Ім’я користувача та назва проєкту, пов’язані з проєктом itch.io, розділені скісною рискою."
|
||||
|
||||
|
||||
translate ukrainian strings:
|
||||
|
||||
# gui/game/options.rpy:203
|
||||
old "## A Google Play license key is required to perform in-app purchases. It can be found in the Google Play developer console, under \"Monetize\" > \"Monetization Setup\" > \"Licensing\"."
|
||||
new "## Для здійснення внутрішньоігрового придбання потрібен ліцензійний ключ Google Play. Його можна знайти в консолі розробника Google Play у розділі «Монетизація» > «Налаштування монетизації» > «Ліцензування»."
|
||||
new "## Для здійснення покупок у додатку потрібен ліцензійний ключ Google Play. Його можна знайти в консолі розробника Google Play у розділі \"Монетизація\" > \"Налаштування монетизації\" > \"Ліцензування\"."
|
||||
|
||||
|
||||
@@ -11,15 +11,15 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:85
|
||||
old "## Say screen"
|
||||
new "## Екран промови"
|
||||
new "## Екран Say"
|
||||
|
||||
# gui/game/screens.rpy:87
|
||||
old "## The say screen is used to display dialogue to the player. It takes two parameters, who and what, which are the name of the speaking character and the text to be displayed, respectively. (The who parameter can be None if no name is given.)"
|
||||
new "## Екран промови використовується для показу діалогу гравцеві. Він приймає два параметри, «who» та «what», ім’я персонажа й текст, який буде показано відповідно. (Параметр «who» може мати значення «None», якщо ім’я не вказано.)"
|
||||
new "## Екран Say використовується для відображення діалогу гравцеві. Він приймає два параметри, who і what, ім’я персонажа, що говорить, і текст, який буде відображатися відповідно. (Параметр who може мати значення None, якщо ім’я не вказано.)"
|
||||
|
||||
# gui/game/screens.rpy:92
|
||||
old "## This screen must create a text displayable with id \"what\", as Ren'Py uses this to manage text display. It can also create displayables with id \"who\" and id \"window\" to apply style properties."
|
||||
new "## Цей екран має створювати текст з ідентифікатором «what», оскільки Ren'Py використовує його для керування показу тексту. Він також може створювати елементи з ідентифікаторами «who» та «window» для застосування властивостей стилю."
|
||||
new "## Цей екран має створювати текст, який можна відображати з ідентифікатором «what», оскільки Ren'Py використовує це для керування відображенням тексту. Він також може створювати відображувані елементи з ідентифікаторами «who» та «window» для застосування властивостей стилю."
|
||||
|
||||
# gui/game/screens.rpy:96
|
||||
old "## https://www.renpy.org/doc/html/screen_special.html#say"
|
||||
@@ -39,11 +39,11 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:167
|
||||
old "## This screen is used to display renpy.input. The prompt parameter is used to pass a text prompt in."
|
||||
new "## Цей екран використовується для показу «renpy.input». Параметр «prompt» використовується для передачі текстової підказки."
|
||||
new "## Цей екран використовується для відображення renpy.input. Параметр prompt використовується для передачі текстової підказки."
|
||||
|
||||
# gui/game/screens.rpy:170
|
||||
old "## This screen must create an input displayable with id \"input\" to accept the various input parameters."
|
||||
new "## Цей екран має створити введення з ідентифікатором «input» для прийняття різних параметрів введення."
|
||||
new "## Цей екран має створити відображуваний вхід з ідентифікатором «input» для прийняття різних вхідних параметрів."
|
||||
|
||||
# gui/game/screens.rpy:173
|
||||
old "## https://www.renpy.org/doc/html/screen_special.html#input"
|
||||
@@ -55,7 +55,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:202
|
||||
old "## This screen is used to display the in-game choices presented by the menu statement. The one parameter, items, is a list of objects, each with caption and action fields."
|
||||
new "## Цей екран використовується для показу ігрових варіантів вибору, представлених оператором «menu». Один параметр, «items», являє собою список об’єктів, кожен з яких має підпис і поле дії."
|
||||
new "## Цей екран використовується для відображення вибору в грі, представленого командою 'menu'. Один параметр, 'items' — це список об’єктів, кожен із полями заголовка та дії."
|
||||
|
||||
# gui/game/screens.rpy:206
|
||||
old "## https://www.renpy.org/doc/html/screen_special.html#choice"
|
||||
@@ -67,11 +67,11 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:236
|
||||
old "## The quick menu is displayed in-game to provide easy access to the out-of-game menus."
|
||||
new "## Швидке меню показується у грі, щоб забезпечити легкий доступ до меню поза грою."
|
||||
new "## Швидке меню відображається в грі, щоб забезпечити легкий доступ до меню поза грою."
|
||||
|
||||
# gui/game/screens.rpy:241
|
||||
old "## Ensure this appears on top of other screens."
|
||||
new "## Переконайтеся, що воно показується поверх інших екранів."
|
||||
new "## Переконайтеся, що це відображається поверх інших екранів."
|
||||
|
||||
# gui/game/screens.rpy:252
|
||||
old "Back"
|
||||
@@ -83,7 +83,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:254
|
||||
old "Skip"
|
||||
new "Пропускати"
|
||||
new "Пропустити"
|
||||
|
||||
# gui/game/screens.rpy:255
|
||||
old "Auto"
|
||||
@@ -107,7 +107,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:262
|
||||
old "## This code ensures that the quick_menu screen is displayed in-game, whenever the player has not explicitly hidden the interface."
|
||||
new "## Цей код гарантує, що екран «quick_menu» показується у грі, якщо гравець не приховав інтерфейс явно."
|
||||
new "## Цей код гарантує, що екран quick_menu відображається в грі, якщо гравець явно не приховав інтерфейс."
|
||||
|
||||
# gui/game/screens.rpy:280
|
||||
old "## Main and Game Menu Screens"
|
||||
@@ -119,7 +119,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:285
|
||||
old "## This screen is included in the main and game menus, and provides navigation to other menus, and to start the game."
|
||||
new "## Цей екран включено в головне та ігрове меню і забезпечує навігацію до інших меню та початку гри."
|
||||
new "## Цей екран включено в головне та ігрове меню та забезпечує навігацію до інших меню та початок гри."
|
||||
|
||||
# gui/game/screens.rpy:300
|
||||
old "Start"
|
||||
@@ -147,7 +147,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:324
|
||||
old "## Help isn't necessary or relevant to mobile devices."
|
||||
new "## Довідка не є необхідною або доречною для мобільних пристроїв."
|
||||
new "## Допомога не є необхідною або актуальною для мобільних пристроїв."
|
||||
|
||||
# gui/game/screens.rpy:325
|
||||
old "Help"
|
||||
@@ -155,7 +155,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:329
|
||||
old "## The quit button is banned on iOS and unnecessary on Android and Web."
|
||||
new "## Кнопка виходу заборонена на iOS й непотрібна на Android та Web."
|
||||
new "## Кнопка виходу заборонена на iOS і непотрібна на Android і в Web."
|
||||
|
||||
# gui/game/screens.rpy:330
|
||||
old "Quit"
|
||||
@@ -167,7 +167,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:346
|
||||
old "## Used to display the main menu when Ren'Py starts."
|
||||
new "## Використовується для показу головного меню під час запуску Ren'Py."
|
||||
new "## Використовується для відображення головного меню під час запуску Ren'Py."
|
||||
|
||||
# gui/game/screens.rpy:348
|
||||
old "## https://www.renpy.org/doc/html/screen_special.html#main-menu"
|
||||
@@ -183,19 +183,19 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:361
|
||||
old "## The use statement includes another screen inside this one. The actual contents of the main menu are in the navigation screen."
|
||||
new "## Оператор «use» включає інший екран усередині цього. Фактичний вміст головного меню знаходиться на екрані навігації."
|
||||
new "## Інструкція використання включає інший екран всередині цього. Фактичний вміст головного меню знаходиться на екрані навігації."
|
||||
|
||||
# gui/game/screens.rpy:406
|
||||
old "## Game Menu screen"
|
||||
new "## Екран ігрового меню"
|
||||
new "## Екран меню гри"
|
||||
|
||||
# gui/game/screens.rpy:408
|
||||
old "## This lays out the basic common structure of a game menu screen. It's called with the screen title, and displays the background, title, and navigation."
|
||||
new "## Тут викладено основну загальну структуру екрана ігрового меню. Він викликається заголовком екрана і показує тло, заголовок і навігацію."
|
||||
new "## Це описує базову структуру екрана меню гри. Він викликається за допомогою заголовка екрана та відображає тло, заголовок і навігацію."
|
||||
|
||||
# gui/game/screens.rpy:411
|
||||
old "## The scroll parameter can be None, or one of \"viewport\" or \"vpgrid\". This screen is intended to be used with one or more children, which are transcluded (placed) inside it."
|
||||
new "## Параметр «scroll» може мати значення «None» або один з «viewport» чи «vpgrid». Цей екран призначений для використання з одним або декількома об’єктами, які включені (розміщені) всередині нього."
|
||||
new "## Параметр прокручування може бути None або одним із «viewport» чи «vpgrid». Цей екран призначений для використання з одним або декількома об’єктами, які включені (розміщені) всередині нього."
|
||||
|
||||
# gui/game/screens.rpy:429
|
||||
old "## Reserve space for the navigation section."
|
||||
@@ -211,7 +211,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:536
|
||||
old "## This screen gives credit and copyright information about the game and Ren'Py."
|
||||
new "## Цей екран містить інформацію про авторів та авторські права щодо гри та Ren'Py."
|
||||
new "## Цей екран містить інформацію про авторство та авторські права щодо гри та Ren'Py."
|
||||
|
||||
# gui/game/screens.rpy:539
|
||||
old "## There's nothing special about this screen, and hence it also serves as an example of how to make a custom screen."
|
||||
@@ -219,7 +219,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:546
|
||||
old "## This use statement includes the game_menu screen inside this one. The vbox child is then included inside the viewport inside the game_menu screen."
|
||||
new "## Цей оператор «use» включає екран «game_menu» всередині цього. Потім дочірній елемент «vbox» буде включено до «viewport» всередині екрана «game_menu»."
|
||||
new "## Цей оператор використання включає екран «game_menu» всередині цього. Потім дочірній елемент «vbox» включається в область перегляду всередині екрана «game_menu»."
|
||||
|
||||
# gui/game/screens.rpy:556
|
||||
old "Version [config.version!t]\n"
|
||||
@@ -227,7 +227,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:558
|
||||
old "## gui.about is usually set in options.rpy."
|
||||
new "## Значення «gui.about» зазвичай задається у файлі «options.rpy»."
|
||||
new "## «gui.about» зазвичай встановлюється в «options.rpy»."
|
||||
|
||||
# gui/game/screens.rpy:562
|
||||
old "Made with {a=https://www.renpy.org/}Ren'Py{/a} [renpy.version_only].\n\n[renpy.license!t]"
|
||||
@@ -259,7 +259,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:604
|
||||
old "## This ensures the input will get the enter event before any of the buttons do."
|
||||
new "## Це гарантує, що введення отримає подію входу раніше, ніж будь-яка кнопка."
|
||||
new "## Це гарантує, що введення отримає подію «enter» раніше, ніж будь-яка кнопка."
|
||||
|
||||
# gui/game/screens.rpy:608
|
||||
old "## The page name, which can be edited by clicking on a button."
|
||||
@@ -267,11 +267,11 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:620
|
||||
old "## The grid of file slots."
|
||||
new "## Сітка комірок збережень."
|
||||
new "## Сітка комірок для файлів."
|
||||
|
||||
# gui/game/screens.rpy:640
|
||||
old "{#file_time}%A, %B %d %Y, %H:%M"
|
||||
new "{#file_time}%A, %d %B %Y, %H:%M"
|
||||
new "{#file_time}%A, %B %d %Y, %H:%M"
|
||||
|
||||
# gui/game/screens.rpy:640
|
||||
old "empty slot"
|
||||
@@ -279,7 +279,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:648
|
||||
old "## Buttons to access other pages."
|
||||
new "## Кнопки для відкриття інших сторінок."
|
||||
new "## Кнопки для доступу до інших сторінок."
|
||||
|
||||
# gui/game/screens.rpy:657
|
||||
old "<"
|
||||
@@ -295,7 +295,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:665
|
||||
old "## range(1, 10) gives the numbers from 1 to 9."
|
||||
new "## range(1, 10) повертає числа від 1 до 9."
|
||||
new "## range(1, 10) дає числа від 1 до 9."
|
||||
|
||||
# gui/game/screens.rpy:669
|
||||
old ">"
|
||||
@@ -339,11 +339,11 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:737
|
||||
old "## Additional vboxes of type \"radio_pref\" or \"check_pref\" can be added here, to add additional creator-defined preferences."
|
||||
new "## Сюди можна додати додаткові vbox'и типу «radio_pref» або «check_pref», щоб додати додаткові налаштування, визначені автором."
|
||||
new "## Сюди можна долучити додаткові вікна vbox типу «radio_pref» або «check_pref», щоб долучити додаткові параметри, визначені творцем."
|
||||
|
||||
# gui/game/screens.rpy:748
|
||||
old "Text Speed"
|
||||
new "Швидкість друку тексту"
|
||||
new "Швидкість тексту"
|
||||
|
||||
# gui/game/screens.rpy:752
|
||||
old "Auto-Forward Time"
|
||||
@@ -355,7 +355,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:766
|
||||
old "Sound Volume"
|
||||
new "Гучність звукових ефектів"
|
||||
new "Гучність звук. ефектів"
|
||||
|
||||
# gui/game/screens.rpy:772
|
||||
old "Test"
|
||||
@@ -375,7 +375,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:865
|
||||
old "## This is a screen that displays the dialogue history to the player. While there isn't anything special about this screen, it does have to access the dialogue history stored in _history_list."
|
||||
new "## Це екран, на якому гравцеві буде показано історію діалогів. Хоч й в цьому екрані немає нічого особливого, він має мати доступ до історії діалогів, що зберігається в «_history_list»."
|
||||
new "## Це екран, на якому гравцеві відображається історія діалогів. Хоча в цьому екрані немає нічого особливого, він має доступ до історії діалогів, що зберігається в _history_list."
|
||||
|
||||
# gui/game/screens.rpy:869
|
||||
old "## https://www.renpy.org/doc/html/history.html"
|
||||
@@ -383,15 +383,15 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:875
|
||||
old "## Avoid predicting this screen, as it can be very large."
|
||||
new "## Уникайте виклику цього екрану, оскільки він може бути дуже великим."
|
||||
new "## Не намагайтеся передбачити цей екран, оскільки він може бути дуже великим."
|
||||
|
||||
# gui/game/screens.rpy:886
|
||||
old "## This lays things out properly if history_height is None."
|
||||
new "## Тут усе буде показано правильно, якщо «history_height» дорівнює «None»."
|
||||
new "## Тут все буде правильно, якщо history_height дорівнює None."
|
||||
|
||||
# gui/game/screens.rpy:896
|
||||
old "## Take the color of the who text from the Character, if set."
|
||||
new "## Бере колір тексту «who» з «Character», якщо він заданий."
|
||||
new "## Бере колір тексту who з Character, якщо він заданий."
|
||||
|
||||
# gui/game/screens.rpy:905
|
||||
old "The dialogue history is empty."
|
||||
@@ -399,7 +399,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:908
|
||||
old "## This determines what tags are allowed to be displayed on the history screen."
|
||||
new "## Визначає, які теги дозволено показувати на екрані історії."
|
||||
new "## Це визначає теги, які можна відображати на екрані історії."
|
||||
|
||||
# gui/game/screens.rpy:953
|
||||
old "## Help screen"
|
||||
@@ -407,7 +407,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:955
|
||||
old "## A screen that gives information about key and mouse bindings. It uses other screens (keyboard_help, mouse_help, and gamepad_help) to display the actual help."
|
||||
new "## Екран, що надає інформацію про призначення клавіш і миші. Він використовує інші екрани (keyboard_help, mouse_help та gamepad_help), щоб показати саму довідку."
|
||||
new "## Екран, що надає інформацію про прив’язку клавіш і миші. Він використовує інші екрани (keyboard_help, mouse_help і gamepad_help), щоб відобразити фактичну довідку."
|
||||
|
||||
# gui/game/screens.rpy:974
|
||||
old "Keyboard"
|
||||
@@ -439,7 +439,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:999
|
||||
old "Arrow Keys"
|
||||
new "Клавіші стрілок"
|
||||
new "Клавіші зі стрілками"
|
||||
|
||||
# gui/game/screens.rpy:1000
|
||||
old "Navigate the interface."
|
||||
@@ -451,7 +451,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:1004
|
||||
old "Accesses the game menu."
|
||||
new "Відкриває ігрове меню."
|
||||
new "Доступ до меню гри."
|
||||
|
||||
# gui/game/screens.rpy:1007
|
||||
old "Ctrl"
|
||||
@@ -467,7 +467,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:1012
|
||||
old "Toggles dialogue skipping."
|
||||
new "Перемикає пропуск діалогу."
|
||||
new "Вмикає пропуск діалогу."
|
||||
|
||||
# gui/game/screens.rpy:1015
|
||||
old "Page Up"
|
||||
@@ -475,7 +475,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:1016
|
||||
old "Rolls back to earlier dialogue."
|
||||
new "Відкатує до попереднього діалогу."
|
||||
new "Відкат до попереднього діалогу."
|
||||
|
||||
# gui/game/screens.rpy:1019
|
||||
old "Page Down"
|
||||
@@ -483,7 +483,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:1020
|
||||
old "Rolls forward to later dialogue."
|
||||
new "Переходить до наступного діалогу."
|
||||
new "Перехід до наступного діалогу."
|
||||
|
||||
# gui/game/screens.rpy:1024
|
||||
old "Hides the user interface."
|
||||
@@ -503,15 +503,15 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:1042
|
||||
old "Left Click"
|
||||
new "Ліва кнопка миші"
|
||||
new "ЛКМ"
|
||||
|
||||
# gui/game/screens.rpy:1046
|
||||
old "Middle Click"
|
||||
new "Середня кнопка миші"
|
||||
new "СКМ"
|
||||
|
||||
# gui/game/screens.rpy:1050
|
||||
old "Right Click"
|
||||
new "Права кнопка миші"
|
||||
new "ПКМ"
|
||||
|
||||
# gui/game/screens.rpy:1054
|
||||
old "Mouse Wheel Up"
|
||||
@@ -523,7 +523,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:1065
|
||||
old "Right Trigger\nA/Bottom Button"
|
||||
new "Правий тригер\nКнопка A/Униз"
|
||||
new "Правий тригер\nA/Нижня кнопка"
|
||||
|
||||
# gui/game/screens.rpy:1069
|
||||
old "Left Trigger\nLeft Shoulder"
|
||||
@@ -535,7 +535,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:1078
|
||||
old "D-Pad, Sticks"
|
||||
new "Хрестовина, стики"
|
||||
new "Хрестовина, Стики"
|
||||
|
||||
# gui/game/screens.rpy:1082
|
||||
old "Start, Guide"
|
||||
@@ -543,16 +543,12 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:1086
|
||||
old "Y/Top Button"
|
||||
new "Кнопка Y/Угору"
|
||||
new "Y/Верхня кнопка"
|
||||
|
||||
# gui/game/screens.rpy:1089
|
||||
old "Calibrate"
|
||||
new "Відкалібрувати"
|
||||
|
||||
# gui/game/screens.rpy:1098
|
||||
old "Start, Guide, B/Right Button"
|
||||
new "Start, Guide, Кнопка B/Управо"
|
||||
|
||||
# gui/game/screens.rpy:1117
|
||||
old "## Additional screens"
|
||||
new "## Додаткові екрани"
|
||||
@@ -563,7 +559,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:1123
|
||||
old "## The confirm screen is called when Ren'Py wants to ask the player a yes or no question."
|
||||
new "## Екран підтвердження викликається, коли Ren'Py хоче поставити гравцеві запитання з відповіддю «Так» або «Ні»."
|
||||
new "## Екран підтвердження викликається, коли Ren'Py хоче поставити гравцеві запитання «Так» або «Ні»."
|
||||
|
||||
# gui/game/screens.rpy:1126
|
||||
old "## https://www.renpy.org/doc/html/screen_special.html#confirm"
|
||||
@@ -571,7 +567,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:1130
|
||||
old "## Ensure other screens do not get input while this screen is displayed."
|
||||
new "## Переконайтеся, що на інші екранах не отримується введення під час показу цього екрана."
|
||||
new "## Переконайтеся, що інші екрани не отримують введення, поки відображається цей екран."
|
||||
|
||||
# gui/game/screens.rpy:1154
|
||||
old "Yes"
|
||||
@@ -583,7 +579,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:1157
|
||||
old "## Right-click and escape answer \"no\"."
|
||||
new "## Клацніть ПКМ й оберіть відповідь «Ні»."
|
||||
new "## Клацніть ПКМ та вийдіть із відповіді «Ні»."
|
||||
|
||||
# gui/game/screens.rpy:1184
|
||||
old "## Skip indicator screen"
|
||||
@@ -591,7 +587,7 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:1186
|
||||
old "## The skip_indicator screen is displayed to indicate that skipping is in progress."
|
||||
new "## Екран «skip_indicator» показується, що вказати на те, що виконується пропуск."
|
||||
new "## Екран skip_indicator відображається, щоб вказати, що триває пропуск."
|
||||
|
||||
# gui/game/screens.rpy:1189
|
||||
old "## https://www.renpy.org/doc/html/screen_special.html#skip-indicator"
|
||||
@@ -603,19 +599,19 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:1208
|
||||
old "## This transform is used to blink the arrows one after another."
|
||||
new "## Це перетворення використовується для блимання стрілок одна за одною."
|
||||
new "## Це перетворення використовується для миготіння стрілок одна за одною."
|
||||
|
||||
# gui/game/screens.rpy:1235
|
||||
old "## We have to use a font that has the BLACK RIGHT-POINTING SMALL TRIANGLE glyph in it."
|
||||
new "## Ми маємо використовувати шрифт, в якому є гліф «BLACK RIGHT-POINTING SMALL TRIANGLE»."
|
||||
new "## Ми повинні використовувати шрифт із гліфом МАЛЕНЬКИЙ ЧОРНИЙ ТРИКУТНИК ВПРАВО."
|
||||
|
||||
# gui/game/screens.rpy:1240
|
||||
old "## Notify screen"
|
||||
new "## Екран оповіщення"
|
||||
new "## Екран сповіщень"
|
||||
|
||||
# gui/game/screens.rpy:1242
|
||||
old "## The notify screen is used to show the player a message. (For example, when the game is quicksaved or a screenshot has been taken.)"
|
||||
new "## Екран оповіщення використовується, щоб показати гравцеві повідомлення. (Наприклад, коли гру збережено або зроблено знімок екрана)."
|
||||
new "## Екран сповіщень використовується, щоб показати гравцеві повідомлення. (Наприклад, коли гра швидко збережена або зроблено знімок екрана.)"
|
||||
|
||||
# gui/game/screens.rpy:1245
|
||||
old "## https://www.renpy.org/doc/html/screen_special.html#notify-screen"
|
||||
@@ -635,15 +631,15 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:1294
|
||||
old "## Displays dialogue in either a vpgrid or the vbox."
|
||||
new "## Показує діалог у типі «vpgrid» або «vbox»."
|
||||
new "## Відображає діалог у vpgrid або vbox."
|
||||
|
||||
# gui/game/screens.rpy:1307
|
||||
old "## Displays the menu, if given. The menu may be displayed incorrectly if config.narrator_menu is set to True."
|
||||
new "## Показує меню, якщо його задано. Меню може показуватися некоректно, якщо «config.narrator_menu» має значення «True»."
|
||||
new "## Відображає меню, якщо є. Меню може відображатися неправильно, якщо для config.narrator_menu задано значення True."
|
||||
|
||||
# gui/game/screens.rpy:1337
|
||||
old "## This controls the maximum number of NVL-mode entries that can be displayed at once."
|
||||
new "## Цей параметр контролює максимальну кількість реплік у режимі NVL, які можуть бути показані одночасно."
|
||||
new "## Це визначає максимальну кількість записів у режимі NVL, які можуть бути відображені одночасно."
|
||||
|
||||
# gui/game/screens.rpy:1399
|
||||
old "## Mobile Variants"
|
||||
@@ -657,6 +653,7 @@ translate ukrainian strings:
|
||||
old "Menu"
|
||||
new "Меню"
|
||||
|
||||
|
||||
translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:676
|
||||
@@ -669,11 +666,11 @@ translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:1410
|
||||
old "## Bubble screen"
|
||||
new "## Екран бульбашок"
|
||||
new "## Екран з бульбашками"
|
||||
|
||||
# gui/game/screens.rpy:1412
|
||||
old "## The bubble screen is used to display dialogue to the player when using speech bubbles. The bubble screen takes the same parameters as the say screen, must create a displayable with the id of \"what\", and can create displayables with the \"namebox\", \"who\", and \"window\" ids."
|
||||
new "## Екран бульбашок використовується для показу діалогу гравцеві під час використання мовних бульбашок. Екран бульбашок має ті самі параметри, що й екран промови, має створювати об’єкт з ідентифікатором «what», а також може створювати об’єкти з ідентифікаторами «namebox», «who» і «window»."
|
||||
new "## Екран бульбашок використовується для показу діалогу гравцеві під час використання мовних бульбашок. Екран бульбашок має ті самі параметри, що й екран слів, має створювати елемент відображення з ідентифікатором «what», а також може створювати елементи відображення з ідентифікаторами «namebox», «who» і «window»."
|
||||
|
||||
# gui/game/screens.rpy:1417
|
||||
old "## https://www.renpy.org/doc/html/bubble.html#bubble-screen"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# У цьому файлі міститься сценарій гри.
|
||||
# У цьому файлі міститься скрипт гри.
|
||||
|
||||
# Визначення персонажів для гри.
|
||||
# Аргумент color змінює колір ім’я персонажа.
|
||||
# Оголошення персонажів, які використовуються в цій грі. Колірний аргумент розфарбовує
|
||||
# ім’я персонажа.
|
||||
|
||||
define e = Character("Ейлін")
|
||||
|
||||
@@ -10,23 +10,23 @@ define e = Character("Ейлін")
|
||||
|
||||
label start:
|
||||
|
||||
# Показ тла. Типово використовується заповнювач, але ви можете
|
||||
# Це показує тло. За стандратом використовується заповнювач, але ви можете
|
||||
# додати файл (з назвою «bg room.png» або «bg room.jpg») до
|
||||
# теки images, щоб показати його.
|
||||
|
||||
scene bg room
|
||||
|
||||
# Наступний рядок показує спрайт персонажа. Тут використано заповнювач,
|
||||
# але ви можете замінити його, додавши файл з назвою «eileen happy.png»,
|
||||
# до теки images.
|
||||
# Це показує спрайт персонажа. Використовується заповнювач, але ви можете
|
||||
# замінити його, додавши до зображень файл із назвою «eileen happy.png».
|
||||
# до теки.
|
||||
|
||||
show eileen happy
|
||||
|
||||
# Ці рядки показують репліки діалогу.
|
||||
# Це репліки діалогу.
|
||||
|
||||
e "Ви створили нову гру Ren'Py."
|
||||
|
||||
e "Додавши сюжет, зображення та музику, ви зможете оприлюднити її світові!"
|
||||
e "Додавши історію, зображення та музику, ви можете оприлюднити це світові!"
|
||||
|
||||
# На цьому гра закінчується.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -17,8 +17,6 @@ root = ""
|
||||
|
||||
import renpy
|
||||
|
||||
class BannedException(Exception):
|
||||
pass
|
||||
|
||||
class WebHandler(http.server.BaseHTTPRequestHandler):
|
||||
|
||||
@@ -61,13 +59,7 @@ class WebHandler(http.server.BaseHTTPRequestHandler):
|
||||
None, in which case the caller has nothing further to do.
|
||||
|
||||
"""
|
||||
|
||||
try:
|
||||
path = self.translate_path(self.path)
|
||||
except BannedException:
|
||||
self.send_error(403, "File not found")
|
||||
return None
|
||||
|
||||
path = self.translate_path(self.path)
|
||||
f = None
|
||||
if os.path.isdir(path):
|
||||
parts = urllib.parse.urlsplit(self.path)
|
||||
@@ -200,9 +192,6 @@ class WebHandler(http.server.BaseHTTPRequestHandler):
|
||||
path = root
|
||||
|
||||
for word in words:
|
||||
if word.startswith("."):
|
||||
raise BannedException("Invalid path.")
|
||||
|
||||
if os.path.dirname(word) or word in (os.curdir, os.pardir):
|
||||
# Ignore components that are not a simple file/directory name
|
||||
continue
|
||||
|
||||
Binary file not shown.
+1
-1
@@ -1,5 +1,5 @@
|
||||
# -*- python -*-
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
+11
-3
@@ -179,7 +179,7 @@ typedef struct MediaState {
|
||||
/* This becomes true once the decode thread has finished initializing
|
||||
* and the readers and writers can do their thing.
|
||||
*/
|
||||
int ready;
|
||||
int ready; // Lock.
|
||||
|
||||
/* This is set to true when data has been read, in order to ask the
|
||||
* decode thread to produce more data.
|
||||
@@ -1470,8 +1470,16 @@ int media_read_audio(struct MediaState *ms, Uint8 *stream, int len) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
int media_is_ready(struct MediaState *ms) {
|
||||
return ms->ready;
|
||||
void media_wait_ready(struct MediaState *ms) {
|
||||
#ifndef __EMSCRIPTEN__
|
||||
SDL_LockMutex(ms->lock);
|
||||
|
||||
while (!ms->ready) {
|
||||
SDL_CondWait(ms->cond, ms->lock);
|
||||
}
|
||||
|
||||
SDL_UnlockMutex(ms->lock);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -8,12 +8,25 @@ cdef extern from "stdlib.h":
|
||||
cdef extern from "pyfreetype.h":
|
||||
#ftconfig.h
|
||||
#Some tweaking may be needed on a platform-by-platform basis
|
||||
DEF FT_SIZEOF_INT = 4
|
||||
DEF FT_SIZEOF_LONG = 4
|
||||
|
||||
ctypedef signed short FT_Int16
|
||||
ctypedef unsigned short FT_UInt16
|
||||
ctypedef signed int FT_Int32
|
||||
ctypedef unsigned int FT_UInt32
|
||||
ctypedef int FT_Fast
|
||||
ctypedef unsigned int FT_UFast
|
||||
IF FT_SIZEOF_INT == 4:
|
||||
ctypedef signed int FT_Int32
|
||||
ctypedef unsigned int FT_UInt32
|
||||
ELIF FT_SIZEOF_LONG == 4:
|
||||
ctypedef signed long FT_Int32
|
||||
ctypedef unsigned long FT_UInt32
|
||||
|
||||
IF FT_SIZEOF_INT >= 4:
|
||||
ctypedef int FT_Fast
|
||||
ctypedef unsigned int FT_UFast
|
||||
ELIF FT_SIZEOF_LONG >= 4:
|
||||
ctypedef long FT_Fast
|
||||
ctypedef unsigned long FT_UFast
|
||||
|
||||
|
||||
# Moved up.
|
||||
cdef struct FT_ModuleRec_
|
||||
|
||||
+41
-68
@@ -78,7 +78,7 @@ int media_video_ready(struct MediaState *ms);
|
||||
SDL_Surface *media_read_video(struct MediaState *ms);
|
||||
|
||||
double media_duration(struct MediaState *ms);
|
||||
int media_is_ready(struct MediaState *ms);
|
||||
void media_wait_ready(struct MediaState *ms);
|
||||
|
||||
/* Min and Max */
|
||||
#define min(a, b) (((a) < (b)) ? (a) : (b))
|
||||
@@ -220,9 +220,6 @@ struct Channel {
|
||||
/* The relative volume of the playing stream. */
|
||||
float playing_relative_volume;
|
||||
|
||||
/* Is the playing sample waiting for a synchro start? */
|
||||
int playing_synchro_start;
|
||||
|
||||
/* The number of samples of silence to pad the playing stream with.*/
|
||||
int playing_pad;
|
||||
|
||||
@@ -250,9 +247,6 @@ struct Channel {
|
||||
/* The relative volume of the queued stream. */
|
||||
float queued_relative_volume;
|
||||
|
||||
/* Is the queued sample waiting for a synchro start? */
|
||||
int queued_synchro_start;
|
||||
|
||||
/* The AudioFilter that is queued on this channel. */
|
||||
PyObject *queued_audio_filter;
|
||||
|
||||
@@ -436,7 +430,7 @@ static void callback(void *userdata, Uint8 *stream, int length) {
|
||||
continue;
|
||||
}
|
||||
|
||||
while (mixed < length && c->playing && !c->playing_synchro_start) {
|
||||
while (mixed < length && c->playing) {
|
||||
|
||||
// How much do we have left to mix on this channel?
|
||||
int mixleft = length - mixed;
|
||||
@@ -496,7 +490,6 @@ static void callback(void *userdata, Uint8 *stream, int length) {
|
||||
c->playing_tight = c->queued_tight;
|
||||
c->playing_start_ms = c->queued_start_ms;
|
||||
c->playing_relative_volume = c->queued_relative_volume;
|
||||
c->playing_synchro_start = c->queued_synchro_start;
|
||||
|
||||
c->playing_audio_filter = c->queued_audio_filter;
|
||||
|
||||
@@ -507,7 +500,6 @@ static void callback(void *userdata, Uint8 *stream, int length) {
|
||||
c->queued_start_ms = 0;
|
||||
c->queued_relative_volume = 1.0;
|
||||
c->queued_audio_filter = NULL;
|
||||
c->queued_synchro_start = 0;
|
||||
|
||||
if (c->playing_fadein) {
|
||||
old_tight = 0;
|
||||
@@ -604,7 +596,7 @@ static int check_channel(int c) {
|
||||
memset(&channels[i], 0, sizeof(struct Channel));
|
||||
|
||||
channels[i].mixer_volume = 1.0;
|
||||
channels[i].paused = 0;
|
||||
channels[i].paused = 1;
|
||||
channels[i].event = 0;
|
||||
|
||||
init_interpolate(&channels[i].fade, MAX_POWER);
|
||||
@@ -641,7 +633,7 @@ struct MediaState *load_stream(SDL_RWops *rw, const char *ext, double start, dou
|
||||
}
|
||||
|
||||
|
||||
void RPS_play(int channel, SDL_RWops *rw, const char *ext, const char *name, int synchro_start, int fadein, int tight, double start, double end, float relative_volume, PyObject *audio_filter) {
|
||||
void RPS_play(int channel, SDL_RWops *rw, const char *ext, const char *name, int fadein, int tight, int paused, double start, double end, float relative_volume, PyObject *audio_filter) {
|
||||
|
||||
struct Channel *c;
|
||||
|
||||
@@ -707,7 +699,7 @@ void RPS_play(int channel, SDL_RWops *rw, const char *ext, const char *name, int
|
||||
c->playing_audio_filter = NULL;
|
||||
}
|
||||
|
||||
c->playing_synchro_start = synchro_start;
|
||||
c->paused = paused;
|
||||
|
||||
start_stream(c, 1);
|
||||
|
||||
@@ -716,7 +708,7 @@ void RPS_play(int channel, SDL_RWops *rw, const char *ext, const char *name, int
|
||||
error(SUCCESS);
|
||||
}
|
||||
|
||||
void RPS_queue(int channel, SDL_RWops *rw, const char *ext, const char *name, int synchro_start, int fadein, int tight, double start, double end, float relative_volume, PyObject *audio_filter) {
|
||||
void RPS_queue(int channel, SDL_RWops *rw, const char *ext, const char *name, int fadein, int tight, double start, double end, float relative_volume, PyObject *audio_filter) {
|
||||
|
||||
struct Channel *c;
|
||||
|
||||
@@ -728,7 +720,7 @@ void RPS_queue(int channel, SDL_RWops *rw, const char *ext, const char *name, in
|
||||
|
||||
/* If we're not playing, then we should play instead of queue. */
|
||||
if (!c->playing) {
|
||||
RPS_play(channel, rw, ext, name, synchro_start, fadein, tight, start, end, relative_volume, audio_filter);
|
||||
RPS_play(channel, rw, ext, name, fadein, tight, 0, start, end, relative_volume, audio_filter);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -764,12 +756,10 @@ void RPS_queue(int channel, SDL_RWops *rw, const char *ext, const char *name, in
|
||||
c->queued_name = strdup(name);
|
||||
c->queued_fadein = fadein;
|
||||
c->queued_tight = tight;
|
||||
c->queued_synchro_start = synchro_start;
|
||||
|
||||
c->queued_start_ms = (int) (start * 1000);
|
||||
c->queued_relative_volume = relative_volume;
|
||||
|
||||
|
||||
if (audio_filter) {
|
||||
c->queued_audio_filter = audio_filter;
|
||||
Py_INCREF(c->queued_audio_filter);
|
||||
@@ -811,7 +801,6 @@ void RPS_stop(int channel) {
|
||||
c->playing_name = NULL;
|
||||
c->playing_start_ms = 0;
|
||||
c->playing_relative_volume = 1.0;
|
||||
c->playing_synchro_start = 0;
|
||||
}
|
||||
|
||||
if (c->playing_audio_filter) {
|
||||
@@ -819,6 +808,7 @@ void RPS_stop(int channel) {
|
||||
c->playing_audio_filter = NULL;
|
||||
}
|
||||
|
||||
|
||||
if (c->queued) {
|
||||
free_stream(c->queued);
|
||||
c->queued = NULL;
|
||||
@@ -826,7 +816,6 @@ void RPS_stop(int channel) {
|
||||
c->queued_name = NULL;
|
||||
c->queued_start_ms = 0;
|
||||
c->queued_relative_volume = 1.0;
|
||||
c->queued_synchro_start = 0;
|
||||
|
||||
}
|
||||
|
||||
@@ -870,7 +859,6 @@ void RPS_dequeue(int channel, int even_tight) {
|
||||
}
|
||||
|
||||
c->queued_start_ms = 0;
|
||||
c->queued_synchro_start = 0;
|
||||
|
||||
if (c->queued_audio_filter) {
|
||||
Py_DECREF(c->queued_audio_filter);
|
||||
@@ -971,10 +959,10 @@ void RPS_fadeout(int channel, int ms) {
|
||||
}
|
||||
}
|
||||
|
||||
if (ms == 0 || c->playing_synchro_start) {
|
||||
|
||||
if (ms == 0) {
|
||||
c->stop_samples = 0;
|
||||
c->playing_tight = 0;
|
||||
c->playing_synchro_start = 0;
|
||||
UNLOCK_AUDIO();
|
||||
|
||||
error(SUCCESS);
|
||||
@@ -1028,6 +1016,32 @@ void RPS_pause(int channel, int pause) {
|
||||
|
||||
}
|
||||
|
||||
void RPS_unpause_all_at_start(void) {
|
||||
|
||||
int i;
|
||||
|
||||
/* Since media_wait_ready can block, we need to release the GIL. */
|
||||
Py_BEGIN_ALLOW_THREADS
|
||||
|
||||
for (i = 0; i < num_channels; i++) {
|
||||
if (channels[i].playing && channels[i].paused && channels[i].pos == 0) {
|
||||
media_wait_ready(channels[i].playing);
|
||||
}
|
||||
}
|
||||
|
||||
Py_END_ALLOW_THREADS
|
||||
|
||||
for (i = 0; i < num_channels; i++) {
|
||||
if (channels[i].playing && channels[i].pos == 0) {
|
||||
channels[i].paused = 0;
|
||||
media_pause(channels[i].playing, 0);
|
||||
}
|
||||
}
|
||||
|
||||
error(SUCCESS);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Starts and stops the SDL audio playback.
|
||||
@@ -1202,7 +1216,7 @@ void RPS_set_secondary_volume(int channel, float vol2, float delay) {
|
||||
/**
|
||||
* Replaces audio filters with the given PyObject.
|
||||
*/
|
||||
void RPS_replace_audio_filter(int channel, PyObject *new_filter, int primary) {
|
||||
void RPS_replace_audio_filter(int channel, PyObject *new_filter) {
|
||||
|
||||
struct Channel *c;
|
||||
|
||||
@@ -1214,13 +1228,10 @@ void RPS_replace_audio_filter(int channel, PyObject *new_filter, int primary) {
|
||||
|
||||
LOCK_AUDIO();
|
||||
|
||||
if (primary) {
|
||||
|
||||
if (c->playing_audio_filter) {
|
||||
Py_DECREF(c->playing_audio_filter);
|
||||
Py_INCREF(new_filter);
|
||||
c->playing_audio_filter = new_filter;
|
||||
}
|
||||
if (c->playing_audio_filter) {
|
||||
Py_DECREF(c->playing_audio_filter);
|
||||
Py_INCREF(new_filter);
|
||||
c->playing_audio_filter = new_filter;
|
||||
}
|
||||
|
||||
if (c->queued_audio_filter) {
|
||||
@@ -1373,49 +1384,11 @@ void RPS_quit() {
|
||||
error(SUCCESS);
|
||||
}
|
||||
|
||||
static void handle_synchro_start() {
|
||||
int ready = 1;
|
||||
|
||||
for (int i = 0; i < num_channels; i++) {
|
||||
struct Channel *c = &channels[i];
|
||||
|
||||
if (c->playing_synchro_start) {
|
||||
c->queued_synchro_start = 0;
|
||||
|
||||
if (c->playing) {
|
||||
if (!media_is_ready(c->playing)) {
|
||||
ready = 0;
|
||||
}
|
||||
} else {
|
||||
c->playing_synchro_start = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (c->queued && c->queued_synchro_start) {
|
||||
ready = 0;
|
||||
} else {
|
||||
c->queued_synchro_start = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (ready) {
|
||||
for (int i = 0; i < num_channels; i++) {
|
||||
struct Channel *c = &channels[i];
|
||||
|
||||
if (c->playing_synchro_start) {
|
||||
c->playing_synchro_start = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* This must be called frequently, to take care of deallocating dead
|
||||
* streams. */
|
||||
void RPS_periodic() {
|
||||
|
||||
LOCK_NAME();
|
||||
handle_synchro_start();
|
||||
|
||||
struct Dying *d = dying;
|
||||
dying = NULL;
|
||||
UNLOCK_NAME();
|
||||
|
||||
@@ -27,14 +27,15 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#include <Python.h>
|
||||
#include <SDL.h>
|
||||
|
||||
void RPS_play(int channel, SDL_RWops *rw, const char *ext, const char *name, int synchro_start, int fadeout, int tight, double start, double end, float relative_volume, PyObject *audio_filter);
|
||||
void RPS_queue(int channel, SDL_RWops *rw, const char *ext, const char *name, int synchro_start, int fadeout, int tight, double start, double end, float relative_volume, PyObject *audio_filter);
|
||||
void RPS_play(int channel, SDL_RWops *rw, const char *ext, const char *name, int fadeout, int tight, int paused, double start, double end, float relative_volume, PyObject *audio_filter);
|
||||
void RPS_queue(int channel, SDL_RWops *rw, const char *ext, const char *name, int fadeout, int tight, double start, double end, float relative_volume, PyObject *audio_filter);
|
||||
void RPS_stop(int channel);
|
||||
void RPS_dequeue(int channel, int even_tight);
|
||||
int RPS_queue_depth(int channel);
|
||||
PyObject *RPS_playing_name(int channel);
|
||||
void RPS_fadeout(int channel, int ms);
|
||||
void RPS_pause(int channel, int pause);
|
||||
void RPS_unpause_all_at_start(void);
|
||||
void RPS_global_pause(int pause);
|
||||
void RPS_set_endevent(int channel, int event);
|
||||
int RPS_get_pos(int channel);
|
||||
@@ -43,7 +44,7 @@ void RPS_set_volume(int channel, float volume);
|
||||
float RPS_get_volume(int channel);
|
||||
void RPS_set_pan(int channel, float pan, float delay);
|
||||
void RPS_set_secondary_volume(int channel, float vol2, float delay);
|
||||
void RPS_replace_audio_filter(int channel, PyObject *audio_filter, int primary);
|
||||
void RPS_replace_audio_filter(int channel, PyObject *audio_filter);
|
||||
|
||||
int RPS_video_ready(int channel);
|
||||
PyObject *RPS_read_video(int channel);
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
# This file is part of Ren'Py. The license below applies to Ren'Py only.
|
||||
# Games and other projects that use Ren'Py may use a different license.
|
||||
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
+1
-8
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
@@ -43,17 +43,11 @@ from renpy.parameter import Parameter, Signature, ParameterInfo, ArgumentInfo, \
|
||||
apply_arguments, EMPTY_PARAMETERS, EMPTY_ARGUMENTS
|
||||
|
||||
|
||||
# The name of the current statement.
|
||||
current_statement_name = "init"
|
||||
|
||||
def statement_name(name):
|
||||
"""
|
||||
Reports the name of this statement to systems like window auto.
|
||||
"""
|
||||
|
||||
global current_statement_name
|
||||
current_statement_name = name
|
||||
|
||||
for i in renpy.config.statement_callbacks:
|
||||
i(name)
|
||||
|
||||
@@ -2168,7 +2162,6 @@ EARLY_CONFIG = {
|
||||
"check_translate_none",
|
||||
"defer_tl_scripts",
|
||||
"munge_in_strings",
|
||||
"interface_layer",
|
||||
}
|
||||
|
||||
define_statements = [ ]
|
||||
|
||||
+14
-16
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
@@ -652,11 +652,10 @@ class ATLTransformBase(renpy.object.Object):
|
||||
# if name in (args_param_name, kwargs_param_name):
|
||||
# pass
|
||||
|
||||
## when positional-only parameters are enabled
|
||||
# elif passed and (pkind == param.POSITIONAL_ONLY):
|
||||
# continue
|
||||
if passed and (pkind == param.POSITIONAL_ONLY): # turn into elif when possible
|
||||
continue
|
||||
|
||||
if passed: # turn into elif when possible
|
||||
elif passed:
|
||||
param = ValuedParameter(name, param.KEYWORD_ONLY, scope[name])
|
||||
|
||||
elif param.has_default:
|
||||
@@ -1146,16 +1145,6 @@ compatible_pairs = [
|
||||
# values of the variables here.
|
||||
|
||||
|
||||
def check_spline_types(value):
|
||||
if isinstance(value, (position, int, float)):
|
||||
return True
|
||||
|
||||
if isinstance(value, tuple):
|
||||
return all(check_spline_types(i) for i in value)
|
||||
|
||||
return False
|
||||
|
||||
|
||||
class RawMultipurpose(RawStatement):
|
||||
|
||||
warp_function = None
|
||||
@@ -1218,6 +1207,15 @@ class RawMultipurpose(RawStatement):
|
||||
|
||||
compiling(self.loc)
|
||||
|
||||
def check_spline_types(value):
|
||||
if isinstance(value, (position, int, float)):
|
||||
return True
|
||||
|
||||
if isinstance(value, tuple):
|
||||
return all(check_spline_types(i) for i in value)
|
||||
|
||||
return False
|
||||
|
||||
# Figure out what kind of statement we have. If there's no
|
||||
# interpolator, and no properties, than we have either a
|
||||
# call, or a child statement.
|
||||
@@ -1334,7 +1332,7 @@ class RawMultipurpose(RawStatement):
|
||||
except Exception:
|
||||
continue
|
||||
|
||||
if isinstance(i, ATLTransformBase) and (i.child is None):
|
||||
if isinstance(i, ATLTransformBase):
|
||||
i.atl.predict(ctx)
|
||||
return
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
+56
-61
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
@@ -91,13 +91,11 @@ class AudioData(str):
|
||||
"""
|
||||
:doc: audio
|
||||
|
||||
This class wraps a bytes object containing audio or video data, so it can be
|
||||
passed to the audio/video playback system. The audio or video data should be contained
|
||||
This class wraps a bytes object containing audio data, so it can be
|
||||
passed to the audio playback system. The audio data should be contained
|
||||
in some format Ren'Py supports. (For examples RIFF WAV format headers,
|
||||
not unadorned samples.)
|
||||
|
||||
Despite the name, this can be used to represent video data as well as audio data.
|
||||
|
||||
`data`
|
||||
A bytes object containing the audio file data.
|
||||
|
||||
@@ -106,9 +104,6 @@ class AudioData(str):
|
||||
suggest the format `data` is in, and is reported as part of
|
||||
error messages.
|
||||
|
||||
If this starts with angle bracket, it can supply properties to
|
||||
the audio, like from and to times.
|
||||
|
||||
Once created, this can be used wherever an audio filename is allowed. For
|
||||
example::
|
||||
|
||||
@@ -230,9 +225,8 @@ class Channel(object):
|
||||
|
||||
# The audio filter to use.
|
||||
audio_filter = None
|
||||
raw_audio_filter = None
|
||||
|
||||
def __init__(self, name, default_loop, stop_on_mute, tight, file_prefix, file_suffix, buffer_queue, movie, framedrop, synchro_start):
|
||||
def __init__(self, name, default_loop, stop_on_mute, tight, file_prefix, file_suffix, buffer_queue, movie, framedrop):
|
||||
|
||||
# The name assigned to this channel. This is used to look up
|
||||
# information about the channel in the MusicContext object.
|
||||
@@ -265,13 +259,15 @@ class Channel(object):
|
||||
# Are we playing anything at all?
|
||||
self.playing = False
|
||||
|
||||
# If True, we'll wait for this channel to stop before
|
||||
# loading in more music from the queue. (This is necessary to
|
||||
# do a synchro-start.)
|
||||
self.wait_stop = False
|
||||
|
||||
# If True, then this channel will participate in a synchro-start
|
||||
# once all channels are ready.
|
||||
self.synchro_start = False
|
||||
|
||||
# Does this participate in synchro start by default.
|
||||
self.default_synchro_start = synchro_start
|
||||
|
||||
# The time the music in this channel was last changed.
|
||||
self.last_changed = 0
|
||||
|
||||
@@ -365,12 +361,9 @@ class Channel(object):
|
||||
ExecutionContext to point to the copy, and returns the copy.
|
||||
"""
|
||||
|
||||
context = renpy.game.context()
|
||||
mcd = dict(context.music)
|
||||
context.music = mcd
|
||||
mcd = renpy.game.context().music
|
||||
|
||||
ctx = self.get_context().copy()
|
||||
|
||||
mcd[self.name] = ctx
|
||||
return ctx
|
||||
|
||||
@@ -404,7 +397,8 @@ class Channel(object):
|
||||
except Exception:
|
||||
raise exception("expected channel, got {!r}.".format(v))
|
||||
|
||||
original_filename = filename
|
||||
if isinstance(filename, AudioData):
|
||||
return filename, 0, -1
|
||||
|
||||
m = re.match(r'<(.*)>(.*)', filename)
|
||||
if not m:
|
||||
@@ -445,9 +439,6 @@ class Channel(object):
|
||||
if (loop is not None) and looped:
|
||||
start = loop
|
||||
|
||||
if isinstance(original_filename, AudioData):
|
||||
fn = AudioData(original_filename.data, fn)
|
||||
|
||||
return fn, start, end
|
||||
|
||||
def periodic(self):
|
||||
@@ -458,11 +449,7 @@ class Channel(object):
|
||||
|
||||
# Update the channel volume.
|
||||
|
||||
if self.mixer:
|
||||
mixer_volume = renpy.game.preferences.volumes.get(self.mixer, 1.0)
|
||||
else:
|
||||
mixer_volume = 1.0
|
||||
|
||||
mixer_volume = renpy.game.preferences.volumes.get(self.mixer, 1.0)
|
||||
main_volume = renpy.game.preferences.volumes.get("main", 1.0)
|
||||
|
||||
if renpy.game.preferences.self_voicing:
|
||||
@@ -487,6 +474,8 @@ class Channel(object):
|
||||
self.playing = False
|
||||
|
||||
if force_stop:
|
||||
self.wait_stop = False
|
||||
|
||||
if self.loop:
|
||||
self.queue = self.queue[-len(self.loop):]
|
||||
else:
|
||||
@@ -506,6 +495,7 @@ class Channel(object):
|
||||
depth = 0
|
||||
|
||||
if depth == 0:
|
||||
self.wait_stop = False
|
||||
self.playing = False
|
||||
|
||||
# Need to check this, so we don't do pointless work.
|
||||
@@ -522,6 +512,11 @@ class Channel(object):
|
||||
if not self.buffer_queue and depth >= 1:
|
||||
break
|
||||
|
||||
# We can't queue anything if the depth is > 0 and we're
|
||||
# waiting for a synchro_start.
|
||||
if self.synchro_start and depth:
|
||||
break
|
||||
|
||||
# If the queue is full, return.
|
||||
if renpysound.queue_depth(self.number) >= 2:
|
||||
break
|
||||
@@ -564,12 +559,11 @@ class Channel(object):
|
||||
renpysound.set_video(self.number, self.movie, loop=False)
|
||||
|
||||
if depth == 0:
|
||||
renpysound.play(self.number, topf, topq.filename, synchro_start=self.synchro_start, fadein=topq.fadein, tight=topq.tight, start=start, end=end, relative_volume=topq.relative_volume, audio_filter=topq.audio_filter) # type:ignore
|
||||
renpysound.play(self.number, topf, topq.filename, paused=self.synchro_start, fadein=topq.fadein, tight=topq.tight, start=start, end=end, relative_volume=topq.relative_volume, audio_filter=topq.audio_filter) # type:ignore
|
||||
else:
|
||||
renpysound.queue(self.number, topf, topq.filename, synchro_start=self.synchro_start, fadein=topq.fadein, tight=topq.tight, start=start, end=end, relative_volume=topq.relative_volume, audio_filter=topq.audio_filter) # type:ignore
|
||||
renpysound.queue(self.number, topf, topq.filename, fadein=topq.fadein, tight=topq.tight, start=start, end=end, relative_volume=topq.relative_volume, audio_filter=topq.audio_filter) # type:ignore
|
||||
|
||||
self.playing = True
|
||||
self.synchro_start = False
|
||||
|
||||
except Exception:
|
||||
|
||||
@@ -632,6 +626,7 @@ class Channel(object):
|
||||
|
||||
if self.keep_queue == 0:
|
||||
renpysound.dequeue(self.number, even_tight)
|
||||
self.wait_stop = False
|
||||
self.synchro_start = False
|
||||
|
||||
def interact(self):
|
||||
@@ -698,7 +693,6 @@ class Channel(object):
|
||||
|
||||
old_raw_audio_filter = self.context.raw_audio_filter
|
||||
self.context.raw_audio_filter = audio_filter
|
||||
self.raw_audio_filter = audio_filter
|
||||
|
||||
if old_raw_audio_filter is None and audio_filter is None:
|
||||
new_audio_filter = None
|
||||
@@ -710,19 +704,13 @@ class Channel(object):
|
||||
|
||||
self.context.audio_filter = new_audio_filter
|
||||
|
||||
for q in self.queue:
|
||||
q.audio_filter = new_audio_filter
|
||||
|
||||
if replace:
|
||||
renpysound.replace_audio_filter(self.number, new_audio_filter, 1)
|
||||
else:
|
||||
renpysound.replace_audio_filter(self.number, new_audio_filter, 0)
|
||||
for q in self.queue:
|
||||
q.audio_filter = new_audio_filter
|
||||
|
||||
renpysound.replace_audio_filter(self.number, new_audio_filter)
|
||||
|
||||
def enqueue(self, filenames, loop=True, synchro_start=None, fadein=0, tight=None, loop_only=False, relative_volume=1.0):
|
||||
|
||||
if synchro_start is None:
|
||||
synchro_start = self.default_synchro_start
|
||||
def enqueue(self, filenames, loop=True, synchro_start=False, fadein=0, tight=None, loop_only=False, relative_volume=1.0):
|
||||
|
||||
with lock:
|
||||
|
||||
@@ -744,8 +732,8 @@ class Channel(object):
|
||||
# Only fade the first thing in.
|
||||
fadein = 0
|
||||
|
||||
if synchro_start:
|
||||
self.synchro_start = True
|
||||
self.wait_stop = synchro_start
|
||||
self.synchro_start = synchro_start
|
||||
|
||||
if loop:
|
||||
self.loop = list(filenames)
|
||||
@@ -863,8 +851,7 @@ def register_channel(name,
|
||||
buffer_queue=True,
|
||||
movie=False,
|
||||
framedrop=True,
|
||||
force=False,
|
||||
synchro_start=None):
|
||||
force=False):
|
||||
"""
|
||||
:doc: audio
|
||||
:args: (name, mixer, loop=None, stop_on_mute=True, tight=False, file_prefix="", file_suffix="", buffer_queue=True, movie=False, framedrop=True)
|
||||
@@ -915,26 +902,15 @@ def register_channel(name,
|
||||
This controls what a video does when lagging. If true, frames will
|
||||
be dropped to keep up with realtime and the soundtrack. If false,
|
||||
Ren'Py will display frames late rather than dropping them.
|
||||
|
||||
`synchro_start`
|
||||
Does this channel participate in synchro start? Synchro start determines if
|
||||
the channel will start playing at the same time as other channels. If None,
|
||||
this defaults to `loop` if `movie` is False, and False otherwise.
|
||||
"""
|
||||
|
||||
if name == "movie":
|
||||
movie = True
|
||||
|
||||
if synchro_start is None:
|
||||
if movie:
|
||||
synchro_start = False
|
||||
else:
|
||||
synchro_start = loop
|
||||
|
||||
if not force and not renpy.game.context().init_phase and (" " not in name):
|
||||
raise Exception("Can't register channel outside of init phase.")
|
||||
|
||||
c = Channel(name, loop, stop_on_mute, tight, file_prefix, file_suffix, buffer_queue, movie=movie, framedrop=framedrop, synchro_start=synchro_start)
|
||||
c = Channel(name, loop, stop_on_mute, tight, file_prefix, file_suffix, buffer_queue, movie=movie, framedrop=framedrop)
|
||||
|
||||
c.mixer = mixer
|
||||
|
||||
@@ -1053,7 +1029,7 @@ def init():
|
||||
pcm_ok = True
|
||||
except Exception:
|
||||
|
||||
renpy.display.log.write("Audio and video init failed. Proceeding anyway.")
|
||||
renpy.display.log.write("Sound init failed. Proceeding anyway.")
|
||||
renpy.display.log.exception()
|
||||
|
||||
os.environ["SDL_AUDIODRIVER"] = "dummy"
|
||||
@@ -1127,6 +1103,7 @@ def quit(): # @ReservedAssignment
|
||||
c.loop = [ ]
|
||||
c.playing = False
|
||||
c.playing_midi = False
|
||||
c.wait_stop = False
|
||||
c.synchro_start = False
|
||||
|
||||
renpysound.quit()
|
||||
@@ -1191,6 +1168,24 @@ def periodic_pass():
|
||||
|
||||
renpysound.periodic()
|
||||
|
||||
# Perform a synchro-start if necessary.
|
||||
need_ss = False
|
||||
|
||||
for c in all_channels:
|
||||
|
||||
if c.synchro_start and c.wait_stop:
|
||||
need_ss = False
|
||||
break
|
||||
|
||||
if c.synchro_start and not c.wait_stop:
|
||||
need_ss = True
|
||||
|
||||
if need_ss:
|
||||
renpysound.unpause_all_at_start()
|
||||
|
||||
for c in all_channels:
|
||||
c.synchro_start = False
|
||||
|
||||
except Exception:
|
||||
if renpy.config.debug_sound:
|
||||
raise
|
||||
@@ -1270,6 +1265,9 @@ def interact():
|
||||
|
||||
c.interact()
|
||||
|
||||
# if _music_volumes.get(i, 1.0) != c.chan_volume:
|
||||
# c.set_volume(_music_volumes.get(i, 1.0))
|
||||
|
||||
ctx = c.context
|
||||
|
||||
# If we're in the same music change, then do nothing with the
|
||||
@@ -1280,14 +1278,11 @@ def interact():
|
||||
filenames = ctx.last_filenames
|
||||
tight = ctx.last_tight
|
||||
|
||||
if ctx.raw_audio_filter != c.raw_audio_filter:
|
||||
c.set_audio_filter(ctx.raw_audio_filter, True)
|
||||
|
||||
if c.loop != filenames:
|
||||
c.fadeout(max(renpy.config.context_fadeout_music, renpy.config.fadeout_audio))
|
||||
|
||||
if filenames:
|
||||
c.enqueue(filenames, loop=True, synchro_start=c.default_synchro_start, tight=tight, fadein=renpy.config.context_fadein_music, relative_volume=ctx.last_relative_volume)
|
||||
c.enqueue(filenames, loop=True, synchro_start=False, tight=tight, fadein=renpy.config.context_fadein_music, relative_volume=ctx.last_relative_volume)
|
||||
|
||||
c.last_changed = ctx.last_changed
|
||||
|
||||
|
||||
@@ -20,6 +20,6 @@
|
||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
ctypedef void (*apply_audio_filter_type)(object, float *, int, int, int) noexcept
|
||||
ctypedef void (*apply_audio_filter_type)(object, float *, int, int, int)
|
||||
|
||||
cdef apply_audio_filter_type *get_apply_audio_filter()
|
||||
|
||||
+20
-19
@@ -1,4 +1,5 @@
|
||||
1#
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
# (the "Software"), to deal in the Software without restriction,
|
||||
@@ -59,7 +60,7 @@ cdef struct SampleBuffer:
|
||||
# A linked list of sample buffers with 0-16 subchannels.
|
||||
cdef SampleBuffer *free_buffers[SUBCHANNELS+1]
|
||||
|
||||
cdef SampleBuffer *allocate_buffer(int subchannels, int length) noexcept nogil:
|
||||
cdef SampleBuffer *allocate_buffer(int subchannels, int length) nogil:
|
||||
"""
|
||||
Allocates a sample buffer.
|
||||
"""
|
||||
@@ -90,7 +91,7 @@ cdef SampleBuffer *allocate_buffer(int subchannels, int length) noexcept nogil:
|
||||
return buf
|
||||
|
||||
|
||||
cdef void free_buffer(SampleBuffer *buf) noexcept nogil:
|
||||
cdef void free_buffer(SampleBuffer *buf) nogil:
|
||||
"""
|
||||
Frees a sample buffer, by putting it back on the free list.
|
||||
"""
|
||||
@@ -122,7 +123,7 @@ cdef class AudioFilter:
|
||||
|
||||
raise NotImplementedError("prepare")
|
||||
|
||||
cdef SampleBuffer *apply(self, SampleBuffer *samples) noexcept nogil:
|
||||
cdef SampleBuffer *apply(self, SampleBuffer *samples) nogil:
|
||||
"""
|
||||
Applies the filter to the given samples.
|
||||
"""
|
||||
@@ -156,7 +157,7 @@ cdef class Null(AudioFilter):
|
||||
def prepare(self, int samplerate):
|
||||
pass
|
||||
|
||||
cdef SampleBuffer *apply(self, SampleBuffer *samples) noexcept nogil:
|
||||
cdef SampleBuffer *apply(self, SampleBuffer *samples) nogil:
|
||||
cdef SampleBuffer *result = allocate_buffer(samples.subchannels, samples.length)
|
||||
memcpy(result.samples, samples.samples, samples.length * samples.subchannels * sizeof(float))
|
||||
return result
|
||||
@@ -187,7 +188,7 @@ cdef class FilterList:
|
||||
def __dealloc__(self):
|
||||
free(self.filters)
|
||||
|
||||
cdef SampleBuffer *apply(self, int index, SampleBuffer *samples) noexcept nogil:
|
||||
cdef SampleBuffer *apply(self, int index, SampleBuffer *samples) nogil:
|
||||
return (<AudioFilter> self.filters[index]).apply(samples)
|
||||
|
||||
def __iter__(self):
|
||||
@@ -222,7 +223,7 @@ cdef class Sequence(AudioFilter):
|
||||
for f in self.filters:
|
||||
f.prepare(samplerate)
|
||||
|
||||
cdef SampleBuffer *apply(self, SampleBuffer *samples) noexcept nogil:
|
||||
cdef SampleBuffer *apply(self, SampleBuffer *samples) nogil:
|
||||
|
||||
cdef SampleBuffer *result
|
||||
cdef SampleBuffer *old_result = samples
|
||||
@@ -407,7 +408,7 @@ cdef class Biquad(AudioFilter):
|
||||
self.cy2 = a2 / a0
|
||||
|
||||
|
||||
cdef SampleBuffer *apply(self, SampleBuffer *samples) noexcept nogil:
|
||||
cdef SampleBuffer *apply(self, SampleBuffer *samples) nogil:
|
||||
|
||||
cdef SampleBuffer *result = allocate_buffer(samples.subchannels, samples.length)
|
||||
cdef int i, j
|
||||
@@ -633,7 +634,7 @@ cdef class Crossfade(AudioFilter):
|
||||
|
||||
self.duration_samples = int(self.duration * samplerate)
|
||||
|
||||
cdef SampleBuffer *apply(self, SampleBuffer *samples) noexcept nogil:
|
||||
cdef SampleBuffer *apply(self, SampleBuffer *samples) nogil:
|
||||
|
||||
cdef SampleBuffer *result1
|
||||
cdef SampleBuffer *result2
|
||||
@@ -683,7 +684,7 @@ cdef class Mix(AudioFilter):
|
||||
|
||||
import renpy.audio.filter as af
|
||||
|
||||
# This mixes the unchanged input with a delay.
|
||||
# This mixes the the unchanged input with a delay.
|
||||
$ echo = af.Mix(af.Null(), af.Delay(.3))
|
||||
"""
|
||||
|
||||
@@ -704,7 +705,7 @@ cdef class Mix(AudioFilter):
|
||||
for f in self.filters:
|
||||
f.prepare(samplerate)
|
||||
|
||||
cdef SampleBuffer *apply(self, SampleBuffer *samples) noexcept nogil:
|
||||
cdef SampleBuffer *apply(self, SampleBuffer *samples) nogil:
|
||||
|
||||
cdef SampleBuffer *result = NULL
|
||||
cdef SampleBuffer *temp
|
||||
@@ -743,7 +744,7 @@ cdef class Multiply(AudioFilter):
|
||||
def prepare(self, int samplerate):
|
||||
return
|
||||
|
||||
cdef SampleBuffer *apply(self, SampleBuffer *samples) noexcept nogil:
|
||||
cdef SampleBuffer *apply(self, SampleBuffer *samples) nogil:
|
||||
|
||||
cdef SampleBuffer *result
|
||||
cdef int i, j
|
||||
@@ -806,7 +807,7 @@ cdef class DelayBuffer:
|
||||
def __dealloc__(self):
|
||||
free(self.buffer)
|
||||
|
||||
cdef void queue(self, SampleBuffer *samples) noexcept nogil:
|
||||
cdef void queue(self, SampleBuffer *samples) nogil:
|
||||
|
||||
cdef int i, j
|
||||
|
||||
@@ -815,7 +816,7 @@ cdef class DelayBuffer:
|
||||
self.buffer[self.write_index[j]] = samples.samples[i * samples.subchannels + j]
|
||||
self.write_index[j] = (self.write_index[j] + 1) % self.length
|
||||
|
||||
cdef SampleBuffer * dequeue(self, int subchannels, int length) noexcept nogil:
|
||||
cdef SampleBuffer * dequeue(self, int subchannels, int length) nogil:
|
||||
|
||||
cdef SampleBuffer *result = allocate_buffer(subchannels, length)
|
||||
cdef int i, j
|
||||
@@ -864,7 +865,7 @@ cdef class Delay(AudioFilter):
|
||||
if self.buffer is None and self.max_delay >= 0.01:
|
||||
self.buffer = DelayBuffer(self.delay, samplerate, SUBCHANNELS)
|
||||
|
||||
cdef SampleBuffer *apply(self, SampleBuffer *samples) noexcept nogil:
|
||||
cdef SampleBuffer *apply(self, SampleBuffer *samples) nogil:
|
||||
cdef SampleBuffer *result
|
||||
|
||||
if self.max_delay < 0.01:
|
||||
@@ -935,7 +936,7 @@ cdef class Comb(AudioFilter):
|
||||
|
||||
self.filter.prepare(samplerate)
|
||||
|
||||
cdef SampleBuffer *apply(self, SampleBuffer *samples) noexcept nogil:
|
||||
cdef SampleBuffer *apply(self, SampleBuffer *samples) nogil:
|
||||
|
||||
cdef SampleBuffer *delayed
|
||||
cdef SampleBuffer *result
|
||||
@@ -1000,7 +1001,7 @@ cdef class WetDry(AudioFilter):
|
||||
def prepare(self, int samplerate):
|
||||
self.filter.prepare(samplerate)
|
||||
|
||||
cdef SampleBuffer *apply(self, SampleBuffer *samples) noexcept nogil:
|
||||
cdef SampleBuffer *apply(self, SampleBuffer *samples) nogil:
|
||||
|
||||
cdef SampleBuffer *result
|
||||
cdef SampleBuffer *filtered
|
||||
@@ -1106,7 +1107,7 @@ def to_audio_filter(o):
|
||||
raise TypeError("Expected an AudioFilter, got {!r}.".format(o))
|
||||
|
||||
|
||||
cdef void apply_audio_filter(AudioFilter af, float *samples, int subchannels, int length, int samplerate) noexcept nogil:
|
||||
cdef void apply_audio_filter(AudioFilter af, float *samples, int subchannels, int length, int samplerate) nogil:
|
||||
"""
|
||||
:undocumented:
|
||||
"""
|
||||
@@ -1139,5 +1140,5 @@ cdef void apply_audio_filter(AudioFilter af, float *samples, int subchannels, in
|
||||
return
|
||||
|
||||
|
||||
cdef apply_audio_filter_type *get_apply_audio_filter() noexcept:
|
||||
cdef apply_audio_filter_type *get_apply_audio_filter():
|
||||
return <apply_audio_filter_type *> apply_audio_filter
|
||||
|
||||
+6
-16
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
@@ -34,7 +34,7 @@ from renpy.audio.audio import get_channel, get_serial
|
||||
from renpy.audio.audio import register_channel, alias_channel
|
||||
|
||||
|
||||
def play(filenames, channel="music", loop=None, fadeout=None, synchro_start=None, fadein=0, tight=None, if_changed=False, relative_volume=1.0):
|
||||
def play(filenames, channel="music", loop=None, fadeout=None, synchro_start=True, fadein=0, tight=None, if_changed=False, relative_volume=1.0):
|
||||
"""
|
||||
:doc: audio
|
||||
|
||||
@@ -57,12 +57,10 @@ def play(filenames, channel="music", loop=None, fadeout=None, synchro_start=None
|
||||
the channel is paused when the music is played.
|
||||
|
||||
`synchro_start`
|
||||
When True, all channels that have synchro_start set to true will start
|
||||
playing at exactly the same time. This may lead to a pause before the
|
||||
channels start playing. This is useful when playing two audio files that
|
||||
are meant to be synchronized with each other.
|
||||
|
||||
If None, this takes its value from the channel.
|
||||
Ren'Py will ensure that all channels of with synchro_start set to true
|
||||
will start playing at exactly the same time. Synchro_start should be
|
||||
true when playing two audio files that are meant to be synchronized
|
||||
with each other.
|
||||
|
||||
`fadein`
|
||||
This is the number of seconds to fade the music in for, on the
|
||||
@@ -662,19 +660,11 @@ def set_audio_filter(channel, audio_filter, replace=False, duration=0.016):
|
||||
The duration to change from the current to the new filter, in seconds.
|
||||
This prevents a popping sound when changing filters.
|
||||
"""
|
||||
|
||||
replace = replace or renpy.game.after_rollback
|
||||
|
||||
if audio_filter is not None:
|
||||
audio_filter = renpy.audio.filter.to_audio_filter(audio_filter)
|
||||
|
||||
try:
|
||||
c = renpy.audio.audio.get_channel(channel)
|
||||
ctx = c.copy_context()
|
||||
|
||||
t = get_serial()
|
||||
ctx.last_changed = t
|
||||
|
||||
c.set_audio_filter(audio_filter, replace=replace, duration=duration)
|
||||
except Exception:
|
||||
if renpy.config.debug_sound:
|
||||
|
||||
+25
-16
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
@@ -57,8 +57,8 @@ import_pygame_sdl2()
|
||||
|
||||
cdef extern from "renpysound_core.h":
|
||||
|
||||
void RPS_play(int channel, SDL_RWops *rw, char *ext, char* name, int synchro_start, int fadein, int tight, double start, double end, float volume, object audio_filter)
|
||||
void RPS_queue(int channel, SDL_RWops *rw, char *ext, char *name, int synchro_start, int fadein, int tight, double start, double end, float volume, object audio_filter)
|
||||
void RPS_play(int channel, SDL_RWops *rw, char *ext, char* name, int fadein, int tight, int paused, double start, double end, float volume, object audio_filter)
|
||||
void RPS_queue(int channel, SDL_RWops *rw, char *ext, char *name, int fadein, int tight, double start, double end, float volume, object audio_filter)
|
||||
void RPS_stop(int channel)
|
||||
void RPS_dequeue(int channel, int even_tight)
|
||||
int RPS_queue_depth(int channel)
|
||||
@@ -74,7 +74,7 @@ cdef extern from "renpysound_core.h":
|
||||
float RPS_get_volume(int channel)
|
||||
void RPS_set_pan(int channel, float pan, float delay)
|
||||
void RPS_set_secondary_volume(int channel, float vol2, float delay)
|
||||
void RPS_replace_audio_filter(int channel, object audio_filter, int primary)
|
||||
void RPS_replace_audio_filter(int channel, object audio_filter)
|
||||
|
||||
void RPS_advance_time()
|
||||
int RPS_video_ready(int channel)
|
||||
@@ -95,7 +95,7 @@ cdef extern from "renpysound_core.h":
|
||||
|
||||
|
||||
from renpy.audio.filter cimport get_apply_audio_filter
|
||||
RPS_apply_audio_filter = <void (*)(object, float *, int, int, int) noexcept> get_apply_audio_filter()
|
||||
RPS_apply_audio_filter = <void (*)(object, float *, int, int, int)> get_apply_audio_filter()
|
||||
|
||||
|
||||
def check_error():
|
||||
@@ -111,7 +111,7 @@ def check_error():
|
||||
raise Exception(unicode(e, "utf-8", "replace"))
|
||||
|
||||
|
||||
def play(channel, file, name, synchro_start=False, fadein=0, tight=False, start=0, end=0, relative_volume=1.0, audio_filter=None):
|
||||
def play(channel, file, name, paused=False, fadein=0, tight=False, start=0, end=0, relative_volume=1.0, audio_filter=None):
|
||||
"""
|
||||
Plays `file` on `channel`. This clears the playing and queued samples and
|
||||
replaces them with this file.
|
||||
@@ -152,17 +152,22 @@ def play(channel, file, name, synchro_start=False, fadein=0, tight=False, start=
|
||||
if rw == NULL:
|
||||
raise Exception("Could not create RWops.")
|
||||
|
||||
if paused:
|
||||
pause = 1
|
||||
else:
|
||||
pause = 0
|
||||
|
||||
if tight:
|
||||
tight = 1
|
||||
else:
|
||||
tight = 0
|
||||
|
||||
name = name.encode("utf-8")
|
||||
RPS_play(channel, rw, name, name, synchro_start, fadein * 1000, tight, start, end, relative_volume, audio_filter)
|
||||
RPS_play(channel, rw, name, name, fadein * 1000, tight, pause, start, end, relative_volume, audio_filter)
|
||||
check_error()
|
||||
|
||||
|
||||
def queue(channel, file, name, synchro_start=False, fadein=0, tight=False, start=0, end=0, relative_volume=1.0, audio_filter=None):
|
||||
def queue(channel, file, name, fadein=0, tight=False, start=0, end=0, relative_volume=1.0, audio_filter=None):
|
||||
"""
|
||||
Queues `file` on `channel` to play when the current file ends. If no file is
|
||||
playing, plays it.
|
||||
@@ -186,7 +191,7 @@ def queue(channel, file, name, synchro_start=False, fadein=0, tight=False, start
|
||||
tight = 0
|
||||
|
||||
name = name.encode("utf-8")
|
||||
RPS_queue(channel, rw, name, name, synchro_start, fadein * 1000, tight, start, end, relative_volume, audio_filter)
|
||||
RPS_queue(channel, rw, name, name, fadein * 1000, tight, start, end, relative_volume, audio_filter)
|
||||
check_error()
|
||||
|
||||
|
||||
@@ -253,6 +258,14 @@ def unpause(channel):
|
||||
check_error()
|
||||
|
||||
|
||||
def unpause_all_at_start():
|
||||
"""
|
||||
Unpauses all channels that are paused at the start.
|
||||
"""
|
||||
|
||||
RPS_unpause_all_at_start()
|
||||
|
||||
|
||||
def global_pause(pause):
|
||||
"""
|
||||
Pauses or unpauses all channels.
|
||||
@@ -343,19 +356,15 @@ def set_secondary_volume(channel, volume, delay):
|
||||
check_error()
|
||||
|
||||
|
||||
def replace_audio_filter(channel, audio_filter, playing):
|
||||
def replace_audio_filter(channel, audio_filter):
|
||||
"""
|
||||
Replaces the audio filter for `channel` with `audio_filter`.
|
||||
|
||||
`playing`
|
||||
If true, the filter is applied to the currently playing file and queued file. If false,
|
||||
the filter is only applied to the queued file.
|
||||
"""
|
||||
|
||||
if audio_filter is not None:
|
||||
audio_filter.prepare(get_sample_rate())
|
||||
|
||||
RPS_replace_audio_filter(channel, audio_filter, playing)
|
||||
RPS_replace_audio_filter(channel, audio_filter)
|
||||
|
||||
|
||||
def deallocate_audio_filter(audio_filter):
|
||||
@@ -518,7 +527,7 @@ def set_generate_audio_c_function(fn):
|
||||
import ctypes
|
||||
fn = ctypes.cast(fn, ctypes.c_void_p).value
|
||||
|
||||
RPS_generate_audio_c_function = <void (*)(float *, int) noexcept> <uintptr_t> fn
|
||||
RPS_generate_audio_c_function = <void (*)(float *, int)> <uintptr_t> fn
|
||||
|
||||
|
||||
# Store the sample surfaces so they stay alive.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
+18
-12
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
@@ -111,7 +111,7 @@ def proxy_call_both(func):
|
||||
return func
|
||||
|
||||
@proxy_with_channel
|
||||
def play(channel, file, name, synchro_start=False, fadein=0, tight=False, start=0, end=0, relative_volume=1.0, audio_filter=None):
|
||||
def play(channel, file, name, paused=False, fadein=0, tight=False, start=0, end=0, relative_volume=1.0, audio_filter=None):
|
||||
"""
|
||||
Plays `file` on `channel`. This clears the playing and queued samples and
|
||||
replaces them with this file.
|
||||
@@ -119,9 +119,8 @@ def play(channel, file, name, synchro_start=False, fadein=0, tight=False, start=
|
||||
`name`
|
||||
A python object giving a readable name for the file.
|
||||
|
||||
`synchro_start`
|
||||
If true, the file is played in synchro start mode. This means that playinf will be deferred until
|
||||
all other synchro start files are ready to play.
|
||||
`paused`
|
||||
If True, playback is paused rather than started.
|
||||
|
||||
`fadein`
|
||||
The time it should take the fade the music in, in seconds.
|
||||
@@ -157,11 +156,11 @@ def play(channel, file, name, synchro_start=False, fadein=0, tight=False, start=
|
||||
afid = load_audio_filter(audio_filter)
|
||||
|
||||
call("stop", channel)
|
||||
call("queue", channel, file, name, synchro_start, fadein, tight, start, end, relative_volume, afid)
|
||||
call("queue", channel, file, name, paused, fadein, tight, start, end, relative_volume, afid)
|
||||
|
||||
|
||||
@proxy_with_channel
|
||||
def queue(channel, file, name, synchro_start=False, fadein=0, tight=False, start=0, end=0, relative_volume=1.0, audio_filter=None):
|
||||
def queue(channel, file, name, fadein=0, tight=False, start=0, end=0, relative_volume=1.0, audio_filter=None):
|
||||
"""
|
||||
Queues `file` on `channel` to play when the current file ends. If no file is
|
||||
playing, plays it.
|
||||
@@ -182,7 +181,7 @@ def queue(channel, file, name, synchro_start=False, fadein=0, tight=False, start
|
||||
|
||||
afid = load_audio_filter(audio_filter)
|
||||
|
||||
call("queue", channel, file, name, synchro_start, fadein, tight, start, end, relative_volume, afid)
|
||||
call("queue", channel, file, name, False, fadein, tight, start, end, relative_volume, afid)
|
||||
|
||||
|
||||
@proxy_with_channel
|
||||
@@ -259,6 +258,15 @@ def global_pause(pause):
|
||||
# Not used on web.
|
||||
|
||||
|
||||
@proxy_call_both
|
||||
def unpause_all_at_start():
|
||||
"""
|
||||
Unpauses all channels that are paused.
|
||||
"""
|
||||
|
||||
call("unpauseAllAtStart")
|
||||
|
||||
|
||||
@proxy_with_channel
|
||||
def fadeout(channel, delay):
|
||||
"""
|
||||
@@ -352,14 +360,14 @@ def set_secondary_volume(channel, volume, delay):
|
||||
|
||||
|
||||
@proxy_with_channel
|
||||
def replace_audio_filter(channel, audio_filter, primary):
|
||||
def replace_audio_filter(channel, audio_filter):
|
||||
"""
|
||||
Replaces the audio filter for `channel` with `audio_filter`.
|
||||
"""
|
||||
|
||||
afid = load_audio_filter(audio_filter)
|
||||
|
||||
call("replace_audio_filter", channel, afid, primary)
|
||||
call("replace_audio_filter", channel, afid)
|
||||
|
||||
|
||||
def audio_filter_constructor(f):
|
||||
@@ -590,8 +598,6 @@ def periodic():
|
||||
Called periodically (at 20 Hz).
|
||||
"""
|
||||
|
||||
call("periodic")
|
||||
|
||||
|
||||
@proxy_call_both
|
||||
def advance_time():
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
+6
-13
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
@@ -43,12 +43,11 @@ class Callbacks(object):
|
||||
This stores and calls the character callbacks.
|
||||
"""
|
||||
|
||||
def __init__(self, callbacks, interact, type, cb_args, multiple):
|
||||
def __init__(self, callbacks, interact, type, cb_args):
|
||||
self.callbacks = callbacks
|
||||
self.interact = interact
|
||||
self.type = type
|
||||
self.cb_args = cb_args
|
||||
self.multiple = multiple # type: tuple[int, int]|None
|
||||
|
||||
self.what = None # type: str|None
|
||||
self.start = None # type: int|None
|
||||
@@ -80,9 +79,6 @@ class Callbacks(object):
|
||||
if self.last_segment is not None:
|
||||
kwargs["last_segment"] = self.last_segment
|
||||
|
||||
if self.multiple is not None:
|
||||
kwargs["multiple"] = self.multiple
|
||||
|
||||
kwargs["please_ignore_unknown_keyword_arguments"] = None
|
||||
|
||||
kwargs.update(self.cb_args)
|
||||
@@ -91,7 +87,7 @@ class Callbacks(object):
|
||||
c(*args, **kwargs)
|
||||
|
||||
def copy(self):
|
||||
rv = Callbacks(self.callbacks, self.interact, self.type, self.cb_args, self.multiple)
|
||||
rv = Callbacks(self.callbacks, self.interact, self.type, self.cb_args)
|
||||
rv.__dict__.update(self.__dict__)
|
||||
return rv
|
||||
|
||||
@@ -570,7 +566,7 @@ def display_say(
|
||||
callback = [ callback ]
|
||||
|
||||
callback = renpy.config.all_character_callbacks + callback
|
||||
callback = Callbacks(callback, interact, type, cb_args, multiple)
|
||||
callback = Callbacks(callback, interact, type, cb_args)
|
||||
|
||||
roll_forward = renpy.exports.roll_forward_info()
|
||||
|
||||
@@ -714,10 +710,7 @@ def display_say(
|
||||
if scry.extend_text is renpy.ast.DoesNotExtend:
|
||||
break
|
||||
elif scry.extend_text is not None:
|
||||
try:
|
||||
extend_text += renpy.substitutions.substitute(scry.extend_text, scope=None, force=False, translate=True)[0]
|
||||
except Exception:
|
||||
pass
|
||||
extend_text += scry.extend_text
|
||||
|
||||
scry = scry.next()
|
||||
scry_count += 1
|
||||
@@ -797,7 +790,7 @@ def display_say(
|
||||
|
||||
slow = False
|
||||
|
||||
pause_callback("show_done")
|
||||
pause_callback("show_done")
|
||||
|
||||
if not slow:
|
||||
slow_done()
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
@@ -408,11 +408,10 @@ init -1500 python:
|
||||
layout.yesno_screen(layout.OVERWRITE_SAVE, FileSave(self.name, False, False, self.page, cycle=self.cycle, slot=self.slot, action=self.action))
|
||||
return
|
||||
|
||||
with renpy.savelocation.SyncfsLock():
|
||||
if self.cycle:
|
||||
renpy.renpy.loadsave.cycle_saves(__slotname("", self.page, self.slot), config.quicksave_slots)
|
||||
if self.cycle:
|
||||
renpy.renpy.loadsave.cycle_saves(__slotname("", self.page, self.slot), config.quicksave_slots)
|
||||
|
||||
renpy.save(fn, extra_info=save_name)
|
||||
renpy.save(fn, extra_info=save_name)
|
||||
|
||||
renpy.restart_interaction()
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user