Название: The Swamps Хирург Ниндзя Качок 6: Нежить. Жанр: Стратегия Action RPG + стратегия. Разработчики: Puksus(код), JEXXX(графика) Среда разработки: Visual Studio 2010 + SFML Платформа: Windows
Сюжет. Мы играем за вождя ящеров-людоедов, которые проснулись от многовековой спячки после отступления большого ледникового периода и начали мочить людишек, которые тоже стараются селиться на немногочисленных оттаявших зонах, ибо жить во льдах не очень-то весело. Вот и получается, что люди вынуждены селиться на зелёных территориях, а ящеры тому только рады - им тоже кушать надо.
Геймплей. Вид сверху, сратегия. Управляем отрядами. За убийство врагов получаем черепки, на которые можем вызывать подкрепления. Цель - уничтожить определённые отряды противника.
0.0.1 -основа проекта -рисование текстур прямо в уровень
0.0.2 -объекты -освещение -тени
0.0.3 -смена идеи игры -частицы
0.0.4 -персонажи сражаются, движутся
0.0.5 -отряды, управление отрядами
0.1.0 Конкурсная версия -звуки -уровни -куча мелких изменений
Кстати, не помешает художник. Я уже написал себе в ВК об этом сообщение, но вряд ли там кто откликнется. В общем, проект я постараюсь довести до конца (на прошлом конкурсе ведь довёл). Также попытаюсь довести игру до Steam. Художнику дам треть всего гонорара, если он будет. Это с учётом приза, фалки и стима. Разумеется, если игра ни в чём из 3-х не заработает, то треть от нуля - нуль, так что...
Но если что - намалюю сам себе каракулей, а когда швабрикан появится - заставлю его перерисовать)
MysticPurple, спасибо
Добавлено (04 февраля 2017, 21:00) --------------------------------------------- А в принципе, не так уж и плохо получается, вот нарисовал себе болотную травку и более-менее доволен)
Хочу сделать так, чтобы трупы и кровь навсегда оставались на уровне, причём в любом количестве - то есть я буду их прямо в текстуры тайлов рендерить. Рендеринг получится намного тяжелее и нужно будет хранить текстуру каждого тайла отдельно, но я думаю, результат того стоит.
Добавлено (06 февраля 2017, 00:12) --------------------------------------------- Реализовал рендеринг объектов прямо в текстуру уровня. Пятна на скрине не рисуются отдельно, вместо этого они были прямиком занесены в текстуры тайлов. Таким образом я могу рисовать хоть бесконечность трупов на карте без потери производительности.
Есть только одно но: поскольку sfml отказался делать 100500 рендер таргетов - для каждого тайла, то пришлось проворачивать всё обычными текстурами - в результате код подразумевает копирование данных с видеокарты в оперативку и обратно, что чудовищно медленно. Если проблема не будет решена - то чтобы не просаживать ФПС слишком сильно - буду делать ограничение на количество отрисованных в карту объектов на кадр. Остальные будут выстраиваться в очередь и будут рисоваться как отдельные объекты до тех пор, пока не наступит их черёд...
А у меня две очешуенные новости: 1) Я оптимизировал код рендеринга текстур прямо на уровень - теперь нет копирования текстур из видюхи на оперативу и обратно
2) Я сделал, мать его, динамическое освещение, Всю ночь над своим быдлокодом просидел, ха! динамическое освещение
Освещение считается всеми ядрами процессора. К сожалению, мне мозгов не хватило засунуть всё на GPU - в шейдере пока только смешиваю результат... Но всё равно показывает 400 кадров в секунду. Если убрать источник света - 500 кадров.
Пока ещё немного кривовато, но... пойду-ка я спать лучше!
Добавлено (07 февраля 2017, 16:53) --------------------------------------------- Исправил все баги с освещением, сделал основу для того, чтобы все игровые объекты, включая перонажей, деревья, да вообще все объекты также отбрасывали тени (причём на производительности это почти не отразится даже при огромном количестве объектов), загрузил в игру курсор)
Пишу на Visual Studio (с++), с нуля. Графическая библиотека - SFML, её же позже использую и для звуков.
Добавлено (09 февраля 2017, 00:46) --------------------------------------------- Добавил объекты(в данном случае деревья) на карту, абсолютно все объекты не привязаны к сетке тайлов и отбрасывают тени. Сделал плавную смену дня и ночи. +новые тайлы от художника (деревья - пока что просто временные болванки, я их из гугл картинок вырезал, нормальные деревья будут позже)
Возможно, сюжет и название изменятся, но не факт.
В общей сложности, за сегодня было написано 500 чистых строчек кода. Побил свой рекорд. Жаль, завтра мне в универ, и столько пахать над проектом уже не получится.
Добавлено (13 февраля 2017, 02:36) --------------------------------------------- Реализованы пещерные тайлы - такие тайлы, на которые вообще не проникает солнечный свет. Такие тайлы можно осветить только с помощью факелов и других источников света, потому что в пещерах стоит кромешная тьма. Сделал неполную реализацию зданий(связанных между собой тайлов). Например, башня является зданием. Идея такая, что если какому-то тайлу, принадлежащему башне, наносится урон, то вместо этого урон получит вся башня. Кроме того, здания можно поставить под углом кратным 90 градусам и навесить на них источники света.
В игре также будут представлены здания для добычи ресурсов - и их можно будет уничтожить в процессе осады для подрыва экономики врага - хоть какой-то способ нагадить противнику, если известно, что битва заведомо проиграна. Копмухтар тоже будет мочить здания игрока при удобном случае.
Идея игры была изменена. Теперь мы играем за вождя ящеров-каннибалов, которые проснулись от многовековой спячки после отступления большого ледникового периода и начали мочить людишек, которые тоже стараются селиться на немногочисленных оттаявших зонах, ибо жить во льдах не очень-то весело. Вот и получается, что люди вынуждены селиться на зелёных территориях, а ящеры тому только рады - им тоже кушать надо.
Были продуманы игровые юниты, получилось по 7 типов юнитов для людей и для ящеров, но их типы и количество ещё может смениться. В игре будет подобие сюжета, которое ещё не придумано.
Новое название "The Swamps"
В ближайшее время планируется дописать здания, вставить системы частиц, разрушение тайлов(при этом будут генерироваться частицы, отлетающие на некоторое расстояние и остающиеся на уровне навсегда), сделать новые типы источников света - переменной мощности(мерцающие, костёр например) и конечного времени жизни.
Обновил описание. Просьба сменить название и описание в списке проектов. https://vk.com/beezoya
Сообщение отредактировал puksus - Понедельник, 13 Февраля 2017, 02:47
blackcatkpi, да, людоедов. Просто я как-то не допёр до этого слова. Спасибо)
Добавлено (20 февраля 2017, 16:14) --------------------------------------------- Реализовал систему частиц. На скрине видно, что в результате бомбардировки частицами были повалены деревья.
Частицы после остановки навсегда рендерятся в текстуру уровня - то есть пролитая юнитами кровь, упавшие на уровень стрелы и т.д. и.т.п останутся на уровне навсегда и при этом не будут жрать ФПС.
Частицы умеют сталкиваться с объектами, нанося им повреждения, отскакивать от стен, распадаться на другие частицы при разрушении, оставлять следы на поверхности при столкновении с землёй и испускать другие частицы во время полёта.
Сделал, что все объекты теперь имеют анимацию смерти и реагируют на столкновения с частицами. Теряя здоровье или умирая, объекты также могут испускать частицы. https://vk.com/beezoya
Сообщение отредактировал puksus - Понедельник, 20 Февраля 2017, 16:15
Подошёл вплотную к вставке юнитов и искусственного интеллекта в игру. Для полноценного ИИ моих сил недостаточно, поэтому я придумал вот такую примерную систему положений:
1)На этапе создания карты я буду делить карту на области и задавать областям номера(у разных областей может быть одинаковый номер). 2)Центр замка имеет номер 0, присоединённые к нему области имеют номер 1. Если между текущей областью и главной областью есть ещё области, то присвоить этой области номер соседней наиближайшей к главной области номер + 1. Область снаружи замка называется открытым полем и имеет максимальный номер. 3)Таким образом, чем дальше от центра замка область - тем больше её номер и тем меньше её ценность как для нападающих, так и для защищающихся 4)Ценность области для нападающих уменьшается при увеличении количества вражеских войск в ней 5)Ценность области для нападающих увеличивается, если в ней имеются бреши в стенах или уже была начата осада той области. 6)Ценность области для защищающихся увеличивается при увеличении числа врагов около неё. 7)Если область осаждена, то для защищающихся ценность областей непосредственно примыкающих к ней с тем же или меньшим номером, увеличивается. При этом ценность самой области для защищающихся сильно увеличивается. 8)Если для защищающихся в области слишком много вражеских юнитов, то она помечается как захваченная - тогда все дружеские солдаты отступают из неё в соседние с таким же или меньшим номером. Ценность вплотную прилегающих к данной области с тем же или меньшим номером увеличивается. 9)Если вражеские войска ушли из захваченной области или в соседних областях скопилось достаточно солдат чтобы перебить засевших в ней врагов и если данная область имеет достаточную ценность, то дружественные войска постараются её снова занять. 10)Если враг захватил область с номером 1, то главная область получает огромный бонус к ценности - к ней стягиваются войска со всех остальных областей, чтобы предотвратить захват. 11)ценность области для вражеской осадной техники и лучников уменьшается при наличии в ней врага. Таким образом, сначала в область врывается пехтура, перебивает врагов, а затем туда втягиваются лучники и осадная техника. 12)Вражеская кавалерия старается вести боевые действия в открытом поле - ценность открытого поля для кавалерии значительно увеличивается.
1)Игра основана на отрядах, можно управлять только отрядом целиком, понятие отдельного юнита на уровне управления не существует вовсе. Это нужно для ускорения расчёта ИИ и поиска пути, и для возможности построения сложных структур типа "в первой линии мечники, а во второй - копейщики с большим радиусом атаки, которые сами по себе слабые, но смогут атаковать из-за спин мечников, значительно облегчая положение мечников." 2)Каждый отряд может иметь разные уровни агрессивности: Для агрессивных отрядов при поиске пути возрастает ценность тайлов, в которых находится враг. Для неагрессивных - наоборот уменьшается. 3)Поиск пути - алгоритм А* с кое-какими оптимизациями. 4)При движении отряда между точками пути, сначала происходит разворот отряда, затем движение. 5)Если при поиске пути происходит поворот - ценность этого тайла уменьшается. Таким образом, отряд старается подойти к цели, сделав как можно меньше поворотов. 6)Если при поиске пути тайл геометрически ближе к цели, его ценность увеличивается. Таким образом, отряд старается подойти к цели таким образом, что на первый взгляд путь ближе, даже если это неверно. 7)После построения пути по клеткам, удаляются промежуточные точки пути, если на пути нет препятствия. Проходы осуществляются до тех пор, пока невозможно будет удалить какую-либо точку из пути. Таким образом отряды смогут идти в любом направлении, а не только вперёд\назад\влево\вправо. 8)Отряды не ищут путь каждый кадр. Они делают это по таймеру. Таймер для каждого отряда после срабатывания рандомизируется, чтобы как можно равномернее распределить пересчёт пути между кадрами для отрядов. 9)Отряды время от времени пересчитывают путь заново, чтобы реагировать на динамические изменения карты. (уточнение пункта 8) 10)Каждый отряд имеет ценность для врага в текущей области. Чем больше отрядов рядом с текущим - тем меньшую он имеет стоимость для рукопашных бойцов и большую для стрелковых(по маленьким отрядам велика вероятность промаха). Каждый тайл имеет стоимость. Чем больше вражеских лучников могут простреливать данный тайл - тем меньше его стоимость. 11)Кавалерия старается атаковать небольшие отдельные отряды врага, при этом ценность лучников для кавалерии увеличивается, стоиммость копейщиков - уменьшается. Уменьшается ценность вражеских отрядов, если на пути кавалерии к цели стоят копейщики. 12)Копейщики стараются идти между союзными отрядами и вражеской кавалерией. Такие тайлы имеют большую ценность для копейщиков. 13)Щитовики стараются идти между союзными отрядами и вражескими лучниками. Такие тайлы имеют для щитовиков большую стоимость. 14)Стоимость тайлов и для вражеских и для дружественных рукопашных войск возрастает при наличии рядом осадной техники или лучников. Таким образом, юниты имеют приоритет защищать осадную технику или лучников от врага и атаковать вражеских. 15)Ценность тайлов для осадной техники или лучников резко уменьшается при наличии рядом врага 16)Ценность тайлов увеличивается, если рядом мало союзных войск и много вражеских или наоборот. Таким образом, отряды постараются мочить слабые отряды противника и защищать свои слабые. 17)Ценность тайлов уменьшается, если между вражеской кавалерией и отрядом нету дружеских копейщиков. 18)Приоритет осадной техники - стены, приоритет атаки - сломать стены. Поэтому для осадной техники расчитывается путь до стены с максимальной ценностью атаки. Ценность атаки стены увеличивается с уменьшением номера области, от которой данная стена ограничивает. И уменьшается с количеством вражеских войск вокруг. 19)Ценность атаки стены резко падает, если уже был разрушен участок стены, ведущий из той же области в эту же - нет смысла сносить все стены подчистую, лучше пойти бить стены, ведущие в область с меньшим номером, чем текущая область. 20)Ценность тайлов для поиска пути равна 0, если отряд не может пройти через него не нарушая строй(например, узкие проходы). Костыль, но иначе возникнут трудноразрешимые детали реализации движения по таким местам.
1)каждый юнит имеет свои параметры - атака, защита, защита от выстрела, урон, здоровье и т.д. 2)Чем больше разность между атакой юнита и защитой противника - тем больше вероятность попасть по сопернику при ударе. 3)Атака кроме урона может иметь иные эффекты. Например, атака копейщиков может оттолкнуть соперника, если тот находится на достаточном расстоянии. И их атака резко уменьшается, если враг подошёл вплотную. Такми образом, отряд копейщиков сможет некоторое время сдерживать противника, не давая ему приблизиться, но если противник пробился через стену копий, то засчёт низкой защиты копейщиков, их быстро перережут. 4)Приоритет юнита - защита. Такми образом, если в юнита прилетает вражеский удар, то юнит прекращает свой удар и пытаестя защититься. Таким образом, маленький отряд из элитных солдат будет обречён, если количество вражеских солдат слишком велико - юниты просто не смогут ударить, пытаясь блокировать все входящие удары. Таким образом резко возрастает стоимость бьющих через спину дружеских копейщиков. Исключения - берсерки людей, эти чуваки вообще не парятся о защите. 5)вражеская кавалерия расталкивает врагов при движении, её урон увеличивается в зависимости от скорости движения. Такми образом, естественным для кавалерии приоритетным построением является клин - он позволит пройти сквозь отряд врага. Чего не будет при построении кавалерии линией - пусть она даже нанесёт большой урон врагу, врезавшись в строй, но её сразу же перебьют, ибо кавалерия эффективна только в разгоне. 6)Если броня юнита может полностью поглотить входящий урон, то есть шанс, что юнит не станет его блокировать, а просто продолжит свою атаку. 7)Если рядом с юнитом есть враг, повёрнутый боком или спиной, юнит с большей вероятностью атакует его. 8)Если рядом с юнитом за спиной или сбоку есть враг, то юнит будет иметь приоритет развернуться к нему, однако, предварительно завершив текущее действие. 9)Атаковав сбоку или со спины, юнит получает бонус к атаке. 10)Каждый юнит старается занять своё место в строю. Если юнит отстал от отряда, его скорость временно увеличивается, чтобы он смог догнать. При этом путь до своего места не расчитывается - просто считать потенциальные поля. Если юнит очень сильно отстал от отряда или слишком долго не может вернуться в строй из-за неполноценности потенциальных полей - то подключается полноценный поиск пути. 11)Если отряд вступил в бой, то расстояние, на которое юнит может отойти от своего метса в отряде, определяется агрессивностью отряда.
Осталось только это всё реализовать))
Добавлено (28 февраля 2017, 00:42) --------------------------------------------- Я вот сел писать это хозяйство и понял, что за месяц будет невозможно это доделать. Скорее всего, вместо стратегии будет тауэр дефенс с отрядами по типу Kingdom Rush (только более продвинутой боёвкой) и элементами экономики между уровнями. Ещё поглядим... Лучше сделать проще, но качественно. А то слишком большой кусок хочу проглотить.
Добавлено (02 марта 2017, 05:58) --------------------------------------------- Всё-таки остаётся исходная идея
Я научил мобов искать путь и сражаться. Устроил тут у себя битву 300х300 - забавно было наблюдать. Когда художник нарисует мне нормальных болванчиков - запилю видосик и покажу!
В игре сейчас можно выделять отряды и отдавать им приказы, все бегают, радуются и дерутся (правда, немного топорно). ИИ пока не управляет отрядами, однако, вражеские солдаты всё равно в бой вступают, завидев врага. Из игры будет вырезана РПГ часть и элемент глобальной стратегии(не сможем выбирать какую область атаковать). Скорее всего, будет просто несколько уровней, на которых игрок должен уничтожить отряды врага. Сейчас работа идёт над Интерфейсом и менюшкой. Музыки скорее всего не будет. Звуки будут наверное. Возможно, будет парочка заклинаний, которые сможем кастить на уровне... В общем, нифига не успевается. Замкнутых крепостей не будет т.к. ни я ни художник не успеем сделать механику осады и осадные машины.
Замесы будут размером не более 500х500 болванчиков, иначе ФПС слишком низкий. Из-за моих кривых лап. https://vk.com/beezoya
Сообщение отредактировал puksus - Суббота, 18 Марта 2017, 18:27
Проект хороший. Жаль маловато времени и ресурсов, чтобы действительно сделать все так, как хочется. Но все равно желаю удачи =) Чтобы и с такими ограничениями все вышло наиболее близко к задумке и чтобы, самое главное, конечный результат порадовал создателей)
puksus, очень нравится проект!! Обожаю стратегии,а тут еще и с мясом! и на калькуляторах потянет! шик) и свой движок! В общем,мое уважение,редко такое встретишь! Надеюсь потом не забросите проект и доделаете все,даже после проекта,а там в стим уже можно!)))