Конфликты переменных и файлов и как их избежать

...статья, также известная под названием рекомендации по предотвращению конфликтов переменных и файлов.

Эта статья станет ещё понятнее, если перед прочтением узнать, как в Ren'Py работают переменные и объекты store!

Часто в описаниях модов можно увидеть такие фразы:

Рекомендуется использовать Менеджер модов.1

Так же используйте менеджер модов2

Для большей работоспособности настоятельно рекомендую использовать "Менеджер модов".3

Некоторые моды прибегают к крайним мерам, просят удалить все моды кроме себя. А сделано это для простейшего предотвращения конфликтов переменных и файлов.

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

Но как это предотвращать?

Предотвращение конфликтов переменных

Для предотвращения конфликтов переменных достаточно чтобы название вашей переменной было уникальным по сравнению с другими.

Можно, конечно, написать всякую белиберду в название переменной...

init python:
    kauzqfeeobdtf = Character("Алексей")
    ommfhhpdpateqm = renpy.music.play
    wjgqhckymp = 0

...но этого крайне не рекомендуется делать. Никто, включая вас, не поймёт что содержат эти переменные.

Вместо этого рекомендуется называть переменные соблюдая несколько важных правил.


В идеале названия ваших переменных должны выглядеть так:

mymod_chr_al
mymod_func_play
mymod_var_tries

...или так:

chr_al_mymod
func_play_mymod
var_tries_mymod

То есть:

<Сокращение мода>_<Тип переменной>_<Название переменной>

...или:

<Тип переменной>_<Название переменной>_<Сокращение мода>

1. Сокращённое название мода

Первое правило леса называния переменных!
Каждая переменная должна иметь префикс или постфикс в виде короткого названия мода.

Это может быть как и часть или полное название мода...

Пионериада4 — d2_me_necktie_pioneriada

...так и аббревиатура...

Сквозь Страх (англ. Through The Fear)5 — TTF_Day1

...или другое сокращение.

Distorted Souls6 — disoul_amb_camera_siren_st

2. Тип переменной

Далее, тип переменной, средняя часть.

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

Группа Сокращение
Фоновые звуки ambient/amb, ambience
Звуковые эффекты sfx, sound/snd
Музыка music/mus
Персонаж character/char/chr
Функция function/func
Класс class/cls
Прочие переменные variable/var

То есть переменная из мода mymod и содержащая музыкальный трек tension должна называться так:

mymod_mus_tension
      ↑↑↑ Именно такой тип

3. Правильное название переменной

И последнее (или первое, смотря как вы расставляете эти части) — правильное название переменной.

Правильное в этом случае значит наиболее информативное и наиболее короткое. Называйте переменные так, чтобы вы понимали, что в них хранится, но при этом сокращайте название до такого состояния, пока оно не станет наиболее коротким, сохраняя смысл. Например, название переменной mymod_sfx_boom будет куда менее понятно чем mymod_sfx_statue_explosion.

Транслитерация (написание русских слов латиницей) не рекомендуется, но и не запрещается. Но имейте ввиду, что в сообществе программистов это считается плохой практикой.

Автоматическая инициализация

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

Предотвращение конфликтов путей файлов

Помимо переменных конфликтовать могут ещё и файлы. Но перед этим стоит рассказать как в принципе работают пути в Бесконечном Лете.

При запуске игры все файлы из каждой папки в <Папка Steam>\steamapps\workshop\content\331470\ помещаются в <Папка Steam>\steamapps\common\Everlasting Summer\game\. При этом файлы могут перезаписывать друг друга. Таким образом, если в двух или более модах есть файлы, которые имеют одинаковые пути, то из этих файлов останется и обработается только один.

Все файлы загружаются по порядку от Я до А, от Z до A, от 9 до 0, от самого глубокого до самого повехностного файла7.


Обновлено