Название: Battle City.Net Жанр: mmo/ RPG -action На каком движке:Windmill 2D Game Engine В каком пространстве: 2D Какой вид в игре: сверху Какие есть похожие игры: Battle City, Танчики, Battle City World Какой Язык Пр. используется в игре: основной C#, возможно C++ для сервера. Предоставление исходного кода игры: Open Source Какой тип лицензии распространения: GNU GPL Сроки разработки: идея появилась примерно 10.06.2012, к написанию кода приступил 7.07.2012.
Данная игра является ремейком известной Battle City, вышедшей для приставки Dendy еще в 1980 году. Основное отличие от оригинала, возможность игры против живых противников по сети. Помимо этого в игре будет больше разнообразных бонусов и типов врагов. Надеюсь получится более интересный геймплей, поскольку появятся РПГ элементы, танк можно будет модифицировать не столько за звезды, сколько приобретая различные улучшения. Звезды же будут давать возможность приобрести танк следующего поколения, но заработать звезду будет не просто. Было бы неплохо подвести под это дело какой-нибудь сюжет, но пока мыслей нет. Графике в игре пока будет из дендевской игры.
Сейчас занимаюсь базовым функционалом. На текущий момент сделано немного: Перемещение танка. Коллизии. Стрельба. Загрузка уровня, но она сделана только что, и танк с ним не взаимодействует. Редактора пока тоже нет, уровень генерится рандомом, естественно, что получается бяка. Отчитываться о прогрессе и показывать новые демо я буду в процессе работы, ну а код буду выкладывать реже, примерно раз в неделю.
Почему С#? Я люблю с++, но… на С# проще программировать, да и быстрее. Чего только стоит автоматическая работа с памятью. К тому же этот язык имеет больший функционал, не только в смысле наличия готовых функций для реализации различных вещей, например работы с файлами, xml, криптографией и сжатием данных, но и поддержкой непосредственно языком таких вещей, как динамическая типизация, рефлексия. Да и полностью русская справка с гигами примеров занимает не последнее место.
Почему проект опенсорс? Ну, во первых, с меня не убудет, мне не жалко. Также я надеюсь, что кто-то сможет дать полезный совет по коду. Кроме того, на этом форуме было три или четыре подобных проекта, но до релиза они не дожили, а имея исходники проект может легко найти помощников и последователей, которые продолжат улучшать игру. Немного напрягает возможность нечестной игры путем модификации клиента, но до этого еще далеко и я что-нибудь придумаю, или же закрою часть сетевого кода сервера.
Кто нужен в команду: Да, в принципе, пока никто. Но позже понадобится художник, который подправит/добавит графику. И нужен будет человек, который согласится держать у себя сервер, желательно со статическим IP, поскольку разные хамачи меня не вдохновляют.
Обещанные исходники (50 кб). Для работы нужна Visual Studio 2010. В исходниках немножно нехватает комментариев, это я со временем поправлю. С радостью послушаю критику и советы.
9.07.2012 • Перемещение танка. • Коллизии. • Стрельба. • Загрузка уровня, но она сделана только что, и танк с ним не взаимодействует. Редактора пока тоже нет, уровень генерится рандомом, естественно, что получается бяка. 12.07.2012 • Гусеницы у танка при движении анимируются (довольно таки геморным способом, увидите код, поймете. день на это убил) • Танки и снаряды взаимодействуют со стенами, танками, снарядами. • Снаряды взрываются. 14.07.2012 • Чуть подправленные коллизии, теперь их расчет интерполируется, и нет такого бага, как пролетание пули сквозь стены или застревания танков при большой скорости движения или тормозах. • Вражеские танки уничтожаются. Пока без взрыва. • Простенький редактор карты. Игра автоматически грузит карту с именем "1.lvl". 15.07.2012 MapEditor v.0.2: • Добавлен скроллинг мира. Теперь можно создать воистину громадный мир. • Добавлено масштабирование мира. • "Создать", "Открыть", "Сохранить" выведены на панель. • Добавлена сетка. • Добавлена кисть изменяемого размера. 16.07.2012 • Добавлен скроллинг мира в игре. • Уничтожение стен. • Анимация взрыва при уничтожении танка.
18.07.2012 • Некоторая реорганизация кода. Добавлен класс MotionSystem, который заменил собой BulletSystem и теперь включает в себя не только пули но и все движущиеся обьекты. • Добавил примитивных ботов.
20.08.2012 • Подгонка координат танка при повороте. • При генерации боты больше не появляются внутри стен. • Плавное смещение вида.
21.08.2012 • Начал делать систему эффектов. Теперь взрыв танка выводится в правильном месте. • Статический класс для видимой области экрана. • Обработка выхода пули за экран.
22.08.2012 • Доведение до ума вписывания в повороты. • Убрал падение редактора при выходе кисти за пределы карты. • Вылечил баг сетки при создании неквадратной карты.
23.08 • Сделал отдельные списки для статических и динамических боксов. Колизии проверяются только для ближайшей статики. ПРирост производительности примерно в 20 раз.
29.08 • Алгоритм пространственного разделения для просчета коллизий.
31.08 • Множественные оптимизации. Цель в 30 фпс при 5000 ботов пока не достигнута(только 15-20). MapEditor v.0.3: • Оптимизировано отображение карты. • Изменен формат файла карты, теперь он является архивом.
2.09 • Задействовал звуковой движок. Добавил несколько звуков.
6.09 • Переделал интерполяцию движения пуль. Завершил оптимизации. План перевыполнил. 40 фпс при 5000 ботов.
Точка зору окремо взятого індивіда завжди суб'єктивна!
Ну сначала нужно сделать безбажный одиночный режим, чтобы потом не думать что лагает, сеть или другое. Да и сетевого кода я еще не начинал писать. Точка зору окремо взятого індивіда завжди суб'єктивна!
И самое интересное в Battle City - сделает ли кто-нибудь такую же систему ломания кирпичей! А то по другому не интересно. Раз уж занялся игростроем, то умей и имей: 1) знание иностранного языка и понимание того, что делаешь 2) программы для игростроя, а так же для обработки текстур, моделей, звуков 3) много свободного времени
И самое интересное в Battle City - сделает ли кто-нибудь такую же систему ломания кирпичей! А то по другому не интересно.
А моя разве не такая как в оригинале?
По оптимизации. Оказывается оптимизировать просчет коллизий можно многими способами. В основном выбирал из двух. Первый - по времени. Коллизии просчитываются не каждый кадр, а через определенный интервал. Недостаток - коллизии фиксируются не в момент возникновения. могут быть баги. Второй - пространственное разделение. Коллизии просчитываются для ближайших объектов, как это сделано для статики. Мир разделяется на зоны, столкновения считаются в пределах зоны. Видимых недостатков нет, но реализовать не просто.
Добавлено (29.08.2012, 14:45) --------------------------------------------- Что ж, сделал пространственное разделение, но при этом сильно испортил код, одни только перекрестные ссылки между статическими и обычными классами вызывают головную боль. Придется как-то упорядочивать. Зато значительно продвинулся в оптимизации. На текущий момент каждый движущийся обьект проходит следующее количество проверок: Со статикой от 16 до 32. С движущимися арифметика сложнее. Коллизии проверяются не только в пределах текущей зоны но и с соседними, то есть всего 9 зон. Размер зоны у меня равен 5*5 клеткам, поэтому в зоне может быть 6 ботов (бот занимает 4 клетки 4*4 = 24). Ну а всего на 9 зон получается 54 – себя = 53 проверки максимум.
Тоесть в самых жестких условиях для 1000 ботов происходит 85000 проверок: 1000 *32 = 32000 1000 * 53 = 53000.
53000 проверок против 1000000 разница ощутимая. В результате на уровне размером 1000 на 1000 клеток с 1000 ботов, где раньше случался висяк, теперь я имею 30 фпс. При 5000 ботов фпс равен 6-10. Это в дебаге, в релизе 16-18. Есть над чем работать.
Точка зору окремо взятого індивіда завжди суб'єктивна!
53000 проверок против 1000000 разница ощутимая. В результате на уровне размером 1000 на 1000 клеток с 1000 ботов, где раньше случался висяк, теперь я имею 30 фпс. При 5000 ботов фпс равен 6-10. Это в дебаге, в релизе 16-18. Есть над чем работать.
Как-то странно, у себя тестировал проверку коллизий (локальную в сингле): до 90.000 объектов разбитых на 4 коллизийных группы (танки, снаряды, препятствия и триггерные зоны) - хотя нагрузка на ЦП возрастала, фпс сохранялся на том же уровне... Мне кажется у тебя или проблема в алгоритмах просчета или косяки с рендерингом... Или очень слабый комп))) {c0Der}
Как-то странно, у себя тестировал проверку коллизий (локальную в сингле): до 90.000 объектов разбитых на 4 коллизийных группы (танки, снаряды, препятствия и триггерные зоны) - хотя нагрузка на ЦП возрастала, фпс сохранялся на том же уровне... Мне кажется у тебя или проблема в алгоритмах просчета или косяки с рендерингом...
Рендер двига точно не при чем, у меня на компе он держит 20000 видимых обьектов при 30 фпс. Это либо алгоритмы, но они простые до ужаса, либо я хз че... Заставляешь меня нервничать, совершу акт суициду, наложу себе в руки))). Вобщем не верю, что у тебя одновременно 90000 объектов. Сколько движущихся? потому как препятствий у меня на уровне несколько тыщ, и фпс они особо не жрут, я их даже не учитываю. Покажи демку с 1000 танков, какой у ней будет фпс? Я вот допилю группы, чтоб боты друг друга не мочили, и выложу. Точка зору окремо взятого індивіда завжди суб'єктивна!
Покажи демку с 1000 танков, какой у ней будет фпс?
Через денек попробую =) Я тестил - 5 танков, 50 препятствий (неподвижных), около 10 триггерных зон и около 80 тысяч снарядов разных с разной формой физ. тела (прямоугольная с произвольным углом и круглая)...
Quote (zodiak)
Заставляешь меня нервничать, совершу акт суициду, наложу себе в руки))). Вобщем не верю, что у тебя одновременно 90000 объектов.
Markus_13, если тебе 1 минуту на тестирование снаряда. 80 000/ 60 = 1333 часа тебе понадобилось бы. Если бы ты делал тестирование 8 часов в день тебе бы понадобилось 166 дней.
Markus_13, если тебе 1 минуту на тестирование снаряда. 80 000/ 60 = 1333 часа тебе понадобилось бы. Если бы ты делал тестирование 8 часов в день тебе бы понадобилось 166 дней.
Бред какой-то, что за минуты, часы? Ты бы еще человеко-дни приплел *lol*
З.Ы. хотя вообще конечно с 80 тыс-ми я наверное загнул, сейчас поробую накидать стресс-тестер на тему коллизийных просчетов, скажу точно)
Добавлено (31.08.2012, 04:21) --------------------------------------------- zodiak, часов 8 уже этой ерундой занимаюсь)))
В общем итоги такие:
80 тысяч снарядов получилось сделать только при условии что был лишь 1 объект с которым они могли столкнуться))) и то фпс не радовал =)
Более-менее "без повисания" работало: 40К неподвижных (группа1), 15К движущихся (группа2, сталкиваются друг с другом), 25К снарядов (группа3, сталкиваются с группой1 и группой2) и около сотни триггеров (группа4, сталкиваются с группой3). Группа 1 - препятствия (стены), группа 2 - (любые движущиеся объекты с физ. телом), группа 3 - пули/снаряды/ракеты и т.д., группа 4 - у меня были зоны замедления снарядов). В режиме 800*600 кое-как удалось добиться 3 фпс))))
После долгого снижения планки дошел до следующего: 15К неподвижных и 2.5К подвижных, после старта карта постепенно заполняется снарядами (до 80 тысяч объектов в теории)... я не дождался, т.к. тормоза уже на 40К объектов были =)) Собстно вот ссылка: http://markuss13.narod.ru/s0me/CollStest.exe (тыц) Слева вверху пишется фпс и общее кол-во объектов. Управление такое: стрелки - движение камеры (с ускорением), левая кнопка - выстрел (в случайном направлении) если кликать с зажатым шифтом или к-трлом, то направл-ие будет вниз и вверх соотв-но, правая кнопка - создать область замедления снарядов...
Пока все... тестим, делимся впечатлениями)) Спать хочу сильно))) {c0Der}
Сообщение отредактировал Markus_13 - Пятница, 31 Августа 2012, 04:22
Снова я с новой демкой. Внимание! изменен формат файла уровня. Он не совместим с предыдущими. В архиве находится обновленный редактор. Если кто-то делал карты, то старые можно конвертировать с помощью MapConverter_0.3.
Прошу тестировать, и пожалуйста укажите фпс и свой процессор. Фпс нужно смотреть сразу, ато через 30 сек на уровне остается 1000 танков.
Неделя оптимизации не прошла даром, и я таки добился поставленой цели, даже ее немного перевыполнил. На текущий момент фпс с 5000 ботов равен 40. При этом на уровне размером 5000 на 5000 клеток находится 100000 статических объектов и около 500 снарядов. Причем, из-за высокой скорости снаряда и выполнения интерполяции его координат, коллизии для снаряда просчитываются раза в 3-4 медленнее. Также в процессе была попытка распараллеливания задач, В результате скорость повысилась на 70% но появились проблемы синхронизации, так что эта возможность оставлена на потом.
Список изменений: 23.08 • Сделал отдельные списки для статических и динамических боксов. Колизии проверяются только для ближайшей статики. ПРирост производительности примерно в 20 раз. 29.08 • Алгоритм пространственного разделения для просчета коллизий. 31.08 • Множественные оптимизации. Цель в 30 фпс при 5000 ботов пока не достигнута(только 15-20). MapEditor v.0.3: • Оптимизировано отображение карты. • Изменен формат файла карты, теперь он является архивом. 2.09 • Задействовал звуковой движок. Добавил несколько звуков. 6.09 • Переделал интерполяцию движения пуль. Завершил оптимизации. План перевыполнил. 40 фпс при 5000 ботов.
Это была последняя неигровая демка. В следующей уже появится хоть какой-то геймплей.
Markus_13, У тебя неподвижные объекты не сталкиваются с подвижными (танки со стенами). А при лагах подвижные объекты застряют друг в друге. И еще, когда начинаешь движение, фпс резко падает. Точка зору окремо взятого індивіда завжди суб'єктивна!
Markus_13, У тебя неподвижные объекты не сталкиваются с подвижными (танки со стенами). А при лагах подвижные объекты застряют друг в друге. И еще, когда начинаешь движение, фпс резко падает.
Не застревают, там просто алгоритм обработки столкновений косячный - при столкновении вектор движения меняется на обратный. Насчет движения - естес-но, при движении в обработку включается сразу много групп (у меня объекты разбиваются по группам в зависимости от расположения). Но у тебя задача то проще, у меня объекты под любыми углами и 2ух разных форм - круг и квадрат, а у тебя только квадраты и все углы кратны 90 градусов, т.ч. тебе легче должно быть =) {c0Der}
Quote (WTALKER) И самое интересное в Battle City - сделает ли кто-нибудь такую же систему ломания кирпичей! А то по другому не интересно.
А моя разве не такая как в оригинале?
на картинках это не заметно.
Ну и долго же устанавливается Net4.. хотя даже он не помог: "После запуска BattleCity.Net.exe - программа завершает работу, с выяснением причины ошибки". Win7, нетбук SamsungN150 Plus. Сперва думал что "нет4" не установил.. Скачал, установил... Всё равно вылетает.. Спать уже надо.. Раз уж занялся игростроем, то умей и имей: 1) знание иностранного языка и понимание того, что делаешь 2) программы для игростроя, а так же для обработки текстур, моделей, звуков 3) много свободного времени
Сообщение отредактировал WTALKER - Суббота, 08 Сентября 2012, 01:16
WTALKER, jiumx60rus, Вот нилрем выложил новую длл, которая теоретически должна работать на интеловских gpu.
По прогрессу разработки: Сделал танкам жизнь и броню. Сделал четыре вида снарядов - фугасные, бронебойные, подкалиберные, кумулятивные, с разным уроном, скоростью, дальностью. Делаю сменное разнокалиберное оружие. ДОбавил кристаллические стены. Точнее кристаллические кирпич и бетон, которые со временем восстанавливаются. Добавил Адамантиновый бетон, который будет абсолютно непробиваем.
Начал думать об функционале сервера. Точка зору окремо взятого індивіда завжди суб'єктивна!