Pull to refresh

Comments 24

Что мешает использовать Lockstep в клиент-серверной модели взаимодействия? Все клиенты выполняют детерминированную игровую модель и передают команды через сервер.
Насколько я вас понял, это или а) не Lockstep в том представлении, в котором понимает/использует его автор, или б) создаёт простор для читерства — если у вас есть детерминированная модель, на стороне клиента можно её абьюзить.
Это и есть тот Lockstep, который описан в статье. Какая разница, как обмениваться данными: каждый между собой, или через сервер? Это убирает только один недостаток, который не является самым критическим.
Разница в том что часть аргументов (знаю ip, могу задосить) отваливается.
Да, вы правы. Но все же недостатки остаются.

Разница в том, что именно такой вариант Lockstep использует StarCraft 2, а вы его почему-то отнесли к клиент-серверным.

Хост-боты для Warcraft 3 так и работают :-)

В Factorio используют Lockstep, но там наверно без него и не получится, слишком большой масштаб всего.

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

Да, сервер выделенный есть, но lockstep всё же более важный аспект, чем p2p (который был в упомянутых в статье играх, скорее, как дань времени, когда выделенные серверы были дороги и сложны в установке). Десинки в Factorio нередки на экспериментальных версиях, а ещё они почему-то случаются с некоторыми модами. Казалось бы, моды работают на куда более высоком уровне абстракции, чем движок, но вот такая ситуация.


А проблемы там не только при большом числе игроков, но и в самом масштабе симуляции: по конвеерам ездят тысячи объектов, передавать все их данные даже на 10 UPS — это прорва трафика, и оптимизации с группировкой объектов в батчи вряд ли сильно улучшат ситуацию. Так что даже если использовать клиент-серверную модель для игроков, байтеров и поездов, фабрику всё равно надо симулировать локально. А раз 90% игры использует lockstep, чего уж переусложнять остальное.

Казалось бы, моды работают на куда более высоком уровне абстракции, чем движок, но вот такая ситуация.

Моды в Factorio могут менять состояния любых игровых объектов. Если это сделать на разных хостах не синхронно — то и получится десинхрон. В этом плане Factorio куда меньше продумана чем, к примеру, Warcraft 3, где десинхрон "официально" могла вызывать лишь одна функция (GetLocalPlayer кажется).

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

Тем не менее, моды имеют доступ именно к "сырому" состоянию, и писать код так, чтобы он работал одинаково на разных компьютерах — задача именно автора мода.

Lockstep и P2P это не связанные понятия.
В статье говорится про lockstep но рассказываются минусы как lockstep так и P2P.
В «примерах» про Starcraft написано что Starcraft 2 не использует lockstep, но в пруф статье написано что Starcraft 2 не использует P2P и ничего не написано про Lockstep.
Игра «Heroes of the storm» основана на движке SC2 и использует Lockstep.
Ну почему не связанные? В Lockstep'е заложены принципы P2P — все игроки равноправны и все обмениваются данными, хотя сам P2P может вовсе не использоваться технически, а использовать сервер, который будет ретранслировать трафик между клиентами.
Lockstep означает «У всех игроков есть полное игровое состояние и оно изменяется у всех одинаковым образом». Немного похоже на блокчейн.

Оно не означает что все игроки равноправны (Главное чтобы все знали кто из игроков «равнее»), не означает что нет центрального сервера (Эталонная симуляция, все кто с ней несогласны дисконнектятся)

У lockstep есть проблема принципиальной невозможности скрытия информации.
И есть плюс в виде что количество передаваемых по сети данных — это О(количество игроков), тогда как у несинхронных систем — О(количество объектов).

Если в игре количество игроков и объектов сравнимо (например шутеры) — в нем нет смысла. А если несравнимо — есть.

Еще lockstep позволяет бесплатно получить реплеи.
Starcraft 2 и warcraft 3 точно используют lockstep но без P2P.
Эталонная симуляция, все кто с ней несогласны дисконнектятся

Ну тут не очень хорошо так делать… а вдруг какая-то неплановая рассинхронизация(баг в коде): тут бац, тебя выкинуло.

А вообще, как по мне, сейчас очень хорошое подобие Lockstep'а в игре Clash Royale(только вот сервера официальные): по сети гонятся только где ставится какой юнит, а также чексуммы от сервера до клиента. Если клиент видит, что чексумма не совпадает — просит полный статус карты от сервера(что случается крайне редко).
Если в игре количество игроков и объектов сравнимо (например шутеры) — в нем нет смысла. А если несравнимо — есть.

Далеко не во всех шутерах количество объектов равно количеству игроков(особенно если много снарядов)
Оффтоп: люди, посоветуйте плиз хорошие RTS под windows, которые пойдут на слабом железе (Core i5, интегрированная карта Intel Graphics HD 5500)
Понравилась деталь: написание «DotA» и «Dota 2».
Я бы даже лойс поставил за такую педантичность и внимательность, но, насколько я понял, я смогу поставить только когда сам наберу определенное количество в копилку.
Только сейчас заметил, что в оригинале используется «Dota 1», а я перевел как «DotA». Я сам не поклонник Warcraft и DotA/Dota2(в них вообще не играл), но недавно интересовался, что это за игра и почему она такая популярная.

Нет, Вы верно написали.
Первая дота была просто (модифицированной) картой в WarCraft III. Расшифровывается как "Defense of the Ancient", поэтому верное написание аббревиатуры — "DotA".
Во второй доте, уже отдельной игре, об этом успешно забыли, и в Steam пишется "Dota 2".
Так что, Ваш перевод получился в этом месте лучше оригинала :) спасибо

Спасибо. Valve не просто забыли про название, а они практически «создали» слово Dota.
Sign up to leave a comment.

Articles