Несколько лет назад появился прототип игры War Robots (тогда она еще называлась Walking War Robots). Это был первый опыт Pixonic в жанре тактического PvP, поэтому многие будущие проблемы были заложены в коде изначально. Но несмотря на ряд трудностей (популярность проекта стремительно росла, небольшая команда не могла полностью изменить архитектуру игры в краткие сроки), нам в итоге удалось свести к минимуму количество читеров, а также исправить другие недостатки оригинального кода. Расскажу немного подробнее.Читать полностью »
Рубрика «Gamedev» - 27
Как расправиться с читерами и не переписать весь код
2017-11-28 в 9:40, admin, рубрики: android, cheats, Gamedev, iOS, mobile development, multiplayer, online, Блог компании Pixonic, мобильные игры, мультиплеер, разработка игр, разработка мобильных приложений, Разработка под android, разработка под iOS, читерство, читеры, шутерПроектирование системы для считывания данных с устройств ввода (Часть первая)
2017-11-27 в 8:01, admin, рубрики: controls, game engine, Gamedev, input, разработка игрКогда работаешь над игровым движком, хочется сразу спроектировать его правильно — так, чтобы позднее не тратить время на мучительный рефакторинг. Когда я разрабатывал свой движок, в поисках вдохновения я просматривал исходники других игровых движков и пришел к определенной реализации (ознакомиться с ней можно по ссылке в конце статьи). В статье я бы хотел предложить решение задачи по проектированию системы, считывающей данные с устройств ввода.
Казалось бы, что тут сложного: считал данные с мышки, клавиатуры, джойстика и вызвал их в нужном месте. Так оно и есть, и чаще всего подобие такого кода можно встретить в игровых движках:
//обновления данных, полученных с устройств ввода
cotrols->Update()
...
void Player::Move()
{
if (controls->MouseButonPressed(0))
{
...
}
if (controls->KeyPressed(KEY_SPACE))
{
...
}
if (controls->JoystickButtonPressed(0))
{
...
}
}
Что меня не устраивает в таком подходе? Во-первых, если мы хотим считать данные с конкретного устройства, например джойстика, то мы используем методы, которые получают данные от определенного устройства. Во-вторых, в коде получаем хардкод, т.е. прямо в игровом коде идет опрос конкретной клавиши и у конкретного устройства. Это не хорошо, потому что позднее, чтобы сделать переопределение клавиш через игровое меню, надо будет все подобное вычищать и делать некую подсистему ремапинга, с возможностью переопределять биндинг клавиш на лету. Таким образом, с самой простой реализацией не все так хорошо.
Что можно предложить для решения проблемы?
Читать полностью »
Драконье Стекло или рассказ о игровом редакторе Larian Studios
2017-11-20 в 15:05, admin, рубрики: .net, C#, c++, Gamedev, larian studios, wpf, Блог компании Larian Studios, никто не читает теги, разработка игр Привет! Это снова Larian Studios. Уф, у нас прошёл релиз, и теперь наконец-то появилось время продолжить делиться с вами нашим опытом и наработками.
Сегодня я расскажу о самом главном инструменте, с помощью которого родилось уже 4 проекта — о кофемашине внутреннем редакторе игры. Редактор доступен в ограниченном (для моддеров и игроков) виде в Steam/GoG, поэтому каждый, кто приобрел игру, может скачать его и попробовать бесплатно.
В статье я проведу обзор основной функциональности, коснусь некоторых архитектурных решений и расскажу немного о процессе его разработки и поддержки. Если понравится — в следующих статьях расскажу подробно о каждом элементе редактора в отдельности.
Ну и еще расскажу, чем занимаются Tools Programmer в нашей студии.
Читать полностью »
UniRx — Rx для Unity3d
2017-11-18 в 12:30, admin, рубрики: .net, C#, Gamedev, rx, unity3d, Проектирование и рефакторинг, разработка игрВсем привет! Давно уже хотел написать статью о UniRx на Unity3d. Начнем с небольшой философии RX программирования. Например, разрабатывая игру, мы создаем кнопку, наблюдаем событие клика этой кнопки и реагируем на это каким нибудь кодом.
Реактивное программирование — это всё то же самое, только на стероидах, то есть мы можем создавать потоки данных всего. И также наблюдать за ними и реагировать. Update, OnCollisionEnter, Coroutine, Event, Mouse input, Keyboard input, Joystick input — все это потоки.
Все что нас окружает это потоки.

Russian AI Cup 2017 — отчет о бета-тесте, старт чемпионата. Хотели StarCraft, получили странный Total War
2017-11-15 в 11:48, admin, рубрики: AI, algorithms, Gamedev, RTS, russian ai cup, russian ai cup 2017, Блог компании Mail.Ru Group, Занимательные задачки, Программирование, разработка игр, Спортивное программированиеСедьмого ноября официально стартовала неделя бета-теста Russian Ai Cup 2017. Чемпионат ежегодный, и в этом году мы решили предложить участникам проект под названием CodeWars — конкурс по программированию ботов для игры, которую сами участники сходу окрестили «симулятором игрока в RTS». Бета-тест подошел к концу, чемпионат официально стартовал, и под катом мы хотели бы отчитаться, поделиться новостями о том, что же мы теперь можем предложить. Ну и еще раз зазвать всех поучаствовать, не без этого конечно.
Простой плагин для локализации приложений на Unity3D
2017-11-06 в 22:11, admin, рубрики: C#, game, Gamedev, language, plugin, unity, unity3d, локализация, разработка игрЯ думаю, каждый разработчик на Unity3D рано или поздно сталкивается с необходимостью локализации приложения на несколько языков. В любом случае, лучше заранее заложить это в архитектуру, даже если на старте приложения несколько языков и не требуется.
В данной статье я опишу разработку простого плагина для локализации UI Text-компонентов с возможностью динамической смены языка и редактирования текста в редакторе.
Читать полностью »
О чём молчит пост-мортем: неизвестная история создания Gothic 3
2017-11-03 в 4:30, admin, рубрики: Gamedev, разработка игр
У всех нас есть свои слабости, которым мы можем изредка предаваться — так называемые “guilty pleasures”. Я вот, к примеру, люблю время от времени перелистывать старые игровые журналы; среди прочего, в них попадаются интересные интервью и дневники разработчиков, неторопливо закрывающие белые пятна моего незнания (которое, как и положено, границ не имеет). С пост-мортемами разговор отдельный — они повествуют о вечном, и потому абсолютно не теряют своего очарования.
Взять хотя бы пост-мортем Portal, опубликованный в январском выпуске журнала Game Developer за 2008 год. Благодаря ему, многие читатели впервые узнали про излюбленную методику создания игр в стенах компании Valve (да, было время, когда Valve еще делала игры): постоянными итерациями прототипов игровых механик и регулярными плей-тестами с участием новых игроков. Сегодня эта идея всем нам кажется очевидной — справедливости ради, она была известна и тогда, но не столь широко распространена — несмотря на то, что она уже успела поспособствовать появлению игр высочайшего геймплейного качества — одна Half-Life 2 чего стоит.
Другой пост-мортем, и всего одна маленькая (и невероятная) деталь: концепты дизайна основных боссов в Diablo III за время разработки переделывались по 50-60 раз. Теперь я каждый раз напоминаю себе об этом факте, когда начинают опускаться руки!
Конечно же, на многие известные игры пост-мортемов не существует. Сегодня вашему вниманию предлагается история о том, про что в пост-мортеме никто в здравом уме не расскажет.
Читать полностью »
Проектирование системы для считывания данных с устройств ввода
2017-11-01 в 12:51, admin, рубрики: controls, game engine, Gamedev, input, разработка игрКогда работаешь над игровым движком, хочется сразу спроектировать его правильно — так, чтобы позднее не тратить время на мучительный рефакторинг. Когда я разрабатывал свой движок, в поисках вдохновения я просматривал исходники других игровых движков и пришел к определенной реализации (ознакомиться с ней можно по ссылке в конце статьи). В статье я бы хотел предложить решение задачи по проектированию системы, считывающей данные с устройств ввода.
Казалось бы, что тут сложного: считал данные с мышки, клавиатуры, джойстика и вызвал их в нужном месте. Так оно и есть, и чаще всего подобие такого кода можно встретить в игровых движках:
//обновления данных, полученных с устройств ввода
cotrols->Update()
...
void Player::Move()
{
if (controls->MouseButonPressed(0))
{
...
}
if (controls->KeyPressed(KEY_SPACE))
{
...
}
if (controls->JoystickButtonPressed(0))
{
...
}
}
Что меня не устраивает в таком подходе? Во-первых, если мы хотим считать данные с конкретного устройства, например джойстика, то мы используем методы, которые получают данные от определенного устройства. Во-вторых, в коде получаем хардкод, т.е. прямо в игровом коде идет опрос конкретной клавиши и у конкретного устройства. Это не хорошо, потому что позднее, чтобы сделать переопределение клавиш через игровое меню, надо будет все подобное вычищать и делать некую подсистему ремапинга, с возможностью переопределять биндинг клавиш на лету. Таким образом, с самой простой реализацией не все так хорошо.
Что можно предложить для решения проблемы?
Читать полностью »
Разработка 2D песочницы на JavaScript с нуля
2017-10-28 в 18:08, admin, рубрики: Gamedev, html, javascript, skanersoft, причем тут linux?, Программирование, разработка игрКак-то для своих некоторых планов мне потребовалось сделать небольшую песочницу в 2D пространстве с базовыми возможностями:
1. Передвижение по игровому миру
2. Физика при движении, столкновения
3. Создание блоков
4. Удаление блоков
Графическое исполнение меня не беспокоило, поэтому я решил оформить все в серых тонах, выглядит это так:
Читать полностью »
Разработка браузерной онлайн игры без фреймворков и движков
2017-10-25 в 13:21, admin, рубрики: deathmatch, Gamedev, javascript, node.js, OpenGL, WebGL, Алгоритмы, программирование графики, разработка игр
Привет!
В этом посте будет описан процесс разработки онлайн игры на чистом javascript и WebGL (без фреймворков и движков). Будут рассмотрены некоторые алгоритмы, техники рендеринга, искусственный интеллект ботов и сетевая игра. Проект является полностью опенсорсным, в конце поста будет ссылка на репозиторий.
Читать полностью »