я бы посоветовала «Аэроград» (это в Коломенском районе)
Согласен, стоит побывать: одна из самых больших дропзон в Европе. Конечно же там, где много народа, и аварий больше случается… Когда я там словил свой первый отказ (сам укладывал), то для дропзоны это был шестой за день. Всё прошло хорошо, даже POD в поле нашёл. У двух вингов, разбившихся в ту неделю, дела обстояли намного хуже :(
Вчера вышло обновление 2.1.5, есть изменения в балансе. По всей видимости, у юнитов категории X после улучшений интервал становится меньше времени анимации. Это приводит к тому, что стрелки подвисают после первого выстрела и перестают стрелять: видео.
Ага. Мне понравилось, что в Age of Empires II интерфейс заявляет у японцев +25% к скорости атаки пехоты, а на деле их самураи рубят на 33% чаще. Должно было быть t/1.25, а сделали t*0.75.
В данном случае следует учитывать, что скрипты игры до сих пор активно дорабатываются (что не может не радовать). Например, в версии 2.0.8 файл unit.script имел размер в 131 KB, а в анализированной здесь версии 2.1.4 — 546 KB.
Насколько я понял, тики всё же атавизм, движок третьих Казаков работает с секундами. Скорее всего, раньше параметр интервала хранился в тиках и пересчитывался в секунды непосредственно перед применением в _unit_ApplyAttackPause(). Потом в каком-то обновлении, скорее всего, изменили логику и стали хранить интервалы сразу в секундах, но вот код применения апгрейда оставили тем же.
…кроме того случая, когда между вами и оф.сервером находится корпоративный NAT с брандмауэром. И да, я не слышал, чтобы игроки SC2 были рады такой «фишке».
Интересно, мне казалось, что движок специально для третьих Казаков и писали.
Сборщик мусора — уже приговор для сильно нагруженных игр-
Вовсе необязательно. Скриптовый API ведь нужен в первую очередь для описания «правил» игры, а не для хранения данных, или? К тому же, тот же Lua, например, позволяет откалибровать свой сборщик через lua_gc().
На человечка потратил несколько дней — моделировал в блендере
попадает под «выдирание арта». К тому же, Warcraft 2000, если я не ошибаюсь, никогда не являлся коммерческим проектом.
…вы мне, кстати, напомнили историю про то, как ребята из GSC когда-то предложили представителям Blizzard помочь последним с разработкой Warcraft 3, а то движок у Warcraft 2 тянул уж слишком мало юнитов на карте. И в качестве PoC показали им упомянутый Warcraft 2000. В итоге ребята из Blizzard обиделись и не стали дружить с GSC ^_^
А вы знаете, по каким причинам было решено писать свой интерпретатор для скриптов и делать движок на Delphi, а не использовать довольно распространённую в геймдеве связку из C++ и Lua? С производительностью у последнего, вроде бы, всё в порядке.
Располагает ли ИИ в любой момент всей информацией о текущей игре или же играет «по честному», видя только в пределах тумана войны?
Принимает ли ИИ решения лишь на основе доступной игрокам информации (т.е. практически «визуально» — по расположению юнитов), или же он моментально в курсе того, что игрок, например, отдал своим юнитам приказ атаковать конкретное здание?
Выше вы писали, что для Казаков 3 вам понадобился C++. Разве там движок не на Delphi написан? Каким образом происходит взаимодействие с вашим ИИ?
Во-вторых — исполняемый файл вам ничего не даст. Я немного изменил систему загрузки ресурсов, т.к. с существующеми архивами могут возникнуть проблемы (см. пункт «тонкости языка»).
В конце статьи есть несколько ссылок с дополнительной информацией, которые, возможно, вам помогут.
Вылет при большом количестве юнитов на экране я пофиксил. На счёт тормозов точно сказать не могу, мне не довелось протестировать сетевую игру с 8.000+ юнитами. При ~5.000 юнитах тормозов не заметил.
Возможны артефакты при большом количестве трупов на экране — временно пропадают деревья, анимации выстрелов и огня. Раньше это так же приводило к вылету, теперь нет ;)
И да, я не совсем понял, где собственно у вас был реверс-инжиниринг? У вас же были исходные коды.
Реверс был в первых трёх статьях, до обнародования исходников. Назвал так, потому что эта статья логичное завершение начатого проекта. Ну и код местами довольно необычный, так что реверс тут был хотя бы мысленный ;)
с «Heroes of the Storm» я не знаком, но судя по вашему описанию всё обстоит именно так.
Альтернативным методом была бы передача полного состояния игры (расположение и даные всех юнитов, экономика и пр.) в момент реконнекта. Это заняло бы слишком много времени, другим игрокам пришлось бы ждать. К тому же в играх один на один вы бы полностью доверились другому клиенту при реконнекте, а так игра восстанавливается по записи с вашего клиента, затем догоняет пропущенные события (если я правильно понял).
Согласен, стоит побывать: одна из самых больших дропзон в Европе. Конечно же там, где много народа, и аварий больше случается… Когда я там словил свой первый отказ (сам укладывал), то для дропзоны это был шестой за день. Всё прошло хорошо, даже POD в поле нашёл. У двух вингов, разбившихся в ту неделю, дела обстояли намного хуже :(
В данном случае следует учитывать, что скрипты игры до сих пор активно дорабатываются (что не может не радовать). Например, в версии 2.0.8 файл unit.script имел размер в 131 KB, а в анализированной здесь версии 2.1.4 — 546 KB.
Насколько я понял, тики всё же атавизм, движок третьих Казаков работает с секундами. Скорее всего, раньше параметр интервала хранился в тиках и пересчитывался в секунды непосредственно перед применением в _unit_ApplyAttackPause(). Потом в каком-то обновлении, скорее всего, изменили логику и стали хранить интервалы сразу в секундах, но вот код применения апгрейда оставили тем же.
Вовсе необязательно. Скриптовый API ведь нужен в первую очередь для описания «правил» игры, а не для хранения данных, или? К тому же, тот же Lua, например, позволяет откалибровать свой сборщик через lua_gc().
…вы мне, кстати, напомнили историю про то, как ребята из GSC когда-то предложили представителям Blizzard помочь последним с разработкой Warcraft 3, а то движок у Warcraft 2 тянул уж слишком мало юнитов на карте. И в качестве PoC показали им упомянутый Warcraft 2000. В итоге ребята из Blizzard обиделись и не стали дружить с GSC ^_^
А вы знаете, по каким причинам было решено писать свой интерпретатор для скриптов и делать движок на Delphi, а не использовать довольно распространённую в геймдеве связку из C++ и Lua? С производительностью у последнего, вроде бы, всё в порядке.
Во-вторых — исполняемый файл вам ничего не даст. Я немного изменил систему загрузки ресурсов, т.к. с существующеми архивами могут возникнуть проблемы (см. пункт «тонкости языка»).
В конце статьи есть несколько ссылок с дополнительной информацией, которые, возможно, вам помогут.
На счёт проекта — извините, но я пас. Я с Казаками в последнее время уже натерпелся ;)
Но тема интересная, желаю удачи, если всё же возьмётесь.
Возможны артефакты при большом количестве трупов на экране — временно пропадают деревья, анимации выстрелов и огня. Раньше это так же приводило к вылету, теперь нет ;)
Реверс был в первых трёх статьях, до обнародования исходников. Назвал так, потому что эта статья логичное завершение начатого проекта. Ну и код местами довольно необычный, так что реверс тут был хотя бы мысленный ;)
с «Heroes of the Storm» я не знаком, но судя по вашему описанию всё обстоит именно так.
Альтернативным методом была бы передача полного состояния игры (расположение и даные всех юнитов, экономика и пр.) в момент реконнекта. Это заняло бы слишком много времени, другим игрокам пришлось бы ждать. К тому же в играх один на один вы бы полностью доверились другому клиенту при реконнекте, а так игра восстанавливается по записи с вашего клиента, затем догоняет пропущенные события (если я правильно понял).