Такая незадача: у игрока в армии до 50-ти человек, он со своими 9-ю союзниками (так же игроками с 50 юнитами у каждого) нападает на замок, который защищают 10 вражеских игроков (опять же у каждого по 50 юнитов). итого на одном клочке мира сражаются около 1000 юнитов. Многие юниты могут не только дратся но и кастовать магию на автопилоте и др.
Вопрос в следующем: реально ли эту битву передать по модему со скорость 56кбс без лагов?
Здравствуйте, CaDIsT, Вы писали:
CDI>Такая незадача: у игрока в армии до 50-ти человек, он со своими 9-ю союзниками (так же игроками с 50 юнитами у каждого) нападает на замок, который защищают 10 вражеских игроков (опять же у каждого по 50 юнитов). итого на одном клочке мира сражаются около 1000 юнитов. Многие юниты могут не только дратся но и кастовать магию на автопилоте и др. CDI>Вопрос в следующем: реально ли эту битву передать по модему со скорость 56кбс без лагов?
Здравствуйте, CaDIsT, Вы писали:
CDI>Такая незадача: у игрока в армии до 50-ти человек, он со своими 9-ю союзниками (так же игроками с 50 юнитами у каждого) нападает на замок, который защищают 10 вражеских игроков (опять же у каждого по 50 юнитов). итого на одном клочке мира сражаются около 1000 юнитов. Многие юниты могут не только дратся но и кастовать магию на автопилоте и др. CDI>Вопрос в следующем: реально ли эту битву передать по модему со скорость 56кбс без лагов?
а как насчёт передавать по модему только команды игрока на сервер — их ведь меньше чем изменений состояния юнитов заведомо на порядок. а сервер сам будет двигать юнитов. трафик в разы упадёт ?
Здравствуйте, CaDIsT, Вы писали:
CDI>Вопрос в следующем: реально ли эту битву передать по модему со скорость 56кбс без лагов?
Ну давай прикинем... 56К это будет что-то вроде 6 кБ/сек в среднем (при моих 4 кБ/сек на 33.6). Если у тебя РТС, то весь вопрос, сколько у тебя игровых тиков секунду.
Пусть за основу возьмём пропускную способность 4 кБ/сек, т.е. грубо говоря 4000 байт. В этот пакет мы должны поместить всю инфу о ходе битвы. В начале битвы пакет данных может быть и поболе, игрок может подождать несколько секунд синхронизации и не застрелится. Тут передаётся полный пакет: положение юнитов, их характеристики, инфа о местности и т.п.
Ну а теперь передаются только изменения в мире: кто куда переместился, какую магию на кого вызвал и т.п. Вполне может хватить, особенно если оптимизировать данные: координаты упаковать в байт (0..255 или -128..127) вместо двойного слова, то же и с магией, использовать индексы юнитов в "глобальном массиве" вместо полной их передачи со всеми характеристиками.
Возможно, стоит предусмотреть и полную синхронизацию игрового мира со всей инфой, раз в минуту или чаще/реже...
CDI>Вопрос в следующем: реально ли эту битву передать по модему со скорость 56кбс без лагов?
Думаю вполне реально, однако, попотеть придётся.
Для начала поделим все пакеты на update и control.
Посылать update-данные будем каждые 40млсек.
В них мы указываем какому юниту какой приказ дан.
Понадобиться максимум 1 байт и 3 float'а (координаты цели например).
Если приказ с предыдущего раза не изменился, ничего посылать не надо.
Получив такой пакет мы будем просто отдавать этот приказ своей копии
юнита (т.о. игра идёт в реальном времени на каждом клиенте).
Пиковая нагрузка (почти невозможна):
Исходящий поток: 50*sizeof(updatepack_t) = 50*(1+3*4) = 650 байт
Входящий поток: 18*50*sizeof(updatepack_t) = 11700 байт
Компрессия в модеме срежет эти цифры раза в 4 минимум.
Однако тут есть проблема, а именно рассинхронизация миров на разных
клиентах. Для её решения делаем ещё control-пакеты.
Эти пакеты будем отсылать каждую секунду, данные в пакете характеризуют
полное состояние юнита (координаты, скорость, текущие действия и приказы...)
Трафик можешь сам посчитать исходя из особенностей геймплея.
PS: некоторые замечания по геймплею. К сведению, число атакующих должно
быть в 5-7 раз больше числа осаждённых, иначе осада не имеет смысла.
Всем спасибо. Понятно, что это реально, и что придется попотеть. основные идеи так же уловил.
ЗЫ: to AshenAngel по науке на одного солдата в окопе требуется по умолчанию 3 солдата атакующего. Соответственно для осады замка действительно требуется 5-7 к одному.