Спасибо за поздравления, поздравляем и тебя с пойманной ачивкой!
Громкость поправили, косяк встречается в 17 местах во всей игре. Если коротко, то Алхимики криво сконвертировали кривой скрипт Рюю, и этот косяк из PS3 версии перекочевал в нашу
.
Если длинно… то проблема в японских "погромистах" в целам.
Перво-наперво Рюю пытался выучить школьную математику. Когда он писал функцию cross1, которая по задумке плавно повышает или понижает громкость эффектов до указанной и вдобавок выключает фоновую музыку, он сделал так:
Code: Select all
повторить 10 раз {
текущая_громкость = текущая_громкость - (текущая_громкость/10)
…
установить_громкость в текущая_громкость
}
установить_громкость в 0
Если учесть, что диапазон громкости в игре от 0 до 100, то после 10 повторений в случае изначальной громкости было бы... 90, 81, 73, 66, 60, 54, 49, 45, 41,
37 (Так как в ПК движке целочисленное деление, то округление всегда в меньшую сторону). Очевидно, что Рюю хотел использовать при делении громкость до начала эффекта, но хотел — не значит сделал
Затем пришли Алхимики. Они заметили косяк, поржали и исправили. Только в окончательном скрипте появилась строчка:
Code: Select all
BGM_VOLUME: to 17 over 180 frames (3.000000 secs)
В итоге что в PS3, что у нас громкость уменьшается до 17 из 255 вместо 0. WTF?! Как?!! Продолжаем квест.
Алхимики во многом серьёзно исправили баланс громкости в игре, особенно с учётом добавленной озвучки. Большинство треков, играющих с максимальной громкостью в ПК версии, получили громкость 180 из 255. Более того, процент от этой изначальной громкости может выставить пользователь в настройках (как у нас). Это действительно прекрасно, но из-за такого преобразования… они местами были вынуждены производить магические округления в ту или иную сторону.
В чём прикол? Ну… по всей видимости они немного накосячили с циклами. В коде Рюю было написано "повторить 10 раз", что в коде:
По всей видимости, японец, который писал конвертер, неправильно понял 1 to 10 и вместо [1, 10] написал [1, 10), исключая 9-е повторение
180/10 = 18
180 - (9*18) = 18
Но это не 17!!! Вспоминаем про округления, которые они добавляли для преобразования шкал. Так как PS3 движок работает с дробями, а оригинал на ПК работает с целыми числами, почти наверняка они в конце дописали дополнительный -1, чтобы убедиться, что при получении числа 0 < x < 1 оно бы никак не стало 1.
Ну вот что с такими делать