Несовместимые изменения (Incompatible Changes)

Материал из Ren'Py Wiki
Перейти к навигации Перейти к поиску

Это список изменений, которые могут потребовать вмешательства в виде изменений скриптов или среды разработки. Наша цель состоит в том, чтобы все остальные изменения не влияли на существующие скрипты.

Обратите внимание, что настройка config.script_version приведёт к отмене многих из этих изменений за счёт потери доступа к последним функциям.

Несовместимые изменения в графическом интерфейсе описаны в разделе «Несовместимые изменения графического интерфейса», поскольку такие изменения вступают в силу только при восстановлении графического интерфейса.

7.3.3[править | править код]

Обратные вызовы, зарегистрированные в config.start_callbacks, теперь выполняются после операторов default во всех случаях. Чтобы восстановить старое поведение (когда обратные вызовы выполнялись до операторов default во время игры, но не при повторном запуске), используйте:

define config.early_start_callbacks = True

7.3.0[править | править код]

Язык экрана теперь выдаёт ошибку "a non-constant keyword argument ... is not allowed after a python block.", когда сталкивается с экранами, похожими на следующие:

screen test():

    default a = 0

    button:
        $ a = 1
        action Return(a)

        text "Тест"

Это связано с тем, что свойство action выполняется перед назначением python, то есть это возвращало 0 при нажатии, а не 1. Чтобы отключить эту проверку, добавьте

define config.keyword_after_python = True

в файл с именем 01compat.rpy в игровой директории вашей игры. Однако ваша игра будет иметь старое поведение.

Порядок, в котором отрисовываются дочерние элементы структуры side, теперь берётся из строки управления. Чтобы вернуться к старому фиксированному порядку, используйте:

define config.keep_side_render_order = False


Интерфейс config.say_attribute_transition_callback был изменен несовместимым образом, чтобы можно было задать наборы старых и новых тегов. Чтобы вернуться к старому интерфейсу, используйте:

define config.say_attribute_transition_callback_attrs = False

Параметр mode также был немного изменен и теперь будет возвращать значение both, когда происходит переход как permanent, так и temporary атрибута.

7.2.2[править | править код]

Переменная config.say_attribute_transition_callback была изменёна, чтобы принять новый аргумент, отображаемое изображение.

7.1.1[править | править код]

Функция window auto в Ren'Py теперь определит, связан ли диалог или заголовок с оператором menu, и попытается скрыть или показать диалоговое окно соответствующим образом. Опция «Перекомпилировать проект» в Ren'Py Launcher необходима для включения информации, которая включает эту функцию. Хотя функция должна работать со старыми играми, её можно отключить, а старое поведение восстановить с помощью:

define config.menu_showed_window = True
define config.window_auto_show = [ "say" ]
define config.window_auto_hide = [ "scene", "call screen" ]

Хотя технически это не является несовместимым изменением, есть рекомендуемое изменение на экране истории. Пожалуйста, посмотрите запись в журнале изменений, чтобы узнать, как обновить вашу игру.

7.1[править | править код]

Когда изображение не показывается, теперь say-with-attributes разрешают боковое изображение, а не просто использует заданные атрибуты. Чтобы отключить это, добавьте:

define config.say_attributes_use_side_image = False

7.0[править | править код]

Теперь Ren'Py определяет автоматические изображения на уровне init 0, а не на очень позднем уровне init. Чтобы вернуться к предыдущему поведению, добавьте в свою игру:

init -1:
    define config.late_images_scan = True


Переходы Dissolve(), ImageDissolve() и AlphaDissolve() теперь по умолчанию используют альфа-канал исходных отображаемых объектов, как если бы было задано значение alpha=True. Чтобы отменить это изменение, добавьте:

define config.dissolve_force_alpha = False


Отображение видео спрайта, который уже отображается, теперь будет воспроизводить фильм. Чтобы вернуться к предыдущему поведению:

define config.replay_movie_sprites = False

6.99.13[править | править код]

Размер гиперссылки теперь наследуется от размера текста, в который включена данная гиперссылка. Чтобы отключить это, добавьте:

define config.hyperlink_inherit_size = False


Текстовый тег {nw} теперь ожидает окончания озвучивания и голоса, прежде чем продолжить. Чтобы отключить это поведение, добавьте:

define config.nw_voice = False


Преобразования ATL теперь показывают по крайней мере один кадр всякий раз, когда происходит пауза или интерполяция. Когда игра не ожидает этого, она может отображаться как серия быстро отображаемых отдельных кадров. Это можно отключить с помощью:

define config.atl_one_frame = False


Оператор show layer at теперь сохраняет состояние преобразования, как и любое другое преобразование ATL. Это может привести к изменению поведения, при котором, например, сохраняется смещение между несколькими операторами show layer at. Чтобы отключить это, пропишите:

define config.keep_show_layer_state = False


Хотя это и не является несовместимым изменением, функция renpy.list_files() была изменена для сортировки выходных данных в стандартном порядке. Причины, по которым Ren'Py совершает неоднозначное поведение. Например, когда несколько файлов в каталоге изображений имеют одно и то же имя, Ren'Py выбирает один случайным образом. Выбранный файл может меняться от системы к системе. Теперь один и тот же файл выбирается везде, где запускается Ren'Py.

6.99.12.3[править | править код]

Ren'Py больше не будет искать системные шрифты в режиме разработчика. Если в вашей игре использовался системный шрифт, файл шрифта должен быть скопирован в папку game. Но, пожалуйста, убедитесь, что это совместимо с лицензией файла шрифта.

6.99.11[править | править код]

Порядок выполнения операторов style и translate изменился, как описано в журнале изменений. Чтобы отменить это изменение, добавьте код:

define config.new_translate_order = False

Обратите внимание, что отмена этого изменения может помешать работе нового графического интерфейса пользователя.

Переменная config.quit_action изменила значение по умолчанию на значение, при котором приглашение к выходу отображается в игровом контексте. Чтобы вернуться к старому поведению, добавьте код:

define config.quit_action = ui.gamemenus("_quit_prompt")


Теперь Ren'Py устанавливает максимальные размеры кнопок и окон. Чтобы отключить это поведение, добавьте код:

define config.enforce_window_max_size = False

6.99.9[править | править код]

Теперь Ren'Py воспроизводит звуки интерфейса на канале с именем «audio», который поддерживает одновременное воспроизведение нескольких звуков. Этот канал может не иметь таких же настроек, как настроенный звуковой канал. Настройки аудиоканала можно изменить, настроив config.auto_channels, или можно использовать звуковой канал, добавив код:

define config.play_channel = "sound"

6.99.2[править | править код]

Ren'Py теперь будет сканировать каталог изображений (каталог с изображениями в директории игры) на наличие изображений и определять их на основе их имени файла. Чтобы отключить это поведение, используйте код:

init python:
    config.image_directory = None

6.18[править | править код]

Операторы show screen и call screen теперь могут оценивать свои аргументы как часть процесса предсказания экрана. Если при оценке аргументов экрана возникают побочные эффекты, операторам show screen или call screen следует задать новое выражение nopredict, которое предотвращает предсказание.

Теперь экраны участвуют в переходах - сейчас переходы переходят из старого состояния экрана в новое. Для отключения установите для config.transition_screens значение False.

Ren'Py больше не использует структурное равенство для передачи состояния (например, состояния преобразования), когда экран заменяет экран тем же тегом. Вместо этого оператор use теперь поддерживает свойство id, которое можно использовать для явной передачи состояния.

6.16[править | править код]

Значение параметра loop изменено для MusicRoom(). Чтобы получить старое поведение, установите для loop и single_track значение True.

6.15.7[править | править код]

Теперь Ren'Py ожидает, что режим авточтения будет управляться настройкой "auto-forward" Preference(). Чтобы управлять им с помощью ползунка режима авточтения, установите для config.default_afm_enable значение None.

6.14[править | править код]

Ранее Ren'Py перемещал заархивированные файлы в каталог archived/. Он будет искать этот каталог автоматически при запуске игры или создании архивов. Сборки одним нажатием делают это ненужным, и файлы в archived/ должны быть перемещены обратно в директорию игры.

MoveTransition() изменил свой интерфейс. Старая версия MoveTransition может быть доступна как OldMoveTransition, если вы не хотите переписывать свой код. Изменения имеют значение только при использовании фабрик с MoveTransition.

Transform() изменил своё поведение в отношении асимметрично масштабирования и поворота изображений. Вряд ли старое поведение когда-либо использовалось.

6.13.8[править | править код]

Интерполяция строк в старом стиле была включена по умолчанию. Если вы написали код (между версией 6.13 и 6.13.7), который использует % в операторах say или menu, вы должны либо написать %%, либо включить код:

init python:
    config.old_substitutions = False

6.13[править | править код]

Изменения в поведении текста могут во многом повлиять на игры в процессе разработки. Самым большим изменением является введение замен текстов в новом стиле (в квадратных скобках) и устранение замен старого стиля (в процентах). Эти изменения могут быть отменены с помощью кода:

init python:
    config.old_substitutions = True
    config.new_substitutions = False

Замены нового и старого стиля могут сосуществовать в одной и той же игре, если установить для обеих переменных значение True.


Ren'Py также изменил поведение переноса строк по умолчанию. Хотя новое поведение никогда не должно увеличивать количество строк в абзаце, оно может изменить то, какие слова попадают в каждую строку. Чтобы восстановить старое поведение, добавьте код:

init python:
    style.default.layout = "greedy"
    style.default.language = "western"


Исправлена ошибка с отрицательным line_spacing. Это исправление может привести к уменьшению блоков текста по высоте. Чтобы вернуться к старому поведению, используйте:

init python:
    config.broken_line_spacing = True


Наконец, новый текстовый код может привести к появлению артефактов при отображении медленного текста, особенно в сочетании с отрицательным межстрочным интервалом. Рассмотрите возможность настройки line_overlap_split, чтобы это исправить.

6.12.1[править | править код]

Имена изображений изменились со статических имён на имена на основе атрибутов. Это может привести к тому, что имена изображений, которые ранее были уникальными, стали неоднозначными. Чтобы отключить имена изображений на основе атрибутов, задайте для config.image_attributes значение False.

Отображение изображения без предоставления преобразования или ATL-блока теперь продолжит предыдущее преобразование, которое использовалось изображением. Это означает, что движущееся изображение может продолжать двигаться после его изменения. Чтобы вернуться к старому поведению, установите для config.keep_running_transform значение False.

Аргумент image для Character() изменил значение. Хотя старое значение не поддерживалось в среде на основе экранов, его можно восстановить в целях совместимости, установив для config.new_character_image_argument значение False.

6.12.0[править | править код]

Изменилось определение параметра items экранов сhoice и nvl_choice. Экран nvl_choice устарел в пользу экрана NVL.

Экраны могут быть вызваны в любое время, чтобы можно было прогнозировать изображение, если только они не имеют прогнозирующего свойства False. Если свойство predict принимает значение не False, экраны не должны вызывать побочные эффекты при их первоначальном отображении.

По причине производительности Ren'Py теперь игнорирует свойства позиции ImageReferences. Это означает, что свойства позиции style.image_placement теперь игнорируются. Чтобы вернуться к старому поведению, установите для config.imagereference_respects_position значение True.

6.11.1[править | править код]

MoveTransition был изменён с учётом параметров xoffset и yoffset отображаемых объектов, которые он перемещает. Заводские функции, используемые для перемещения, теперь принимают параметры xoffset и yoffset. Хотя встроенные заводские настройки перемещения принимают эти параметры без проблем, пользовательские настройки могут нуждаться в обновлении, чтобы использовать или игнорировать эти дополнительные параметры.

6.11.0[править | править код]

Преобразование, указанное в переменной config.default_transform, используется для инициализации свойств преобразования изображений, отображаемых с помощью операторов show и hide. Значение этого преобразования по умолчанию устанавливает для xpos и xanchor значение 0.5, а для ypos и yanchor - значение 1.0.

Это представляет собой изменение значения по умолчанию для этих свойств стиля, которые ранее не были инициализированы и, следовательно, по умолчанию имели значение 0.

Включая преобразование reset в преобразования ATL, эти свойства можно сбросить обратно до 0. Кроме того, можно прекратить использовать преобразование по умолчанию и вернуться к старому поведению, используя код:

init python:
    style.image_placement.xpos = 0.5
    style.image_placement.ypos = 1.0
    style.image_placement.xanchor = 0.5
    style.image_placement.yanchor = 1.0

    config.default_transform = None


Если преобразование не определяет одно из свойств позиции xpos, ypos, xanchor или yanchor, это свойство будет взято из дочернего элемента преобразования, если оно определяет это свойство.

Это позволяет одному преобразованию управлять вертикальным движением отображаемого объекта, а другому - горизонтальным. Но это несовместимо с предыдущим поведением и поэтому может быть отключено с помощью переменной config.transform_uses_child_position.

init python:
    config.transform_uses_child_position = False

6.10.0[править | править код]

Положение по умолчанию (left, right, center, truecenter, offscreenleft и offscreenright) теперь определяются как преобразования ATL. Это означает, что отображение изображения в такой позиции приведёт к запоминанию этого положения. Если такое поведение нежелательно, необходимо переопределить эти позиции, добавив код:

define left = Position(xalign=0.0)
define center = Position(xalign=0.5)
define truecenter = Position(xalign=0.5, yalign=0.5)
define right = Position(xalign=1.0)
define offscreenleft = Position(xpos=0.0, xanchor=1.0)
define offscreenright = Position(xpos=1.0, xanchor=0.0)

6.9.2[править | править код]

Чтобы перенести игру из Ren'Py 6.9.2 или более поздней версии, скопируйте каталог, содержащий вашу игру, в каталог ваших проектов. Вы можете выбрать каталог проектов, нажав «Параметры», «Каталог проектов» в Ren'Py Launcher. Сведения о миграции из более старых версий смотри в примечаниях к выпуску Ren'Py 6.9.2.

Источник[править | править код]

Статья "Incompatible Changes" на английском языке.


На главную страницу Официальная документация движка Вернуться к началу статьи