Compare commits

...

35 Commits

Author SHA1 Message Date
Tom Rothamel 8a21aa55dc Wrap json loaded in revertible objects.
This is intended to improve compatibility with older games that might
use .iteritems and similar methods.
2025-02-12 23:21:48 -05:00
Tom Rothamel 6c948bf046 fonts: Allow deallocation and clear face cache.
So fonts can be reloaded when required. Fixes #6153.
2025-02-12 22:51:50 -05:00
Tom Rothamel 8de2bda1e6 Proxy SelectedIf and SensitiveIf lists into a single Action.
Fixes #6132.
2025-02-07 01:24:18 -05:00
Tom Rothamel 5e3b209ba2 Fix the name of config.dissolve_shrinks.
Fixes #6122.
2025-01-31 22:07:18 -05:00
Tom Rothamel 2e45c3e609 doc: Fixes.
Fixes #6097.
2025-01-24 21:29:51 -05:00
Tom Rothamel 8c7a3b13bf Merge pull request #6105 from nullvoid8/docs_nearrect
Update `nearrect` documentation
2025-01-23 22:32:49 -05:00
Tom Rothamel 4a0738f2aa Document build.version.
Fixes #6102.
2025-01-22 22:19:42 -05:00
nullvoid8 899eb6616f merge documentation of nearrect the class, and nearrect the statement 2025-01-23 02:46:14 +00:00
Tom Rothamel 536fce4a22 sl2: Add box properties to imagemap.
As documented. Fixes #6090.
2025-01-18 23:03:42 -05:00
Tom Rothamel ca9e2dfe47 Fix regexp. 2025-01-14 01:49:35 -05:00
Tom Rothamel 321434e95e Allow a displayable with size to opt out of mouse focus.
And do that for viewports.

Fixes #6081.
2025-01-14 01:44:45 -05:00
the66F95 41b6e689d3 fix some newline typos 2025-01-13 08:56:13 -05:00
Tom Rothamel 7958f5445a Make gles2 the default renderer on arm-linux.
As it's much faster on Raspberry Pi, and probably other arm-linux
devices.
2025-01-11 22:36:46 -05:00
Gio efd4cc6b5e Document cb_args cb_ prefix behavior 2025-01-11 15:34:01 -05:00
Tom Rothamel 35c4ba4a41 Make all fields in gl2draw public.
Fixes #6060.
2025-01-10 22:56:34 -05:00
Tom Rothamel 5361a8e9a5 Ignore text tag errors that happen after {done}. 2025-01-10 01:21:56 -05:00
Tom Rothamel ba76f970c5 Perform substitution when scrying extend text.
This prevents problems if the scryed text substitutes things.

Fixes #6071
2025-01-10 01:07:25 -05:00
Tom Rothamel 7d8d05107b Allow the fix branch to run on python 3.12. 2025-01-09 22:44:43 -05:00
Tom Rothamel 2639028ce7 Document config.has_music, config.has_sound, and config.has_voice.
Also, slight correction on how a channel without a mixer works.

Fixes #6068.
2025-01-08 08:27:10 -05:00
Kassy beedbc0a22 Do not kill Renders that cache the last video frame on Web (#6057)
Fixes and issue where, when the next video frame is not ready, the previous one is returned by get_movie_texture_web(). Normally, this is just a GLTexture instance, but when using a mask, that frame is a Render instance instead. The problem is that Render instances get killed soon after they have been drawn, so get_movie_texture_web() returns a dead instance when re-using the previous frame which causes a crash because of missing uniforms when drawing the screen.

Fixes #6050.
2025-01-05 00:50:49 -05:00
Tom Rothamel 74157a4ad6 Update copyright for 2025. 2025-01-02 18:48:44 -05:00
Ruben Garcia 25b4a17d1a Fix typo 2025-01-02 18:47:03 -05:00
Tom Rothamel 4163c1396c Merge pull request #6035 from shawna-p/default-focus-fix2
Don't overrule focus override for max focus
2024-12-25 20:39:00 -05:00
shawna-p d6ab06dd1f Don't overrule focus override for max focus 2024-12-25 16:42:56 -05:00
Tichq 3db515db3c fix: function staticmethod of TransformMatrix 2024-12-25 07:29:53 -05:00
Tom Rothamel cc654ebfeb atl: Distinguish between children and included transforms.
During prediction. Fixes #6014.
2024-12-25 00:04:04 -05:00
Tom Rothamel f389c13b29 Better error if textshaders are used incorrectly. 2024-12-24 00:23:35 -05:00
Tom Rothamel c57dbe7a9d Use the correct condition for including i686.
Fixes #6028.
2024-12-23 20:34:28 -05:00
Tom Rothamel e35fcb2e86 Only include the current libpython3.{x}.dll in builds. 2024-12-22 09:32:23 -05:00
Tom Rothamel 38b505ba36 Fix code-typo regarding tight playback.
Fixes #6019.
2024-12-22 01:32:26 -05:00
Tom Rothamel f132d49157 text: Handle events in virtual coordinates.
Fixes #6013.
2024-12-18 23:17:56 -05:00
Tom Rothamel ba0bc218c2 cy3: Add noexcept annotations.
These allow Ren'Py to be compiled by cython 3.0.
2024-12-14 20:50:07 -05:00
Tom Rothamel 97331e2464 Fix to how SetCharacterVolume sets the volume.
Previously, it would try to adjust the volume. Now it treats it
the same way _CharacterVolumeValue does.

Fixes #6001.
2024-12-13 20:05:12 -05:00
Tom Rothamel 8d38a6ae4d Add no_launcher_links.txt.
If a file named ``no_launcher_links.txt`` exists in the Ren'Py base directory (the one with
renpy.exe, renpy.sh, and renpy.app in it), the launcher will disable links to renpy.org. While
not guaranteed, this is intended in educational and homeschool environments to prevent young
Ren'Py users from seeing adult sponsors.
2024-12-11 22:27:36 -05:00
Tom Rothamel e3c4993487 Bump the fix version. 2024-12-08 23:48:49 -05:00
332 changed files with 605 additions and 453 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+5 -3
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
@@ -1100,12 +1100,14 @@ fix_dlc("renios", "renios")
prefix = py("lib/py{major}-")
if os.path.exists(linux_i686):
i686fn = os.path.join(config.renpy_base, prefix + "linux-i686/renpy")
if os.path.exists(i686fn):
self.add_file(
linux_i686,
prefix + "linux-i686/" + self.executable_name,
os.path.join(config.renpy_base, prefix + "linux-i686/renpy"),
i686fn,
True)
self.add_file(
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+2 -2
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
@@ -172,7 +172,7 @@ class CodeGenerator(object):
for l in self.lines:
m = re.match('^(\s*)define (.*?) =', l)
m = re.match(r'^(\s*)define (.*?) =', l)
if m:
indent = m.group(1)
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+11 -4
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
@@ -33,6 +33,10 @@ init python in interface:
DOC_URL = "http://www.renpy.org/doc/html/"
DOC_LOCAL_URL = "file:///" + DOC_PATH
# If true, the launcher should not link back to renpy.org.
NO_LAUNCHER_LINKS = os.path.exists(os.path.join(config.renpy_base, "no_launcher_links.txt"))
local_doc_exists = os.path.exists(DOC_PATH)
def get_doc_url(page):
@@ -40,7 +44,7 @@ init python in interface:
Returns the URL to the documentation page.
"""
if local_doc_exists and not persistent.use_web_doc:
if local_doc_exists and (NO_LAUNCHER_LINKS or not persistent.use_web_doc):
from urllib.parse import urljoin
from urllib.request import pathname2url
@@ -117,7 +121,10 @@ screen bottom_info:
hbox:
spacing INDENT
textbutton _("Documentation") style "l_link" action interface.OpenDocumentation()
textbutton _("Ren'Py Website") style "l_link" action OpenURL(interface.RENPY_URL)
if not interface.NO_LAUNCHER_LINKS:
textbutton _("Ren'Py Website") style "l_link" action OpenURL(interface.RENPY_URL)
textbutton _("[interface.version]") style "l_link" action Jump("about")
hbox:
@@ -133,7 +140,7 @@ screen bottom_info:
textbutton _("preferences") style "l_link" action Jump("preferences")
textbutton _("quit") style "l_link" action Quit(confirm=False)
if persistent.sponsor_message:
if persistent.sponsor_message and not interface.NO_LAUNCHER_LINKS:
textbutton _("Ren'Py Sponsor Information"):
style "l_link"
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+7 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
@@ -410,9 +410,15 @@ 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 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
translate german strings:
# screens.rpy:9
+1 -1
View File
@@ -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:\[exception!q]"
new "Ocorreu uma exceção ao executar o editor de texto:\n[exception!q]"
# game/editor.rpy:423
old "Select Editor"
+1 -1
View File
@@ -1874,7 +1874,7 @@
# game/androidstrings.rpy:43
old "I was unable to use javac to compile a test file. If you haven't installed the Java Development Kit yet, please download it from:\n\n{a=https://adoptium.net/?variant=openjdk8}https://adoptium.net/?variant=openjdk8{/a}\n\nThe JDK is different from the JRE, so it's possible you have Java without having the JDK. Please make sure you installed the 'JavaSoft (Oracle) registry keys'.\n\nWithout a working JDK, I can't continue."
new "Не удалось использовать javac для компиляции тестового файла. Если вы еще не установили Java Development Kit, загрузите его с:\n\n{a=https://adoptium.net/?variant=openjdk8}https://adoptium.net/?variant=openjdk8{/a}\n\JDK отличается от JRE, поэтому возможно, что у вас есть Java без JDK. Пожалуйста, убедитесь, что вы установили 'переменные окружения JavaSoft (Oracle)'.\n\nБез работающего JDK я не могу продолжать."
new "Не удалось использовать javac для компиляции тестового файла. Если вы еще не установили Java Development Kit, загрузите его с:\n\n{a=https://adoptium.net/?variant=openjdk8}https://adoptium.net/?variant=openjdk8{/a}\n\nJDK отличается от JRE, поэтому возможно, что у вас есть Java без JDK. Пожалуйста, убедитесь, что вы установили 'переменные окружения JavaSoft (Oracle)'.\n\nБез работающего JDK я не могу продолжать."
# game/androidstrings.rpy:64
old "I've opened the directory containing android.keystore and bundle.keystore. Please back them up, and keep them in a safe place."
+1 -1
View File
@@ -884,7 +884,7 @@ translate spanish strings:
# renpy/common/00sync.rpy:593
old "You can use this ID to download your save on another device.\nThis sync will expire in an hour.\nRen'Py Sync is supported by {a=https://www.renpy.org/sponsors.html}Ren'Py's Sponsors{/a}."
new "Puede usar esta ID para descargar su guardado en otro dispositivo.\nEsta sincronización caducará en una hora.\RenPy Sync está para {a=https://www.renpy.org/sponsors.html}los patrocinadores de Ren'Py{/a}."
new "Puede usar esta ID para descargar su guardado en otro dispositivo.\nEsta sincronización caducará en una hora.\nRenPy Sync está para {a=https://www.renpy.org/sponsors.html}los patrocinadores de Ren'Py{/a}."
# renpy/common/00sync.rpy:619
old "Sync Error"
+1 -1
View File
@@ -1,4 +1,4 @@
translate ukrainian strings:
# 00action_file.rpy:26
+1 -1
View File
@@ -1,4 +1,4 @@
translate ukrainian strings:
# 00console.rpy:255
+1 -1
View File
@@ -1,4 +1,4 @@
translate ukrainian strings:
# 00gltest.rpy:70
+1 -1
View File
@@ -1,4 +1,4 @@
translate ukrainian strings:
# gui/game/gui.rpy:2
+1 -1
View File
@@ -1,4 +1,4 @@
translate ukrainian strings:
# game/about.rpy:39
+1 -1
View File
@@ -1,4 +1,4 @@
translate ukrainian strings:
# gui/game/options.rpy:1
+1 -1
View File
@@ -1,4 +1,4 @@
translate ukrainian strings:
# gui/game/screens.rpy:9
+1 -1
View File
@@ -1,4 +1,4 @@
# У цьому файлі міститься сценарій гри.
# У цьому файлі міститься сценарій гри.
# Визначення персонажів для гри.
# Аргумент color змінює колір ім’я персонажа.
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,5 +1,5 @@
# -*- python -*-
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+4 -17
View File
@@ -8,25 +8,12 @@ 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
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
ctypedef signed int FT_Int32
ctypedef unsigned int FT_UInt32
ctypedef int FT_Fast
ctypedef unsigned int FT_UFast
# Moved up.
cdef struct FT_ModuleRec_
+1 -1
View File
@@ -1,6 +1,6 @@
#!/usr/bin/env python
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
View File
+1 -1
View File
@@ -3,7 +3,7 @@
# This file is part of Ren'Py. The license below applies to Ren'Py only.
# Games and other projects that use Ren'Py may use a different license.
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+2 -2
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
@@ -1334,7 +1334,7 @@ class RawMultipurpose(RawStatement):
except Exception:
continue
if isinstance(i, ATLTransformBase):
if isinstance(i, ATLTransformBase) and (i.child is None):
i.atl.predict(ctx)
return
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+6 -6
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
@@ -458,7 +458,11 @@ class Channel(object):
# Update the channel volume.
mixer_volume = renpy.game.preferences.volumes.get(self.mixer, 1.0)
if self.mixer:
mixer_volume = renpy.game.preferences.volumes.get(self.mixer, 1.0)
else:
mixer_volume = 1.0
main_volume = renpy.game.preferences.volumes.get("main", 1.0)
if renpy.game.preferences.self_voicing:
@@ -1266,12 +1270,8 @@ 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
# music.
if c.last_changed == ctx.last_changed:
+1 -1
View File
@@ -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)
ctypedef void (*apply_audio_filter_type)(object, float *, int, int, int) noexcept
cdef apply_audio_filter_type *get_apply_audio_filter()
+18 -19
View File
@@ -1,5 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
#
1#
# 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,
@@ -60,7 +59,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) nogil:
cdef SampleBuffer *allocate_buffer(int subchannels, int length) noexcept nogil:
"""
Allocates a sample buffer.
"""
@@ -91,7 +90,7 @@ cdef SampleBuffer *allocate_buffer(int subchannels, int length) nogil:
return buf
cdef void free_buffer(SampleBuffer *buf) nogil:
cdef void free_buffer(SampleBuffer *buf) noexcept nogil:
"""
Frees a sample buffer, by putting it back on the free list.
"""
@@ -123,7 +122,7 @@ cdef class AudioFilter:
raise NotImplementedError("prepare")
cdef SampleBuffer *apply(self, SampleBuffer *samples) nogil:
cdef SampleBuffer *apply(self, SampleBuffer *samples) noexcept nogil:
"""
Applies the filter to the given samples.
"""
@@ -157,7 +156,7 @@ cdef class Null(AudioFilter):
def prepare(self, int samplerate):
pass
cdef SampleBuffer *apply(self, SampleBuffer *samples) nogil:
cdef SampleBuffer *apply(self, SampleBuffer *samples) noexcept nogil:
cdef SampleBuffer *result = allocate_buffer(samples.subchannels, samples.length)
memcpy(result.samples, samples.samples, samples.length * samples.subchannels * sizeof(float))
return result
@@ -188,7 +187,7 @@ cdef class FilterList:
def __dealloc__(self):
free(self.filters)
cdef SampleBuffer *apply(self, int index, SampleBuffer *samples) nogil:
cdef SampleBuffer *apply(self, int index, SampleBuffer *samples) noexcept nogil:
return (<AudioFilter> self.filters[index]).apply(samples)
def __iter__(self):
@@ -223,7 +222,7 @@ cdef class Sequence(AudioFilter):
for f in self.filters:
f.prepare(samplerate)
cdef SampleBuffer *apply(self, SampleBuffer *samples) nogil:
cdef SampleBuffer *apply(self, SampleBuffer *samples) noexcept nogil:
cdef SampleBuffer *result
cdef SampleBuffer *old_result = samples
@@ -408,7 +407,7 @@ cdef class Biquad(AudioFilter):
self.cy2 = a2 / a0
cdef SampleBuffer *apply(self, SampleBuffer *samples) nogil:
cdef SampleBuffer *apply(self, SampleBuffer *samples) noexcept nogil:
cdef SampleBuffer *result = allocate_buffer(samples.subchannels, samples.length)
cdef int i, j
@@ -634,7 +633,7 @@ cdef class Crossfade(AudioFilter):
self.duration_samples = int(self.duration * samplerate)
cdef SampleBuffer *apply(self, SampleBuffer *samples) nogil:
cdef SampleBuffer *apply(self, SampleBuffer *samples) noexcept nogil:
cdef SampleBuffer *result1
cdef SampleBuffer *result2
@@ -705,7 +704,7 @@ cdef class Mix(AudioFilter):
for f in self.filters:
f.prepare(samplerate)
cdef SampleBuffer *apply(self, SampleBuffer *samples) nogil:
cdef SampleBuffer *apply(self, SampleBuffer *samples) noexcept nogil:
cdef SampleBuffer *result = NULL
cdef SampleBuffer *temp
@@ -744,7 +743,7 @@ cdef class Multiply(AudioFilter):
def prepare(self, int samplerate):
return
cdef SampleBuffer *apply(self, SampleBuffer *samples) nogil:
cdef SampleBuffer *apply(self, SampleBuffer *samples) noexcept nogil:
cdef SampleBuffer *result
cdef int i, j
@@ -807,7 +806,7 @@ cdef class DelayBuffer:
def __dealloc__(self):
free(self.buffer)
cdef void queue(self, SampleBuffer *samples) nogil:
cdef void queue(self, SampleBuffer *samples) noexcept nogil:
cdef int i, j
@@ -816,7 +815,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) nogil:
cdef SampleBuffer * dequeue(self, int subchannels, int length) noexcept nogil:
cdef SampleBuffer *result = allocate_buffer(subchannels, length)
cdef int i, j
@@ -865,7 +864,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) nogil:
cdef SampleBuffer *apply(self, SampleBuffer *samples) noexcept nogil:
cdef SampleBuffer *result
if self.max_delay < 0.01:
@@ -936,7 +935,7 @@ cdef class Comb(AudioFilter):
self.filter.prepare(samplerate)
cdef SampleBuffer *apply(self, SampleBuffer *samples) nogil:
cdef SampleBuffer *apply(self, SampleBuffer *samples) noexcept nogil:
cdef SampleBuffer *delayed
cdef SampleBuffer *result
@@ -1001,7 +1000,7 @@ cdef class WetDry(AudioFilter):
def prepare(self, int samplerate):
self.filter.prepare(samplerate)
cdef SampleBuffer *apply(self, SampleBuffer *samples) nogil:
cdef SampleBuffer *apply(self, SampleBuffer *samples) noexcept nogil:
cdef SampleBuffer *result
cdef SampleBuffer *filtered
@@ -1107,7 +1106,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) nogil:
cdef void apply_audio_filter(AudioFilter af, float *samples, int subchannels, int length, int samplerate) noexcept nogil:
"""
:undocumented:
"""
@@ -1140,5 +1139,5 @@ cdef void apply_audio_filter(AudioFilter af, float *samples, int subchannels, in
return
cdef apply_audio_filter_type *get_apply_audio_filter():
cdef apply_audio_filter_type *get_apply_audio_filter() noexcept:
return <apply_audio_filter_type *> apply_audio_filter
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+3 -3
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
@@ -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)> get_apply_audio_filter()
RPS_apply_audio_filter = <void (*)(object, float *, int, int, int) noexcept> get_apply_audio_filter()
def check_error():
@@ -518,7 +518,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)> <uintptr_t> fn
RPS_generate_audio_c_function = <void (*)(float *, int) noexcept> <uintptr_t> fn
# Store the sample surfaces so they stay alive.
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+5 -2
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
@@ -714,7 +714,10 @@ def display_say(
if scry.extend_text is renpy.ast.DoesNotExtend:
break
elif scry.extend_text is not None:
extend_text += scry.extend_text
try:
extend_text += renpy.substitutions.substitute(scry.extend_text, scope=None, force=False, translate=True)[0]
except Exception:
pass
scry = scry.next()
scry_count += 1
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+40 -3
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
@@ -69,6 +69,37 @@ init -1500 python:
else:
return false
class _ActionList(Action, DictEquality):
"""
:undocumented:
Encapsulates a list of actions, so that they can be treated as a single action,
for the purposes of SelectedIf and SensitiveIf.
"""
def __init__(self, actions):
self.actions = actions
def get_selected(self):
return renpy.display.behavior.is_selected(self.actions)
def get_sensitive(self):
return renpy.display.behavior.is_sensitive(self.actions)
def get_tooltip(self):
return renpy.display.behavior.get_tooltip(self.actions)
def periodic(self, st):
return renpy.display.behavior.run_periodic(self.actions, st)
def unhovered(self):
return renpy.display.behavior.run_unhovered(self.actions)
def __call__(self):
return renpy.run(self.actions)
@renpy.pure
class SelectedIf(Action, DictEquality):
"""
@@ -89,10 +120,13 @@ init -1500 python:
# Note: This had been documented to take a boolean.
def __init__(self, expression):
if isinstance(expression, (list, tuple)):
expression = _ActionList(expression)
self.expression = expression
if isinstance(expression, Action):
for i in ("get_selected", "get_sensitive", "get_tooltip", "periodic", "unhovered"):
for i in ("get_selected", "get_sensitive", "get_tooltip", "periodic", "unhovered", "alt"):
setattr(self, i, getattr(expression, i, None))
def __call__(self):
@@ -123,10 +157,13 @@ init -1500 python:
# Note: This had been documented to take a boolean.
def __init__(self, expression):
if isinstance(expression, (list, tuple)):
expression = _ActionList(expression)
self.expression = expression
if isinstance(expression, Action):
for i in ("get_selected", "get_sensitive", "get_tooltip", "periodic", "unhovered"):
for i in ("get_selected", "get_sensitive", "get_tooltip", "periodic", "unhovered", "alt"):
setattr(self, i, getattr(expression, i, None))
def __call__(self):
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
+1 -1
View File
@@ -1,4 +1,4 @@
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
# Copyright 2004-2025 Tom Rothamel <pytom@bishoujo.us>
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files

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