Название: 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 ботов.
Точка зору окремо взятого індивіда завжди суб'єктивна!
Тоесть по твоему возрождение в ММО после смерти это бред?
Нет, не бред. Моё имхо твердит что этот момент в сюжете вообще надо опускать. В WoW же не объясняется почему этот Артес 100500 раз возрождается и тебе не надо этого объяснять.
Quote (zodiak)
Ну а как еще обьяснить, что некоторые танки двигаются и воюют сами по себе?
Каторгу продлили до воскресенья. Чето пропадает желание делать эту игру. Наверное деревня и картошка лечат от компьютерной зависимости. Одновременно с этим хочется иметь столько денег, чтоб их (деревню и картошку) больше не видеть. Вернусь, там посмотрим, может сосредоточусь на коммерческом проекте. Точка зору окремо взятого індивіда завжди суб'єктивна!
А вот и я с очередной демкой 4. Со свежими силами взялся за дело, поправил все замеченные ранее баги, добавил новых). Теперь появились боты, правда они очень злые и валят своих.
Список изменений: 18.07.2012 • Некоторая реорганизация кода. Добавлен класс MotionSystem, который заменил собой BulletSystem и теперь включает в себя не только пули но и все движущиеся обьекты. • Добавил примитивных ботов.
20.08.2012 • Подгонка координат танка при повороте. • При генерации боты больше не появляются внутри стен. • Плавное смещение вида.
21.08.2012 • Начал делать систему эффектов. Теперь взрыв танка выводится в правильном месте. • Статический класс для видимой области экрана. • Обработка выхода пули за экран.
22.08.2012 • Доведение до ума вписывания в повороты. • Убрал падение редактора при выходе кисти за пределы карты. • Вылечил баг сетки при создании неквадратной карты.
Скрин ниже сделан из текущей демки 4. В ней активировано отображение ограничивающего прямоугольника для всех обектов.
Этот скрин показывает карту размером 100*100. Плюс если ее загрузить в игру(переименовать 100х100.lvl в 1.lvl), то на уровне будет 100 ботов. При этом фпс упадет ниже 20. Нужно оптимизировать, чето я намутил. Точка зору окремо взятого індивіда завжди суб'єктивна!
zodiak, неплохо, а это правда ММО будет?)) все в одном мире?)) Я тоже про танки сетевуху делаю, но что-то вроде MOBA скорее, просто не могу представить себе танчики в виде MMO))
Quote (KVinS)
Скажи, как ты борешься с коллизиями?
А с ними надо бороться? Я их просчитываю обычно))) А бороться... {c0Der}
То, о чем я в своей теме говорил - нужно интерполировать все движения и "предсказывать" действия пользователя... Т.е. если утрировать - все просчеты должны дублироваться (на сервере и на клиенте), при этом данные сервера, естественно, остаются эталонными, и клиент (в случае расхождения с сервером) должен подстраивать текущие (интерполированные/предсказанные) данные с получаемыми от серва... {c0Der}
Интересный проект. Если хорошо реализовать, то выйдет "грамотная" игра с хорошей задумкой, но, мне кажется, лучше заменить классический стиль графики. BlackRed Free Fall
zodiak, неплохо, а это правда ММО будет?)) все в одном мире?))
Ага, я надеюсь, что будет.
Потратил некоторое время на оптимизацию. Понятно что, дело не в производительности видеокарты. Картинка убогая, нагрузка на видео – ноль. Поначалу узким местом я считал отрисовку карты. Я знаю, что движок отсекает невидимую графику, но вызов-то функции рисования все равно происходит. Если прикинуть, уровень 100 на 100 клеток вызывает функцию 10000 раз. Тогда как на самом деле отображается около 600 (30 * 20) клеток. В режиме отладки уровень выдавал аж 2 фпс. Переписав код, чтобы функция рисования для невидимых объектов не вызывалась я получил прирост в 50 %. То есть аж в 1 фпс.) Что ж, я особо и не надеялся, что поможет. С помощью профайлера выяснилось, что основное время в программе, 85 %, занимает просчет коллизий. С ними уже были проблемы ранее, когда все обьекты проверяли коллизию со всеми. Выход был – сделать проверку только для движущихся. Ситуация с проверкой сложилась следующая: Тестовый уровень из демки содержит примерно 2500 статических обьектов, которые в зависимости от состояния могут иметь один или два бокса. Реально в сцене было 3400 статических бокса + 100 динамических ботов, + пули но их я решил не учитывать. В результате производилось проверок:
100*100 = 10000 100*3400 = 340000.
Тоесть всего 350 тысяч проверок за кадр. Кошмар.
Выход простой, считать коллизии только для ближайших статических объектов. Для чего пришлось выделить для статики второй список, раньше все боксы были в одном, и брать из него только соседние. Для танка это 12 клеток и от 12 до 24 боксов. Получилось вот так:
100*100 = 10000 100*12(24) = 1200(2400);
Всего от 11200 до 12400 проверок, что почти в 30 раз меньше чем раньше. В результате переделки кода игра выдала 30 фпс. Это в дебаге, в релизе больше. Уже хорошо.
Но потом я добавил в игру 1000 ботов. В результате те же 2 фпс и висяк. (Чето мне кажется, что оно просто меньше не показывает) Конечно 1000000 проверок это не шутки. Теперь думаю, что делать дальше, ведь теоретически в мире будет около 5000 движущихся объектов.
Обновленную демку с повышенной производительностью не выкладываю, так как имеются новые баги.
зы: Кстати забыл сказать, кнопка "R" в демке производит рестарт. Точка зору окремо взятого індивіда завжди суб'єктивна!
Человек двести на одну узенькую комнату, наверное.
Какую узенькую комнату? Размер мира на производительность больше не влияет. Только что создал карту 5000 на 5000 клеток (примерно 125 на 125 экранов монитора) . Фпс остался прежним. Грузится только дольше. Точка зору окремо взятого індивіда завжди суб'єктивна!