[Техпоп] Что такое «Семантическое Версионирование» или почему с обновлением BSIPA до 4.0.2 сломались моды для Beat Saber

На днях Beat Saber обновился до 1.8.0, а BSIPA (библиотека, которая добавляет моды в игру) — до 4.0.2. Вероломно. Без объявления войны. Сломали мои моды.

На самом деле, в самой игре серьезных изменений для модов не было, весь сок в обновлении BSIPA. Прошлая версия была 3.13.7, а новая — 4.0.2. Изменение первой цифры с 3 на 4 означает, что изменения были критическими, поэтому не удивительно, что старые моды внезапно отвалились.

Если вы не знаете, что такое BSIPA, то про это можно прочитать в моем лонге. Там много сложных и интересных букв, которые, правда, не обязательны для понимания этого текста. Если коротко, то BSIPA взламывает Beat Saber и добавляет туда поддержку пользовательских модов.

Семантическое Версионирование

Семантическое Версионирование (Semantic Versioning или же просто SemVer) — это стандарт для нумерации версий программ. И игр, они же тоже программы. По этому стандарту в номере версии должно быть три цифры: мажорная, минорная и патч — например, 3.13.7.

  • Мажорная версия (major) — серьезные изменения. Например, переписали формат уровней, и теперь все новые уровни не будут загружаться в старой версии. Про такие изменения говорят, что они «без обратной совместимости».
  • Минорная версия (minor) — обычные такие, рядовые изменения. Новое меню добавили, новый пак уровней, новые анимации, новый контент. Это изменения «с обратной совместимостью».
  • Патч-версия (patch) — просто исправление багов или небольшие внутренние изменения. В самой игре ничего не меняется, большинство игроков даже не заметят, что игра обновилась.

Получается, обновление BSIPA с 3.x.x до 4.x.x — это мажорное обновление. СемВер удобен тем, что достаточно посмотреть на номер версии, чтобы понять, что твои моды для BSIPA 3 обречены.

И оказалось, что да, так и есть. В BSIPA 3 чтобы сделать мод, нужно было написать класс с интерфейсом IBeatSaberPlugin, а в BSIPA 4 они вообще удалили IBeatSaberPlugin. Теперь вместо интерфейса там используются атрибуты класса ([Plugin]) и методов ([OnStart] и [OnExit]).

88
Начать дискуссию