Pull to refresh

Comments 11

Очень интересно читать про механику старых игр и видеть объяснение и принцип работы особенностей которые подмечал когда сам в них играл несколько лет назад.
С похожими проблемами сталкивались разработчики Factorio — тоже решили всё полной детерминизацией мира, в результате чего выловили кучу ошибок в виде немного разных результатов float на 32/64бит и разных платформах. Как раз таки ссылались на эту статью в блоге, но в оригинале руки не до шли прочитать.

В общем, спасибо за перевод, добавил в закладки)
Читал что в старкрафте или варкрафте вся математика была реализована в коде не используя сопроцессор как раз из за разного округления на разных процессорах.

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


Может быть, чтобы просто работало как с сопроцессором, так и без?

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

А на практике расползаются вычисления. Особенно если это мобильные устройства, на разном железе. Накапливаются ошибки округления, и через время юнити на разных устройствах начинают уползать в разные края карты. Сею предположить — особенности реализации компиляторов на разных платформах.
UFO just landed and posted this here
UFO just landed and posted this here

В Казаках тоже так было сделано. В старых точно, насчёт новой третьей части — не знаю.

Помнится в StarCraft-е быстрая перемотка записи меняла исход игры при игре с ботами.
Sign up to leave a comment.

Articles