Если будете кодить свою RTS не допускайте моей ошибки - начинайте с сетевого стека.
Дело в том что именно в этом жанре происходит слишком много действий одновременно чтобы синхронизировать игры про UDP.
И чтобы не слать инфомрацию о том как 400 юнитов двигаются по карте между игроками пересылаются только логи команд игроков.
Например:
- Игрок А отправил 20 лучников в точку X
- Игрок Б построил здание F в точке Z
И все, трафик очень маленький, НО работать это будет только если на каждом пк каждого игрока все просходит совершенно до мельчайих деталей одинаково.
100% детерменированность, любые мальчайшие расхождения сразу же создают хаус и вызывают рассинхронизацию.
И это накладывает уйму ограничений. Все должно работать на общем таймере. Любые случайности должны быть жестко зафиксированны сидом. Даже математика (дроби) должны быть детерменированы, что отдельная боль если у вас планируется кросс платфомрменная игра. Обмен пакетми уже больше напоминает TCP чем UPD так как пропускать ничего нельзя и воспроизводить можно только в строго определнном порядке.
Даже генериуемые айдишки у всех обьектов должны быть одинаковые (в том числе потому что частенько при решении спорных моментов - в RTS часто победитель выбирается по принципу - у кого короче айди (например кто кому должен уступить) - опять же, для детерменированности)
Зато теперь я в полной мере стал понимать почему нельзя просто взять и починить валхак в старкрафте. Нельзя просто взять и перестать присылать информацию о том что игрок не видит - копии игры должны работать как одна, иначе не возможно будет восстановить состояние когда туман войны рассеился
Post #622
632
- 👍 8
- ❤ 2