| |
|
|
Согласно с пожеланиями многих людей, я переписываю описание так (всёже немного спустя рукава), чтобы было более понятно. Хотя это скорее не описание, а некоторые пояснения.
Итак, какие цели поставлены, что должно получиться в итоге:
- Юнит ходит, лазиет везде где только можно. Так сказать тотальный "паркур". В РПГ играх такого как мы знаем не было ещё, есть в экшенах по типу (самый известный) Tomb Rider. Только там есть ограничения, и пройти можно только в определённом месте. Для нашей задумки же нужна полная свобода, в любом месте. Где доступно, там то и будет. Чтобы был так, в SDK для постройки уровней вы сделали простое зданице, или простой уровень - набросали кучу кубов, блоков. Больше ничего не надо. Запустив уровень вы можете в нём лазить абсолютно везде, где по простой логике это возможно.
Раньше задумав такое, многие бы просто отозвались "мечтатель". Но.
Для этого нужны простые и быстрые технологии, и мне после размышлений, неожиданно сами пришли в голову некоторые идеи, как это можно было бы реализовать - чтобы просто, и быстро. Здесь то и есть то как строяться модели юнитов (есть некоторые отличия от обычного метода, суть в их логике анимирования), и ориентация в пространстве.
В конечных целях задумано так, движение суставов это запись верчения суставов. А перемещение всего тела, это запись одной относительной точки. В специальном SDK мы изменяем движение суставов, а изменения точки это движение во всём игровом пространстве. Теперь уже в игре юнит будет двигаться так, как идёт движение это точки. Т.е. допустим один шаг заложен уже в анимации (всё для простоты производства). Также различные прыжки. В игре возможно прибавлять некий коофицент силы, для увеличения шага, прыжка и прочего.
В игровом пространстве, просто существуют точки (юнит состоит из соединёных частей, он набор объёктов). Просто нужно задать им движение. Не могу обьяснить точнее, так как не уверен что это решение сто процентов грамотное. Отличие в том, что в остальных играх, юнит это цельный объект, целая модель. Анимация его происходит также целиком, на месте, и уже в игре вся модель целиком перемещаеться с заданой скорость и воспроизводиться анимация перемещения. В нашей задумке, модель это не цельный объект, а составной, и каждая часть тела может поражаться отдельно (рука, нога, голова, торс). Поэтому тут нужно что-то другое, более утончённое, нежели стандартное.
Ориентаия в пространстве исходит из того, что юнит ощупывает перед собой пространство. Для движения вперёд ему например нужно некоторые пространство впереди, которое на уровне его ступней или чуть больше или меньше. Специальный "щуп", точка распологаеться в пространстве в своей зоне, если точко свободно распологаеться в этой зоне и не натыкаеться на препятствия, значит юнит "понимает", можно шагнуть, он шагает в направлении этой точки. Если есть препятсвие и точка вышла за пределы некоторой своей зоны, значит действие "шаг" недопустимо. Также выполняються и другие действия. Много точек которые ощупывают пространство в разных областях. Так например обнаруживаються типы барьеров. Чтобы зацепиться за карниз, пару точек должны находиться в определённом положении с некоторыми вариантами. Если эти точки находяться в нужном положении, значит юнит может выполнить действия прыжок и зацепиться, он выполняет это действие в направлении этих точек.
В стандартном методе, вы в редакторе обозначаете карнизы и препятствия для которых производяться подобные акробатические (слово лазания, или паркур здесь больше подходит) действия. И в игре юнит определяет эти объекты и действует. Наша цель, чтобы не было нужды обозначать эти места (карнизы, стены и пр., чтобы юнит сам их находил. В исключении придёться указывать только верёвки и канаты.
Всё управление перемещением как в РТС, вы отдаёте команды мышкой. Вы просто кликаете, юнит сам залазиет и цепляеться куда надо. Допустим указав на стену юнит может залезть на неё как человек-паук, теперь вы щёлкаете по стене и юнит также ползает по ней дальше. Повиснув на корнизе, вы также указываете мышкой перемещение по этому карнизу. Ещё важно то, куда вы кликните. Если юнит находиться на стене, а вы кликните (дважды) на пол, юнит конечно спрыгнет, поэтому нужно указывать ближе к юниту на стене, чтобы он полз куда надо. Если допустим юнит висит на карнизе, а сверху есть ещё карниз, то чтобы подпрыгнуть ко второму карнизу, нужно в его область дважды кликнуть. Или наоборот, чтобы не вверх, а вниз спуститься.
В бою, имея оружие ближнего боя, подобным же образом есть методы "фихтования". Двойной щелчок близко сзади например заставит юнита отпрыгнуть назад, если щелчок сзади дальше, то он сделает кувырок и развернёться. Если ближе сбоку, то (к примеру в руках меч), то сделает удар в ту сторону, а если дальше, сделает другой удар. Это всё относительно себя. Если рядом враг, то действия будут относительно врага. Куда кликните, такое получите действие относительно врага. Так получаються различные приёмы ведения боя. Относительно просто и разнообразно.
В момент действия юнит просто движеться в пространстве, а не наносит удар (как в привычных рпг, типа клик - удар). Удар получаеться если точка поражения, достигает точки поражающегося объекта. Т.е. как пуля, если попала в часть тела. Просто идёт анимация, и точки перемещаються в пространстве. Поэтому нужно именно попасть, а не просто кликнуть на врага и ему нанесёться урон.
Потеря какой-то части тела также важна. Здесь поэтому нужно много анимации. Если повреждена рука, она перестаёт действовать, просто обвисает к примеру. Теперь вы с одной рукой. Понимаете что тут нужна уже своя анимация, там где юнит всё делает одной рукой. Если ноги поломаны, то ещё своя анимация, как юнит ползёт или храмает. Поломка какой-то части делает невозможным применение возможностей или совершение каких-то действие, например при некотором повреждении ног бегать не получиться, при повреждении рук или одной руки, ей уже не подерёшься и оружием встроенным в руку не воспользуешься, и никуда особо не залезешь. Кроме повреждения есть опасность что просто энергии может на хватать на использование возможностей. К примеру для лазания по стенам, нужно определённое количество энергии, если его меньше нужного, то лазить уже не получиться. И так во всём остальном. Если в батареях в ногах уже очень мало энергии, прыгать и бегать уже будет нельзя, можно будет только ходить.
Как быть если вы застряли и у вас кончилась вся энергия, и уже не выбраться? Ну тогда вы проиграли, не позаботились о себе. Возможно в такой ситуации будет отсоеденяеться голова от основного корпуса, и вы на маленьких лапках бежите, лезит куда вам надо. Если и так невозможно, то вы окончательно продули.
Смена корпуса тела происходит примерно также, голова отсоеденяеться и присоеденяеться к другому туловищу. Чтобы собрать всё туловище, нужна к нему была была хотябы одна рука, с помощь неё можно ползать и присоеденить ещё другие части.
Устройство искусственного интеллекта тоже логически просто. Основное понятие в том, что есть конечные действия, перемещение в точку, или использование возможностей и др. действия. Нужно просто привести в порядок эти действия, задать им логическую последовательность. ИИ наблюдает в окружающем мире события, и принимает решения исходя из сложившихся условий - как ему действовать. Если он видит опасность, то убегает. Программа ИИ состоит из общих целей, как и в природе основная цель это выживание. Для выживания нужна энергия, и юнит знает как найти для себя энергию. Т.е. условие выживания - это сохранение энергии и целостности на уровне. ИИ делает всё чтобы соблюсти условия. Есть конечно и ньюансы, но это тоже относиться к вариациям событий. Другая цель может быть например в том, чтобы найти для себя группу, и состоять в ней. Так для ИИ кроме личных, прибавляються групповые цели, и ИИ действует уже согласно этим целям.
Юниты имеют "память", они запоминают некоторые события и окружение - друзей, врагов. Благодоря памяти, они могут сообщать друг другу информацию, это как бы уже групповая информация (важная для группы). Например кто-то из группы нашёл где-то хорошее место, при встрече он передал сведения об этом хорошем месте одногруппнику, теперь другой юнит в своей голове тоже имеет информацию о месте. Или не о месте, а о врагах и друзьях, или событиях, или передаёт новые цели. Так юниты сообщаються друг с другом, взаимодействуют согласно простой логике, как оно положено.
Что в итоге должно получиться. Поместив юнита в некую среду (игровую локацию), мы дальше можем наблюдать, как он начнёт в ней обитать. Найдёт для себя безопасное место, обозначит его в своей памяти, найдёт источники для питания, и тоже запомнит их (он запоминает область в карте мира, мол вон там та область. когда нужно будет, эта информация будет использоваться). И дальше начнёт делать свои дела, на которые он запрограммирован, достигать свои цели.
Если поместить ещё юнитов, то они опознают друг друга, выяснять степень угрозы, может даже запишут друг друга в друзья, или создадут группу. Когда будет созданна группа, появяться групповые задачи.
Всё это конечно требует немалой продумки, должна быть логика, иначе может произойти ступор. Но это не сложно, просто чуть подумать и поэксперементировать. В итоге то, получаються сами по себе живущие игровые интеллекты. Они взаимодействуют с миром в полном согласии с логикой (ну как мы им запрограммируем). Т.е. получаються что вы просто сажаете их в мир, и они начинают действовать, вне зависимости от того где находяться. Это получаеться животный интеллект.
Более развитый интеллект, с которым можно уже общаться и вести диалог, содержит модуль социума (типа общения). У того есть свои цели, задачки, и согласно им происходит общение.
Отличие от привычного вида ИИ, в нелинейности и самозавершённости. Но как и в привычных, можно задать совершений событий или действий принудительным образом.
Что касаеться игрового сюжета, то тут естественно он будет переплетаться с устройством игрового мира, т.е. фактически в сюжете как раз вам придёться узнать об этом мире. Игровой мир как бы центральная часть сюжета. Есть общий замысел, и этого достаточно, пока я не сильно думал о точном содержании, но в себе уверен, поэтому не паникую, прийдёт время, всё сделаеться.
Вобщем получаёться всё очень амбициозно, у многих возникают сомнения и не все понимают, а какая собственно планируеться игра. Если говорить простым языком, то получаеться нереально. Ну что-то вроде: реально живой ИИ, полнейшая свобода действий в большом оригинальном и насыщеном мире. Поэтому я постарался избежать этого, и писал совсем о другом. О том как я собираюсь это реализовать. Но и тут нашлись те кто начал выпендриваться и писать, что это неправильно. Но чёрт с ними, уж лучше я так напишу, чем просто "крутая крутая ваще игра, у меня там так, а это вот так, а ещё там должно быть так и так". Такое кругом. Но даже если начать обьснять, у людей тоже плохо с пониманием - а как такое возможно. С одной стороны назовут неграмотным наивным мечтателем, с другой неграмотным идиотом. Хотя я всегда говорю, что это моя идея, и реализовываться она должна, конечно на хорошем уровне, а не случайными людьми. Прежде всего, потому что новые технологии в игре, которые влияют на игровой момент. Что до графики, даже очень простая сойдёт, без наворотов и шейдеров.
Но это ещё более амбициозно чем вы могли даже подумать. Потому что это являеться лишь опытным проектом, так сказать площадкой для испытания.
То что дальше, я написал немного раньше, поэтому эта часть может немного отличаться, но она как может обьясняет что и как готовилось.
Задумка игры являеться всего лишь пробной частью, так сказать базой для более крупного и сложного проекта. Начиналось всё немного по другому, и первая идея была не о роботах. Первая идея была сказочная фэнтези РПГ, где существует огромный самостоятельный мир полный приключений и сказок. Я нарисовал карту: это большой материк, там есть всё, зелёные луга, густые самые разные леса, реки, пустыни, степи, каменные ледяные горы, вулканы и моря. В таком мире есть любая сказочная история, соотвествующая своей местности. Логическим центром есть Лукоморье, так называеться сторона: зелёные луга, фруктовые сады, голубые реки и конечно огромный дуб, который мог бы быть целым городом. От него дороги во все направления, на все стороны света. Основное это конечно именно сказочные квесты, многие знакомые истории которые игроку предстоит пройти, конечно они немжко более точны и правдивы, но всё также узнаваемы. Чем вам не офигенный квест - достать молодильные яблоки старичку, а чтобы их достать, нужно молодую девушку злодею отдать, а чтобы девушку найти, нужно жарптицу, а чтобы жарптицу получить, нужно коня. И нам поможет волк, неся на своей спине быстро между замками злодеев. Конечно всё может быть иначе, конечно тогда всё пойдёт по другому сценарию.
Можно встретить безмозглое чучело висящее на ветке, которое хочет мозги. И пойти с ним в Изумрудный Город к Волшебнику Оз (этот персонаж прописан в основном глобальном сценарии), по пути встретить Дровосека, Льва, а может и ещё кого. Конечно путешествие займёт не мало времени, но почти каждый персонаж в игре имеет свою проблему, по пути встретить можно разных персонажей, так что скучать не прийдёться.
В пустынных местах, покрытые песками долины, там нас ждут лампы с джинами. В городе если хватить денег, и если найти, можно купить ковёр самолёт. Шапку невидимку. Туже лапму с джином. Или попасть в лапы к султану и чтобы выжить придёться бегать по его заданиям, красть принцесс. И ещё много чего.
В тёмных местах нас ждут орды нечести, там делать наверное нечего, но туда захочеться сунуться каждому и посмотреть что там, и может добраться до жерла вулкана, и даже спуститься туда, чтобы повстречаться с самим дьяволом.
В лесах эльфы, а горах конечно гномы и Драконы. Среди драконов есть и трёхглавый Змей-Горыныч, который оказываеться очень старым и мудорым, и совсем не злым, просто строгим. Есть даже возможность полетать на нём.
В подводном мире ждут русалки и золотая рыбка, это тоже целая сторона полная приключений.
Просто представляя себе картинку, вижу определённо. Тот вид и типа управелния который я определил больше всего подходит для такой игры. Но и не только это, а ещё систему боя и вообще её исконный смысл. А смысл то в чём, не просто клацание, а более логичное но упрощёное действие приёмами, игровой персонаж действует автоматически в зависимости от ситуации, при этом используеться всего одна кнопка мыши. Я искал возможное решение всего этого вопроса, как реализовать это системно, и нашёл сразу. Тип юнита скелетный с ключевыми точками, и то каким образом он анимируеться, а позже добавилась как он ориентируеться в пространстве - всё это отлично задействует все нужные нам возможности. Подробнее я на этом не буду останавливаться, это написано ниже. Но это лишь то решение, которое мне кажеться наиболее простым и подходящим, и очень свежим. А взамен мы получаем полную свободу действий. Всё как в реальности - от простого к сложному. Теперь мы можем делать все действия доступные в лабиринтных аркадах, таких как Tomb Rider - одной кнопок мыши, это простое перемещение во всём доступном пространстве. Чтобы залезать куда-нибудь на выступ нам всего лишь нужно аккуратно кликнуть в том место, где по простой логике мы можем зацепиться и вскарабкаться. И всё устроено так, что это происходит (если специально не сделано обратное). И благодоря ключевым особеностям анимации и пространственной ориентации, это просто и не нуждаеться в огромных затратах ресурсов.
Ещё одна важная часть, логика ИИ, тоже от простого к сложному. Всё что нам доступно в игре, это действия с перемещением, и взаимодействие с предметами. Последовательность и логика исполнения этих действий, это уже теория, нечто "в голове", всё это можно на листе бумаги написать. А ориентация в пространстве и построение юнита с его анимацией, всё это упрощают. Если бы мы пытались эту логику ИИ применить к обычному варианту строения-анимации юнитов и способе их ориентации в пространстве, это было бы сложнее и затратнее в конечном счёте. Всё это тоже я достаточно детально и просто описал.
Я не могу всё это запрограммировать, так как не программист, и это достаточно ёмко и пока отсутствует практика такой технологии. Но я совершенно не беспокоюсь, что это может не работать - потому что это будет работать, и так как надо, можно получить именно те возможности которые и были задуманы. И очень логично и просто распределить эти процессы на несколько потоков, для многопроцессорных машин.
Но так как затея слишком ещё сложна и требует просмотра, всё это вылилось в более простой по задумке проект. Роботы проще в моделировании, такие юниты для простоты состоят из немешированых частей (прост часть тела - это как объект), а роботы просто сами по себе так устроены. Юниты способны лишаться своих частей, и эти роботы само собой тоже. Это будет выглядеть понятным и проще опробовать всё в действии. Кроме того, роботы это роботы, съэмитировать интеллект проще.
Эта "лунная" вселенная более типичная и она меньше, такой футуристический постапокалипсис, также это гораздо проще и быстрее сделать. И тип местности гораздо менее сложен, чем терра-мир.
Схема "прокачки" другая, это лучше продемонстрирует и испытает боевую схему основаную не на статистиках персонажа, а на реальном взаимодействии (если ударил и попал - значит отвалилось). Для этого и существует управеление, которое позволит сделать более продуманую схватку, нежели просто перепих ударами.
Отсутствует всё что связано с подводными перемещениями.
Вобщем получаеться немного проще, как полигон для испытания, всех возможностей.
Имеется и ещё один плюс, достаточная оригинальность идеи. В игре предпологаеться приключения и обследования, можно сказать расследование, сами схватки будут насыщеными и логичным (вы не будете просто бесконца бежать и махать мечом).
Ну, возможно я что-то упустил, плохо описал или непонятно. Честно говоря, на пальцах даже проще было бы показать всю задумку.
Единственное что мне пока с трудом даёться, это разнообразить дизайн роботов (при моделинге), и разработать чёткую механику в дизайне. Есть одна правильная модель, набросок, по идее это средний-лёгкий юнит. По идее есть лёгкий, средний и тяжёлый, соотвественно они различаються по общей форме дизайна и выглядат соотвествующе. Но в общем я хотел показать, какой именно стиль роботов, ближе к био организму, но в тоже время именно роботы.
Все остальные организмы близки к насекомым, животным и птичьим видам. За них я пока что даже не брался, это тоже вобщем-то не проблема.
|
|
|
| |
|