Коммуникация
- «LOL» (лол) — используется в сетевом общении главным образом для выражения смеха в письменной форме.
- «GG» (гг) — Good Game. Аббревиатура дошедшая до нас ещё с самой первой MOBA, означает хорошую игру или же обычный троллинг противника, который переиграл вас или вашу команду.
- «IMHO» (ИМХО) — In My Humble Opinion, по моему скромному мнению. В сетевом общении аббревиатура означает «по-моему, я так считаю, на мой взгляд» и прочее.
- «Go» (Го) — Вперёд, Давай сделаем это, В атаку и прочее.
- «Full» (Фулл) — полный. Фулл пати – полная группа. Играть фуллкой – играть полным составом. Можно ещё употреблять как фулл билд, то есть полный закуп; фулл эмблемы – эмблемы максимального уровня и тд.
- «Event» (Ивент) — событие приуроченное к какому-либо празднику (Новый Год, Пасха, Хэллоуин, День Валентина). На ивент игрокам доступны новые задания, выполнение которых дают рамки, облики, эмблемы, карты БО и тд.
- «Flood» (Флуд) — Flood. Сообщение-пустышки, без смысла и в больших объёмах. В игре флуд встречается редко, ибо есть система анти-флуда, запрещающая непрерывно посылать сообщение в чат.
- «Holy War» (Холивар) — Святая Война. Как и религии между друг другом не могут прийти к согласию чей Бог настоящий, а кто язычник, так и некоторые люди в дискуссии не могут прийти к решению. Если в адекватном споре, стороны могут объединиться и вместе бросить силы на поиск истины, то в холиваре оппоненты стараются именно навязать свою точку зрения. Наглядный тому пример, какой же герой самый крутой в игре.
- «Слив» — сливать, то есть намеренно умирать от врага, ослабляя свою команду и давая фарм вражеской. За слив можно смело кидать репорт.
- «Surrender» (Капитуляция) — после 6 минут с начала матча можно капитулировать. Эта функция доступна в настройках, рядом с мини-картой.
- «GJ, GW, WP» — сокращения от выражений Good Job, Good Work, Well Played – Хорошая Работа, Хорошо Сыграно.
- «Donate» (Донат) — вложение денег в игру с целью получения внутриигровой валюты или любого другого бонуса.
- «Guide» (Гайд) — справочник или руководство от знающего человека по какому-либо аспекту в игре, герое и тд.
- «Imba» (Имба) — несбалансированный. Чересчур сильный или чересчур слабый.
- «One Shot» (Ваншот) — One Shot, переводится как «Один Выстрел». На сленге онлайн игр, ваншот означает уничтожение цели всего за один удар, заклинание, выстрел, в общем – за одну атаку. В Mobile Legends нет таких героев, способных убивать с одного удара, но, несмотря на это, в игре нашлось место для этого термина. Ваншотом тут называют возможность быстро убить врага с прокаста (комбо из навыков). Как правило, ваншотером называют героя, который, при благоприятных условиях и правильной технике, может устранить вражеского героя с большой вероятностью и за несколько секунд.
- «Noob» (Nub, Newbie, Нуб) — неопытный игрок, новичок.
- «Feeder» (Фидер) — ужасно плохой игрок, который вечно умирает и только тянет свою команду вниз.
- «Booster» (Бустер) — опытный игрок, который за оплату помогает поднять ранг или статистику.
- «Top» (Топ) — человек, входящий в список ведущих игроков того или иного рейтинга.
- «Задрот» – игрок проводящий в игре слишком много времени. Иногда употребляется как в оскорбительном, так и положительном тоне. Зависит от контекста.
- «S1» (S2, S3, S4, S5) — обращение к человеку в момент пика. S1 означает слот один, первый слот – игрок на первом слоте.
- «Invite» (Инвайт) — приглашение в игру.
Популярные герои-милишники в Dota 2
1. Juggernaut
Juggernaut – один из наиболее популярных героев в Dota 2 среди милишников. Он обладает высокой скоростью движения, атаки и защиты, позволяющей ему выживать в бою. Его Ultimate способность Omnislash направлена на атаку всех противников в радиусе действия. Juggernaut хорошо подходит для игры в качестве противника героям с низким количеством здоровья.
2. Faceless Void
Faceless Void – прорывистый милишник, способный контролировать бой благодаря своей Ultimate Chronosphere. Эта способность останавливает всех противников внутри ее радиуса действия, что дает возможность сильно наложить урон на противников. Faceless Void также может ускорять свою скорость и бросаться в бой с врагами.
3. Axe
Axe – это живая танковая машина в Dota 2. Этот герой известен своими танковыми способностями и отличными возможностями в бою. Он может накапливать ярость через свою способность Battle Hunger и наносить жестокий урон благодаря способности Berserker’s Call. Чтобы усилить свою защиту, Axe может использовать способность Culling Blade, которая убивает противника с низким уровнем здоровья.
- Кроме вышеперечисленных героев, есть и другие милишники, такие как:
- Slardar – герой с огромным количеством здоровья и набором мощных способностей в ближнем бою;
- Legion Commander – герой, способный усиливать свою атаку и защиту набором скиллов, а также набивать типичные по бойцовскому отношению счеты убийств в сражениях один на один;
- Phantom Assassin – зловещая и интригующая фем-фатале. Она работает так: она хранит невидимость, пока не окажется рядом с врагом, после чего его разбивает на кусочки на своем супер-скоростном Butterfly Dagger.
В Dota 2 есть множество других героев-милишников, которые могут быть эффективны в ближнем бою и контролировать поле боя. Они могут быть последним рубежом обороны команды, наносить мощные удары и повышать боевой дух союзников.
Время[править]
Время в Heroes of Might and Magic III дискретно. Основной единицей времени, как и во всех пошаговых стратегиях, является ход, в игровой вселенной Heroes именуемый также днём. За 1 день игрок, как правило, может неограниченно долго (в смысле реального времени) выполнять любые доступные действия (хотя при создании новой игры можно указать предельное время выполнения хода — например, 20 минут (минимум 1 минута)). Каждый герой имеет определённый запас хода в течение дня, который зависит от множества факторов и может быть расширен различными способами (развитием определённых навыков, посещением особых строений и т. д.). Также за один день в одном городе можно построить только одно строение, за одним исключением — если у героя имеется Грааль, то при посещении замка он может отказаться от его постройки, построить другое строение, и после этого построить Грааль.
Дни объединяются в недели, а недели — в месяцы. В каждой неделе 7 дней, а в каждом месяце — 4 недели. В начале каждой недели все жилища существ (в городах и на карте приключений) пополняются новыми существами, которых можно нанять за определённую плату. Также каждая неделя и месяц посвящены определённому существу. Иногда это обычные существа (например, ёж или сурок), никак не влияющие на игровой процесс. А если это существа из вселенной Heroes of Might and Magic, то прирост этих существ в городах на данную неделю увеличится (к примеру, на неделе беса во всех городах типа Инферно можно будет нанять на 15 бесов больше, чем обычно). Месяцы действуют аналогичным образом, но с более мощными эффектами: к примеру, месяц беса удвоит количество бесов, которых можно нанять в городах Инферно; кроме того, несколько отрядов бесов могут появиться на карте приключений в произвольных местах. Фраза «Астрологи объявили неделю…» стала крылатой. Также возможно наступление месяца чумы, когда всё ненанятое население городов сокращается вдвое, хотя, как показывает практика, месяца чумы довольно легко избежать: достаточно загрузить автосохранение предыдущего дня и совершить какое-нибудь действие (нанять побольше существ или переместить героя).
Игровые режимы
Если не учитывать особые ивенты и дружеские схватки, все битвы в игре влияют на количество кубков и получаемых предметов. Сейчас доступны следующие ПВП-режимы:
- Захват кристаллов. Командное сражение для команд по 3 человека. Целью является сбор особых кристаллов, а не убийство противников.
- Столкновение. Оно подразделяется на одиночное и парное. По правилам близко к королевской битве. Столкновение лучше всего подходит для получения кубков.
- Броуболл. Это урезанная версия футбола, в которой нужно забивать голы.
- Ограбление. Обе команды являются и защитниками, и грабителями. Вам нужно взорвать чужой сейф и при этом защитить свой.
- Горячая зона. Для получения очков нужно удерживать контрольные точки.
- Награда за поимку. Это командная схватка. Каждое убийство приносит очки, а победителем станет тот, у кого больше поинтов.
- Осада. Похожа на Ограбление, однако здесь достаточно просто уничтожить базу.
Сила, броня и магическая защита
Милишники в игре Dota 2 – это герои, которые сражаются в ближнем бою и обладают высокой выносливостью. Они имеют увеличенный показатель силы, который влияет на их урон и жизненную энергию.
Сила – это одна из основных характеристик милишников. Чем больше сила у героя, тем больше его максимальная жизненная энергия (хиты) и физический урон. Некоторые герои могут иметь способности, которые зависят от уровня силы, например, урон в зависимости от количества силы.
Броня – это показатель защиты милишника от физического урона. Чем выше броня, тем меньше урона герой получает от физических атак противников. Броня выражается в показателе «Armor», который можно увидеть в характеристиках героя. Увеличение брони происходит путем покупки предметов или использования способностей, которые увеличивают этот показатель. Даже небольшое увеличение брони может существенно повысить выживаемость милишника в схватке с противниками.
Магическая защита – это показатель, определяющий степень сопротивления милишника к магическим атакам. Чем выше показатель магической защиты, тем меньше урона герой получает от магических способностей противников. Магическая защита может быть повышена покупкой предметов или использованием способностей, которые дают дополнительную защиту от магии.
- Сила влияет на урон и здоровье милишника.
- Броня уменьшает урон от физических атак.
- Магическая защита уменьшает урон от магических атак.
Популярные герои-милишники в Dota 2
В мире Dota 2 милишники — это герои, специализирующиеся на ближнем бою. Они играют важную роль в командных сражениях и могут наносить значительный урон противнику. Некоторые герои-милишники также обладают замедлением врагов или могут контролировать их движение.
Вот некоторые из самых популярных героев-милишников в Dota 2:
- Антимаг — это герой, который может сильно наносить урон магическими атаками и очень эффективен против врагов-магов.
- Легион Командор — он способен вызывать союзников на помощь и обладает сильными атаками. Он также может усилить себя и своих союзников.
- Акс — это герой-танк, способный выдерживать большое количество урона. Он может наносить урон одиночными атаками и замедлять врагов.
- Джагернаут — этот герой обладает сильными атаками, способен исцеляться и наносить большой урон с помощью своего ультимативного умения.
Также стоит отметить, что герои-милишники могут быть особенно полезными в начале игры, когда игроки еще слабы и не имеют достаточно защиты от таких атак. Однако, они также могут быть уязвимыми при сражении с героями-дальниками, которые могут наносить урон на расстоянии.
Игра на героях-милишниках требует хорошей координации с командой и стратегии, чтобы использовать их сильные стороны и минимизировать уязвимости.
Пример команды с героями-милишниками
Позиция
Герой
1
Антимаг
2
Легион Командор
3
Акс
4
Джагернаут
5
Поддержка
Как играть классом милишников в Dota 2?
Милишники в Dota 2 – это класс героев, основная задача которых заключается в нанесении максимального урона противнику в ближнем бою. Играя за этот класс, необходимо помнить о следующих вещах:
Контролирование карты – это одно из самых важных действий для милишников. Без знания расположения противников на карте рискуете попасть в ловушку.
Понимание своих сил – это нужно проводить как до начала игры, так и в ходе игры
Что умеет ваш герой, какие навыки и способности использует для атаки, и на каких героев стоит обратить внимание первыми при ближнем бою.
Сотрудничество с командой – это ключ к победе на любом основном классе героя. В составе команды милишникам надо находиться в переднем ряду и держать врага под прицелом, устроив ему угрозу в любой момент.
Игра за милишника в Dota 2 – это непрерывные сражения. Необходимо уметь маневрировать на поле битвы, выбирать момент подхода к противнику и стратегически использовать свои умения и способности, чтобы нанести максимальный урон и не попасть в засаду врага.
На кого стоит обратить внимание в Dota 2?
Легионовый командир
Легионовый командир — это герой, в первую очередь предназначенный для игроков-милишников. Он может наносить большой урон в ближнем бою и изгонять из игры вражеских героев. Кроме того, он обладает способностью получать дополнительные бонусы после каждого убийства.
Антимаг
Еще одним популярным героем для милишников является Антимаг. Он обладает уникальной способностью, позволяющей ему поглощать ману у врагов, что значительно ослабляет их возможности в бою
Однако его слабостью является нехватка здоровья, поэтому важно умело использовать его перемещение на короткие расстояния, чтобы избегать нападения врага
Бревнар
Бревнар — это герой, способный создавать и контролировать иллюзии. Он может создавать собственных копий врагов и использовать их в своих интересах. Это позволяет ему ослаблять противника и избегать нападения вражеских героев.
Важно помнить, что ни один герой не может обеспечить победу в одиночку. Для того чтобы стать успешным милишником, необходимо уметь комбинировать свои способности и действовать в команде
Играйте в команде, учитесь друг от друга и развивайтесь вместе!
Для того чтобы стать успешным милишником, необходимо уметь комбинировать свои способности и действовать в команде. Играйте в команде, учитесь друг от друга и развивайтесь вместе!
Механика игры
В Brawl Stars вы будете управлять одним из бойцов, которые готовы сражаться на арене. У каждого героя есть уникальные способности и гаджеты, поэтому геймплей будет отличаться. Первым бравлером, выдаваемым новичку, является Шелли. Она пользуется дробовиком и подходит для всех базовых игровых режимов.
В матчах перед игроком стоят разные задачи, например:
- Убить команду врага.
- Собрать больше очков.
- Захватить кристаллы.
- Взломать чужой сейф и сохранить свой.
Независимо от режима, вам нужно постоянно следить за характеристиками бравлера, чтобы не погибнуть и быть максимально эффективным в сражении. Среди них наиболее важными является заряд суперспособности и здоровье. Первая шкала заполняется за нанесение урона, убийства и выполнение заданий, а вторая восстанавливается, если на несколько секунд выйти из сражения. Регулярно проверяйте количество очков ХП, чтобы не погибнуть и пользуйтесь укрытиями, где можно перевести дыхание.
Суперспособность
Уничтожая противников, вы быстро зарядите суперспособность, которая активируется нажатием на желтую кнопку. Чтобы правильно использовать ее, вам нужно учесть цель (это может быть враг или область), зажать контроллер и прицелиться. Большинство умений используются для:
- Убийства противников. Это основное предназначение 70% спеллов. После подготовки персонаж выпускает мощные заряды, которые могут шотнуть врага.
- Быстрого перемещения. Такие умения помогают быстро сократить или разорвать дистанцию.
- Поражения территории. Некоторые суперспособности действуют в АОЕ, поэтому вражеская команда не сможет пройти. Они наиболее эффективны в режимах «Ограбление» и «Броубол».
Звездная способность
Когда вы персонаж получит девятый уровень, у него откроются ячейки для звездных способностей. Это особые пассивные навыки, которые повышают силу бравлера при выполнении каких-то условий. «Звезды» выпадают из ящиков. У каждого героя есть 2 слота для умений, например, Шелли имеет:
Контузия |
Суперспособность замедляет врагов на 3 секунды. |
|
Аптечка |
Раз в несколько минут Шелли может восстановить 1800 здоровья, если уровень ХП падает до критических 40%. |
Популярные милишники в Dota 2
В игре Dota 2 есть разные роли и герои, но особую роль играют милишники. Такие герои, как Антимаг, Легион Командир, и Хаос Рыцарь, не боятся ближнего боя и способны нанести огромный урон своим врагам.
Самая популярная милишник в Dota 2 — Антимаг. Он является идеальным выбором для игроков, которые предпочитают стремительные и агрессивные игры. Антимаг наносит мощные физические удары, и его основной скилл — «Манабрасание» — позволяет ему отнимать ману у противников, что делает его еще более сильным в длительных схватках.
Еще один популярный милишник в Dota 2 — Легион Командир. Он обладает способностью вызывать дуэли, при которых он сталкивается лицом к лицу с одним из противников. Во время дуэли Легион Командир получает усиленные атаки и имеет шанс убить своего противника. Эта способность делает его очень опасным героем в одиночных сражениях.
Кто-то предпочитает хаотичный и непредсказуемый стиль игры, и для этого идеально подходит Хаос Рыцарь. Он может превращаться в мощного врага с помощью своей суперспособности «Полный хаос». В этом состоянии он становится невероятно сильным и способен претворить в жизнь самые безумные тактики.
Все эти герои имеют свои особенности и требуют от игроков определенных навыков. Они являются незаменимыми участниками команды и с большой уверенностью могут открывать путь к победе в матчах.
Антимаг
Антимаг – продвинутый герой, требующий от игрока хорошей реакции и навыков управления. Его главной особенностью является возможность блокировать магические атаки своим умением «Блок магии». Это позволяет ему выживать в драке с героями, которые полагаются на заклинания, такие как магическая почка или огненный шар.
Кроме того, Антимаг способен преследовать и уничтожать героев, использующих ману. Он обладает умением «Оковы маны», которое наносит урон противнику, основанный на его запасе маны. Таким образом, он может быстро обезоружить противника и доставить сокрушающую победу.
Антимаг – это герой, полностью оправдывающий своё название. Он наносит критический урон противникам, зависящим от маны, и может устранять магические заклинания, способные причинить ему вред. Если вы хотите справиться с героями, которые полагаются на заклинания, Антимаг станет вашим лучшим союзником в Dota 2.
Легион командира
Кто такие милишники в Dota 2?
Милишники в Dota 2 – это одна из ролей, которую игроки могут выбрать перед началом матча. Они отличаются от других ролей тем, что сражаются в ближнем бою, а не издалека. Милишники играют важную роль в команде, так как они способны с толпой противников справиться лучше всего.
Легион командира в Dota 2
Легион командира – это один из героев, который является отличным милишником в Dota 2. Этот герой обладает способностями, которые позволяют ему эффективно сражаться в ближнем бою и наносить большой урон противникам.
Легион командира имеет особую способность – «Duel» (дуэль). С помощью этой способности герой может выбирать одного противника и сражаться с ним один на один, игнорируя всех остальных противников. Другие герои не могут помочь своему товарищу или противнику во время дуэли между Легион командира и его противником.
Кроме того, Легион командира обладает навыками, усиливающими его атаку и защиту, а также способностями, которые могут сыграть важную роль в схватке с противником.
В целом, Легион командира – это мощный милишник, который может быть очень эффективным на поле битвы.
Аксиар
Аксиар — это герой, который обладает сильным физическим уроном и хорошей выносливостью. Он обладает уникальными способностями, которые помогут ему в битвах. Одним из таких способностей является «Кнут и зубы», которая позволяет Аксиару наносить больше урона врагам с каждым ударом.
Кроме того, у Аксиара есть способность «Молот и щит», которая позволяет ему наносить урон нескольким врагам одновременно и становиться более устойчивым к атакам врагов.
Аксиар — это герой, который отлично подходит для игры в первых линиях, так как он может наносить сильный урон и выдерживать атаки противника. Он может быть очень полезен в командных боях и поединках один на один.
Так что если вы ищете героя, который может нанести сильный физический урон врагам и выдерживать их атаки, то Аксиар — это именно то, что вам нужно в мире Доты 2.
Особенности защиты в Pathfinder: Wrath of the Righteous
Для того, чтобы начать разговор о Танках, следует сначала определиться с тем, как в игре работает параметр Защита, ключевой для бойцов данного типа.
Защита в игре решает не то, насколько сократится урон при попадании по герою (для этого есть другие эффекты), а то, попадут ли по нему вообще.
Защиту можно разделить на три типа:
- Мягкая защита — в основном уклонение. Вы теряете её, когда лишаетесь бонуса к ловкости по одной из трёх причин: противник скрыт от вас (из-за невидимости, маскировки или ослепления персонажа), вы ограничены в движении (паралич и т.п.), вас застали врасплох. Первое решается линией Черт под названием «бой вслепую» (всего три черты). Второе – наличием эффекта «свобода движения», в основном создаваемым одноимённым заклинанием или высокими спасбросками для сопротивления эффекту. Третье может происходить только один раунд в начале боя, в большинстве случаев решается просто: инициируйте бой сами. Первое и третье может быть решено классовой способностью «Невероятное Уклонение», доступной некоторым классам.
- Жёсткая защита — щит, доспех и натуральная броня. Такая защита обходится «атаками касания», будь то окутанная молниями рука или струя кислоты. Это решается некоторыми классовыми способностями, и, ограниченно (только на доспех) заклинаниями, но в целом, такая защита уступает Мягкой, да ещё и обвешивает ваши навыки штрафами за броню… Но есть один несомненный плюс «жёсткой» защиты — ее банально проще получить.
- Универсальная защита — будь то бонус отражения, сакральный бонус или бонус удачи, все они работают всегда и против всего, но их (за исключением бонуса отражения) довольно сложно получить.
Однако защита спасает персонажа только от попадания по нему, будь то удар оружием или какая-нибудь сверхестественная способность… Но что если врагу не надо точно попадать по вам, чтобы навредить? Атаки по площади, невидимые проклятия, ментальные вторжения — против всего этого работают спасброски, позволяя избежать эффекта полностью или частично. Второе чаще всего применяется при нанесении урона — даже при успешном прохождении спасбросков герой всё равно получает половину, если у него нет особых черт.
Спасброски делятся на Волю (зависит от мудрости), Стойкость (зависит от Выносливости) и Реакцию (зависит от Ловкости). Если обобщать, то Воля влияет на способность противостоять атакам на разум, Стойкость противостоит атакам непосредственно на ваше здоровье (яды, болезни, оглушение, некоторая часть магии и т.п.), а Реакция позволяет уворачиваться от атак по площади.
Немного цифр
Крайне маловероятно, что в игре вы столкнетесь с показателем атаки выше 44-х, это буквально показатель оптимизированного под атаку воина, на которого наложен бардовский бафф. Соответственно, 63 защиты будет более чем достаточно (64 — это все равно 20 на кубе, то есть автопопадание, так что очко можно сэкономить).
Максимальная сложность спасброска на которую стоит рассчитывать — 37. Это сложность избегания заклинания девятого круга от Зимней Ведьмы с максимально раскачанной заклинательной характеристикой и всеми чертами на увеличение сложности (то есть заклинание относится к любимой школе и любимой стихии атакующего) при лежащем на вас Сглазе. Соответственно, если у вас Спасбросок +35, то вы почти наверняка его пройдете (1 — всё равно автопровал, так что куб должен прибавить минимум 2).. Но на самом деле для большинства угроз в игре более чем достаточно и спасброска на десяток меньше.
Воин
Краткое описание класса: классический мечник, Воин – класс, встречающийся практически в каждой ролевой игре. В Black Desert класс «Воин» довольно каноничен, это классический рыцарь в доспехах с мечом в одной руке и щитом в другой.
Самая распространенная роль Воина – это танк, который может принять на себя огромное количество урона, оставаясь при этом невредимым.
Однако и собственный урон данного класса довольно высок, а самое главное «оружие» воина в Black Desert, помимо меча и щита – это наличие большого количества способностей контроля. За счет захвата, опрокидывания и оглушения Воин – очень опасный противник в PVP, в дуэли с которым необходимо постоянно быть начеку, ведь стоит только подпустить его на опасно близкое расстояние – и выйти из длительного стана живым может уже не получиться.
Для любителей PVE у Воина также есть приятные способности с огромным AOE-уроном, которые позволяют быстро и очень эффективно фармить монстров большими группами, практически не получая урона. Великолепно справляется мечник с единичными «толстыми» целями — элитными чудовищами и боссами – опять же, за счет своего отличного контроля и высокой стойкости к повреждениям.
Основное оружие / дополнительное оружие / пробужденное оружие: меч / щит / двуручный меч
Тип атаки:
Общее впечатление от игры за класс «Воин» в Black Desert (на основе собственного опыта, отзывов и обзоров): класс получился сбалансированным и приятным для игры, вполне имеющим право на жизнь. Немного слабовато Воин показывает себя в начале игры, однако с получением 35-40 уровня он начинает открываться с новой стороны, приобретает отличные способности для фарма. С появление пробужденного оружия (56 уровень) Воин и вовсе превращается в настоящую машину для убийств с роскошным уроном и красивой анимацией.
Из личных ощущений – Воин в Black Desert немного скучноват. Для тех, кто поиграл в достаточное количество MMORPG-игр и жаждет новых ощущений, Воин не принесет драйва и всплеска эмоций. Невысокая мобильность и некоторая однотипность атак мечника может несколько надоесть. А из-за его слабости на начальных уровнях игры выкачать хорошего «играбельного» Воина – довольно непростая задача, требующая терпения и неподдельной любви к этому классу и такому стилю игры.
Для кого подойдет Воин
- для начинающих игроков, которые предпочитают прямой и открытый стиль боя;
- любителям «танковать», выступать защитой для своих союзников и согильдейцев;
- ценителям двуручных мечей – правда, для этого придется прокачать персонажа до 56 уровня.
Гайд: http://xgames-online.ru/blog/gajdy/gajd-voin-v-igre-black-desert.html
Тактика игры милишником
Этот бронемобиль эффективен только при непосредственном контакте с противником. Он должен быть достаточно быстрым, чтобы суметь догнать более медленного неприятеля, даже если тот улепетывает по прямой. Достичь этого можно установкой двигателя, увеличивающего скорость.
При этом милишник слаб против любого огнестрельного или энергетического оружия, в том числе дробовиков. При открытом столкновении с таким противником ваша задача — быстрее сократить дистанцию и начать наносить ему урон. Эффективнее всего милишник работает, если заедет к жертве сбоку или сзади. Многие бронемобили собираются для противостояния в лобовой атаке, но с боков и флангов они не защищены.
Единственные, с кем лучше не связываться — ховеры. При сборке милишного бронемобиля контактные орудия ставятся как можно ниже, чтобы в числе прочих деталей отпилить и колеса. Если и ваш бронемобиль низкий, неповрежденный ховер вы попросту не достанете.
Также лучше не трогать танков на гусеницах «Голиаф», разве что вы поймали отбившегося от группы неприятеля. Эти гусеницы слишком прочные, и распиливать их придется долго. За это время к противнику может прийти подмога.
Милишник-танк — довольно редкая сборка, но она тоже попадается. При использовании тяжелой кабины можно нацепить очень много брони, но такой бронемобиль становится чрезвычайно медленным. В этом случае нужно ставить гарпун, чтобы подтягивать более легких противников поближе к себе.
Принципы работы защиты
Броня работает по принципу: 1 единица брони = 1.3% понижения урона. В сумме 12 брони дают 15.6% понижения общего урона.
Стихийный резист работает по принципу: 1 единица резиста = 1% понижения урона. 20 единиц дают нам защиту от конкретной стихии в 20%
По определённым причинам мы не рассматриваем защиту, которую даёт оружие дальнего боя и ближнего. Однако запомните, что судя по всему бафф существенный, особенно это заметно на стрелках, когда их жизнь обрывается спустя один удар. Этим классам рекомендуется больше вложиться в защиту, чем милишникам. К примеру, чаще использовать адамантовые зёрна вместе с мега бронированной кожей.
Карта милишников
Милишники – это игровой персонаж в Доте 2, который относится к типу героев, использующих ближний бой. На карте игроки могут найти несколько мест, где можно определить позицию милишников. На карте эти места отмечены знаками, которые подсказывают игрокам, где ожидать милишников.
Места появления милишников на карте игры могут быть различными, и они зависят от уровня игры и времени, которое прошло с начала игры
Каждый тип милишников имеет свои уникальные особенности, и это важно знать, чтобы лучше понимать игровую механику
На карте игры очень важно знать расположение милишников, так как это даст игрокам большое преимущество. Например, если игроки знают, где появятся милишники, они могут с легкостью собирать опыт и золото, что позволит им быстрее прокачаться и сильнее стать в ближнем бою
Таким образом, карта милишников имеет огромное значение в Доте 2, и игрокам, которые стремятся стать мастерами игры, необходимо хорошо запомнить все места появления милишников, чтобы использовать их в свою пользу.
Улучшение Эпохального ключа
- Если по завершению прохождения, времени на таймере оставалось менее 20% (например, осталось меньше 6 минут из 30), ключ улучшится на 1 уровень
- Если по завершению прохождения, времени на таймере оставалось более 20%, но менее 40% (например, осталось меньше 12 но больше 6 минут из 30), ключ улучшится на 2 уровня
- Если по завершению прохождения, времени на таймере оставалось более 40% (например, осталось больше 12 минут из 30), ключ улучшится на 3 уровня
- Улучшение на 1 уровень: Тайник претендента (уровень вещей = уровню подземелья)
- Улучшение на 2 уровня: Тайник претендента (уровень вещей = уровню подземелья), Несравненный тайник претендента (уровень вещей = уровень подземелья + 2)
Игроки, персонажи, враги — о боже!
До этой главы мы рассматривали весьма стандартные игровые компоненты. Все эти компоненты — графический движок, система управления объектами и скрипты — очень легко поддерживать. Теперь ситуация может показаться тупиковой, поскольку формирование персонажей может быть как легким, так и трудным, в зависимости от вашей игры.
Вы должны работать с персонажем игрока (который для краткости будет называться PC, player character), который находится под управлением игрока, независимыми персонажами (их называют NPC, non-player character), которые ходят вокруг, населяя мир, и ведут собственную жизнь, и врагами (называемыми MC, monster character), которые только и хотят убить вас.
В этом разделе я познакомлю вас с различными темами, которые помогут вам проектировать и определять игровых персонажей, включая управление ими, их умения и особенности.
ПРИМЕЧАНИЕ
Персонаж игрока (player character) — это альтер-эго игрока. Независимые персонажи — это персонажи, над которыми игрок не имеет непосредственного контроля. Часто NPC — это горожане, торговцы, банкиры, лекари и враги. Да, даже враги являются NPC, но в этой книге я провожу четкое различие между NPC и MC. NPC не атакуют игрока, а MC — атакуют.
Поговорим о затруднениях! Как обрабатывать каждый крошечный аспект этих типов персонажей? Вы можете сначала разбить эти аспекты на следующие категории, а затем определить, как обрабатывать каждую из них:
Определение. Используя набор правил, вы определяете все, что данный персонаж может совершать в игре. Эти правила должны точно определять, что персонаж в состоянии сделать. Определение персонажа включает его способности (такие, как сила и проворность) и графическое представление персонажа (например, в виде трехмерной сетки).
Перемещение. Персонажи должны быть способны перемещаться по миру, пешком, на лошади или на самолете.
Общение. Персонаж игрока взаимодействует с персонажами других игроков и с независимыми персонажами, разговаривая с ними или общаясь другим способом. Ход вашей игры может измениться от одного произнесенного слова а история может постоянно развиваться по шаблонам разговоров.
Управление ресурсами
Управление ресурсами очень важно в ролевых играх. У вас есть имущество персонажа, в которое входят доспехи, оружие, эликсиры, ключи и все прочее, что персонаж может положить в свои виртуальные карманы
Эти предметы, конечно, надо использовать в какой-то из моментов игры, и задача персонажа — определить, как применять каждый из объектов. Заклинания и магия также попадают в эту категорию.
Сражения. Сражения — это средство избавления мира от злодеев, которые являются NPC или другими PC, дающее вашему персонажу шанс увеличить свои опыт и силу. Помните, что главный элемент ролевой игры — взять здорового, крутого персонажа и сделать его еще здоровее и круче!
Развитие персонажа. Как я только что упомянул, цель типичной ролевой игры состоит в непрерывном увеличении силы и опытности вашего персонажа, чтобы они подготавливались к более сложным уровням вашей игры. По мере увеличения опыта персонаж получает новые умения, силы, заклинания и возможности.
Действия персонажа. Персонажи игры могут многое. Они могут ходить, атаковать, произносить заклинания, использовать предметы и многое другое. Каждому действию, которое может выполнять персонаж, должно соответствовать графическое представление, например, в виде отображаемой на экране трехмерной сетки.
<?LI>
Определение персонажей в вашей игре
Развертывание персонажей в вашей игре — одна из наиболее трудных работ, с которой вы встретитесь. Даже на базовом уровне код, необходимый для управления игровыми персонажами, может быть весьма замысловатым. Что же делать скромному программисту? Не торопясь начать работу с самого начала, и все будет хорошо.
В этом разделе я познакомлю вас с несколькими базовыми концепциями, общими для большинства ролевых игр. Эти концепции включают определение базовых способностей персонажа (включая его силу, ум, проворство и т.д.), как персонаж перемещается по игровому миру и как персонажи могут взаимодействовать между собой. Давайте для начала посмотрим, как можно определить способности персонажа.
Способности персонажа
Персонажам нужны различные способности, влияющие на результаты происходящих в игре действий, например, сражений. Если персонаж выхватывает меч, каков шанс, что он попадет в намеченную цель и, если это произошло, какой ущерб нанесет меч?
Типичная ролевая игра присваивает способностям числовые значения — чем больше значение, тем лучше персонаж в терминах конкретной способности. Использование чисел также упрощает вычисления. Например, типичная способность в ролевой игре — сила. Скажем, сила измеряется от 0 (хиляк) до 999 (супергерой). Тогда у среднего человека сила должна находиться в диапазоне от 100 до 150.
Сделаем следующий шаг и предположим, что персонаж должен обладать определенной силой, чтобы выполнить какое-то действие. Например, выбивание заклинившей двери требует, чтобы сила человека была 100 или больше. Подъем огромного булыжника требует силы 500. Улавливаете идею?
Какими еще способностями должен обладать персонаж? Это важный для вашей игры вопрос, так что тщательно обдумайте его. Что будет происходить в вашей игре требующее назначения способностей персонажу? В общем случае можно начать со способностей, показанных в таблице 12.1.
Таблица 12.1. Способности персонажа
Способность | Описание |
Атака | Количество повреждений, которое может наносить персонаж. Значение атаки базируется на том, сколько повреждений может нанести персонаж голыми руками, но добавление оружия увеличивает значение атаки (в зависимости от типа оружия) |
Защита | В полном комплекте доспехов вы чувствуете себя неуязвимым, но когда на вас только джинсы и футболка вы беззащитны. Защита определяет уровень вашей уязвимости — чем больше значение, тем меньше наносимый вам ущерб. У каждого персонажа есть природная защита, будь это кожа или панцирь. Использование брони или других элементов экипировки увеличивает защиту |
Проворность | Способность быстро и ловко перемещаться. Проворный персонаж быстрее передвигается и даже может легко уклониться от атаки |
Интеллект | Способность персонажа контролировать свой разум. Полный контроль над разумом необходим для произносящих заклинания магов и подобных персонажей. Чем выше интеллект, тем больше шансов, что произнесенное персонажем заклинание поразит намеченную цель |
Сопротивляемость | Защита помогает уменьшить физический вред от физических атак, а сопротивляемость уменьшает вред от магических атак. Чем выше сопротивляемость, тем меньший ущерб наносят вам заклинания. Стопроцентная сопротивляемость делает персонаж невосприимчивым к магии! |
Меткость | Некоторые персонажи хорошо целятся, у других это вызывает затруднения. Меткость персонажа определяет насколько успешно он поражает намеченную цель во время атаки. Эта способность увеличивается или уменьшается в зависимости от типа используемого оружия или другой экипировки |
Каждой способности в вашей игре назначается числовое значение, и каждая способность по-разному использует это число. Атака — это количество повреждений, наносимых невооруженным персонажем. Если ее значение 100, персонаж атакуя может нанести до 100 очков повреждений. Здесь позвольте мне сказать, что персонаж может получить достаточно много очков повреждений, прежде чем погибнет.
СОВЕТ
Чтобы игра была интереснее можно использовать некий уровень повреждений, когда слабый персонаж атакует хорошо защищенного, не имея возможности причинить ему ущерб. Позже, в разделе «Сражения и персонажи», вы увидите, как модифицировать способность атаковать у слабого персонажа, чтобы он мог нанести какие-то повреждения персонажу с высокой способностью защищаться.
Защита, с другой стороны, сокращает количество повреждений, получаемых при атаке. Если у персонажа значение защиты 50, количество получаемых при атаке повреждений уменьшается на 50 очков, так что чем лучше защита, тем меньше ущерб.
Вы можете изменять способности атаки и защиты с помощью предметов. Отдельные предметы, такие как оружие, имеют собственные значения, которые добавляются к значению атаки персонажа (снова, чтобы больше узнать об этих модификаторах, обратитесь к разделу «Сражения и персонажи»).
В терминах проворности, у персонажа есть врожденный шанс уклониться от атаки, который увеличивается по мере того, как персонаж становится сильнее. Проворность измеряется от 0 до 999 — чем больше значение, тем выше шанс уклониться от атаки. Чтобы определить шансы уклонения от атаки берется случайное число и сравнивается со значением проворности. Если случайное число меньше или равно значению способности проворства, персонаж уклонился от атаки.
Способности интеллекта находятся в диапазоне от 0 и выше. Интеллект определяет шансы того, что заклинание достигнет своей цели. У заклинания есть собственные шансы на успех, но когда вы добавляете способности интеллекта, шансы увеличиваются. Если заклинатель имеет значение интеллекта 100, у заклинания на 100 процентов больше шансов сработать.
Сопротивляемость — это способность персонажа уменьшать ущерб, наносимый заклинаниями. Значение находится в диапазоне от 0 до 100 процентов. Процент применяется к количеству наносимых заклинанием повреждений и результат используется как итоговое значение наносимого персонажу ущерба.
И, наконец, меткость — эта способность измеряется числом в диапазоне от 0 до 999. Снова случайное число сравнивается со значением меткости; если случайное число больше значения способности, значит атака не попала в цель.
Помимо способностей в описании персонажа должна присутствовать и другая информация — например, здоровье игрока. Здесь необходимо знать несколько дополнительных деталей о каждом персонаже, чтобы определить, насколько он здоров и силен. Встречайте атрибуты персонажа.
Атрибуты персонажа
Атрибуты персонажей похожи на способности, за исключением того, что атрибуты определяют различные параметры персонажа. Физическое здоровье — это атрибут; от его изменения зависит, сколько ран может выдержать персонаж. Эти раны могут быть вылечены и в таком случае здоровье персонажа увеличивается.
В игре требуется всего несколько атрибутов. В таблице 12.2 описаны четыре атрибута, которые я буду использовать в этой главе.
Таблица 12.2. Атрибуты персонажа
Атрибут | Описание |
Здоровье | Здоровье персонажа может находиться в диапазоне от нуля и выше. Чем больше значение, тем больше ранений может вынести персонаж. Нулевое значение означает, что персонаж мертв |
Мана | Мана определяет количество магической энергии, имеющейся в запасе у персонажа. Каждое заклинание требует определенного количества маны, расходуемого при каждом произнесении |
Очки опыта | Достаточно часто способности и атрибуты персонажей увеличиваются. Уровни опыта — это ступени увеличения. Уровень опыта определяется по количеству очков опыта, как будет показано позже в разделе «Увеличение опыта и силы» |
Уровень опыта | Достаточно часто способности и атрибуты персонажей увеличиваются. Уровни опыта — это ступени увеличения. Уровень опыта определяется по количеству очков опыта, как будет показано позже в разделе «» |
Здоровье персонажа измеряется в очках здоровья (health points, HP), а мана измеряется в очках маны (mana points, MP). MP нужны персонажу для произнесения заклинаний. Каждый раз при произнесении заклинания тратится определенное количество MP; если маны недостаточно, заклинание не может быть произнесено.
Опыт и уровни опыта позволяют игрокам следить за прогрессом и увеличением силы их персонажей. Опыт относится только к персонажам игроков и обсуждается в разделе «» далее в этой главе.
Дополнительные статусы персонажа
Способности и атрибуты замечательно описывают возможности персонажа. Конечно, эти способности и атрибуты описывают персонаж на пике его возможностей. Персонажа могут преследовать болезни, делающие его слабее или сильнее. Персонаж может быть отравлен или зачарован, из-за чего он станет неповоротливым.
Эти дополнительные статусы магические по своей природе и помогают повернуть ход игры в критических точках. В таблице 12.3 перечислены некоторые дополнительные статусы, используемые во многих играх (и в этой книге), и описано действие, производимое ими на персонажа.
Таблица 12.3. Дополнительные статусы и их действие
Статус | Эффект |
Отравление | Отравление медленно уменьшает здоровье персонажа, пока не будет принято противоядие. В этой книге отравленный персонаж теряет два очка здоровья каждые четыре секунды |
Сон | Спящий персонаж ничего не может делать, пока не проснется. Разбудить спящего может удар другого персонажа, или придется ждать, пока эффект не пройдет сам (с 4-х процентной вероятностью) |
Паралич | Парализованный персонаж ничего не может делать точно так же, как и спящий. Но парализованный персонаж может снова начать двигаться только если кто-то снимет с него заклятье или эффект не пропадет сам (с двухпроцентной вероятностью) |
Слабость | Способности к атаке и защите у ослабленного персонажа уменьшаются наполовину |
Усиление | Способности персонажа к атаке и защите увеличиваются на 50 процентов |
Зачарованность | Сопротивление к магии у зачарованного персонажа снижается наполовину |
Барьер | Сопротивляемость защищенного магическим барьером персонажа увеличивается на 50 процентов |
Ошеломление | Ошеломленные персонажи теряют половину интеллектуальных способностей, пока не пройдет ошеломление |
Неуклюжесть | Проворность неуклюжих персонажей уменьшается на 25 процентов; это уменьшает возможность уклоняться от физических атак |
Устойчивость | Твердо стоять на ногах — вот значение этого статуса, и у таких персонажей проворность увеличивается на 50 процентов |
Замедление | Обычно у персонажа есть установленная скорость перемещения (измеряемая в блоках за секунду), но у замедленных персонажей эта скорость наполовину уменьшается |
Ускорение | Увеличивает скорость перемещения персонажа на 50 процентов |
Слепота | У ослепленного персонажа на 25 процентов больше шансов промахнуться мимо цели при атаке |
Орлиный глаз | Персонажи с орлиным глазом на 50 процентов чаще попадают в цель при атаке |
Немота | Немые персонажи не могут произносить заклинания, пока заклинание не будет снято |
Как видите, отдельные статусы помогают персонажам, а не мешают им. Позднее в разделах «Функции заклинаний» и «Использование правил битвы для атаки» вы увидите как внедрить эти статусы в ваш проект.
Классы персонажей
Персонажи бывают всех форм и размеров — большие, маленькие и даже белые и пушистые. Факт в том, что некоторые персонажи имеют различные атрибуты, делающие их особенными.
Для каждого отдельного типа персонажей в вашей игре есть класс персонажей. Вы можете думать о классах персонажей как о способе распределения персонажей вашей игры. Если взглянуть глубже, классы могут определять конкретные типы персонажей в деталях.
Классифицировать персонажа только как человека недостаточно. Вместо этого подходящей классификацией в ряде случаев могла бы быть — человек-воин. Это применимо ко всем персонажам. Например, вы можете классифицировать дракона как ледяного дракона, огненного дракона, каменного дракона и т.д.
Причины необходимости определения класса коренятся в проекте вашей игры (обратитесь к главе 11, «Определение и использование объектов», за дополнительной информацией об использовании классов по отношению к предметам и персонажам). Предметам в вашей игре назначена переменная использующего их класса, состояние которой определяет, какие классы могут воспользоваться конкретным предметом. Широкий меч может быть на вооружении только у персонажа, являющегося человеком-воином или гномом, а свиток с заклинаниями может использовать только класс магов.
Классы персонажей вступают в игру также при обработке сражений. Отдельные виды атак, будь они физические или магические, могут сильнее или слабее действовать на отдельные классы персонажей. Возьмем, к примеру, заклинание огненного шара. Поскольку оно базируется на огне, оно может наносить больший ущерб ледяным монстрам, чем огненным (фактически, оно может даже лечить огненных монстров).
Классы персонажей назначаются по номерам и полностью зависят от вашего проекта.
Действия персонажей
С каждым персонажем вашей игры связан набор действий, которые этот персонаж может выполнять, а с каждым действием связана анимация, воспроизводимая на экране. Размахивание оружием, произнесение заклинаний или разговор с другим персонажем — все это действия и ваша задача определить, какие именно действия смогут выполнять персонажи вашей игры.
Каждое действие в игре производит какой-то эффект. Ходьба перемещает персонаж, а атака приводит к выхватыванию оружия и определению кого или что надо ударить. Внутри программы имеет место только эффект; вне ее игрок видит графическую анимацию для представления действия. В таблице 12.4 показаны действия, которые я реализую в этой книге.
Таблица 12.4. Действия персонажа
Действие
Описание
Атака
Размахивая оружием, персонаж набрасывается на другого персонажа, находящегося перед ним. В этой книге реализован только один тип атаки, но в своей игре вы можете добавить другие типы атак.
Произнесение заклинания
Демонстрируется древнее искусство магии, когда персонаж выполняет небольшие ритуалы с целью вызвать разрушающее или исцеляющее заклинание
Перемещение
Ходьба, полет, бег — все это способы перемещения по вашему игровому миру. Вашему персонажу необходим стандартный метод передвижения, и в этой книге таким методом будет ходьба
Ожидание
Когда персонаж стоит, он находится в ожидании. Персонаж может выглядеть скучающим, настороженным или постоянно озираться вокруг, но, независимо от того что он делает, его считают ожидающим
Использование предмета
Когда персонаж решает начать использовать какой-нибудь из собранных им предметов, начинается действие этого предмета
Разговор
Общение с игровыми жителями — это действие разговора
Игроки хотят, чтобы их персонажи не стояли при этом неподвижно, а показывали, как они взаимодействуют друг с другом — двигали руками, шевелили губами или что-нибудь другое
Ранение
Персонаж, задетый атакой, неважно магической или физической, обычно требует несколько секунд на восстановление. Период восстановления называется действием ранения и в это время игрок не может выполнять никакие другие действия
Смерть
Получив достаточное количество повреждений персонаж умирает
Однако недостаточно просто умертвить его; удаление персонажа из игры сопровождается драматической анимацией гибели
Некоторые действия могут выполняться только в заданное время. Возможно, персонажи не могут атаковать во время последовательности перемещений, оставляя боевые действия для отдельной боевой последовательности. Даже когда эти действия могут исполняться возможно наличие других факторов, ограничивающих возможность выполнения некоторых действий.
Возьмем, к примеру, действие атаки. Предположение, что это действие может выполняться в любой момент игры, не означает, что игрок может сидеть и непрерывно рубить. Вы используете ограничивающий фактор, называемый перезарядкой (charge), который задает временную задержку между атаками. Фактически, все действия за исключением ожидания и перемещения не работают во время перезарядки персонажа.
Когда выполняется одно из таких действий, значение заряда персонажа сбрасывается. Затем постепенно выполняется перезарядка, пока персонаж снова не будет в состоянии выполнить другое действие. Скорость увеличения заряда индивидуальна для каждого типа персонажа.
Хотя каждый персонаж игры может выполнять действия, показанные в таблице 12.4, определенные действия могут выполнять только отдельные типы персонажей. Например, только персонажи игроков могут использовать предметы, для врагов это действие недоступно.
Чтобы лучше понять, что каждый тип персонажей может выполнять, давайте более пристально рассмотрим каждый из типов.
Персонажи игроков
Мир вращается вокруг ваших персонажей игроков (PC), поэтому значительная часть разработки игры связана с управлением ими. У персонажей игроков больше всего действий и для них открыто больше всего возможностей. Кроме ранее упомянутых действий персонажей, у PC есть возможность управлять их игровыми ресурсами, в которые входят предметы и магические заклинания. Кроме того, идет построение персонажа, чтобы сделать его более сильным.
В следующих разделах показан каждый из этих аспектов, вступающих в игру при работе с персонажами игрока.
Передвижение игрока
Наиболее важная способность персонажа игрока — передвижение. В огромном мире значительная часть удовольствия состоит в обследовании всех его укромных уголков. Вы должны дать персонажам игроков как можно больше способов перемещения по миру — ходьба, полет, плавание, телепортация и т.д.
И снова, если вернуться к основам, наиболее важный способ перемещения по миру — ходьба. Каждому персонажу вашей игры назначено значение, определяющее скорость его передвижения, и для игрока, чем быстрее движется персонаж, тем лучше.
Управление ресурсами
Ресурсы — это предметы и объекты, разбросанные по вашему миру. Они делают игру увлекательной.
В главе 11 было рассмотрено создание предметов, но вопросы их использования не были полностью раскрыты. Фактически, предметы бесполезны, если нет кого-то, кто мог бы воспользоваться ими, так что сейчас самое время рассмотреть, как игроки взаимодействуют с этими предметами. Эликсиры можно выпивать, оружие и броню носить, а золото тратить — и все это относится к тому, как проектировать эти предметы (глава 11) и как игроки могут использовать их!
Ресурсы это не только предметы, но и магические заклинания. Заклинания исключительно полезные инструменты, и чтобы сделать что-нибудь в мире ваш персонаж должен изучить столько заклинаний, сколько возможно. Как игрок учит используемые заклинания? Через непрерывное увеличение опыта!
Увеличение опыта и силы
В типичной ролевой игре персонажи могут увеличивать свой опыт — каждое найденное сокровище и каждая выигранная битва увеличивают их способности. Думайте об опыте, как о числе, и чем больше число, тем мощнее ваш персонаж. Когда достигается заданный уровень опыта, персонаж получает дополнительные преимущества.
Например, предположим, что игровой персонаж по имени Джордж только что убил своего тысячного огра. На протяжении своего боевого пути он становился все более и более сильным. Теперь своим мечом он может наносить в три раза больше повреждений, чем в начале приключения. Его физическая сила увеличилась, он стал проворнее и у него больше шансов увернуться от атаки. Увеличились его интеллектуальные способности, и он изучил несколько новых мощных заклинаний.
У персонажей есть очки опыта (experience points) и уровень опыта (experience level). Каждый эпизод увеличивает количество очков опыта персонажа. Через заданные интервалы очков опыта у персонажа повышается уровень опыта. При повышении уровня опыта персонаж получает дополнительные преимущества, которые обычно включают увеличение способностей и заклинания.
В этой книге очки опыта персонажи получают за убийство врагов. Количество получаемых очков закодировано в описаниях персонажей. Убийство глупого мелкого демона может дать вашему персонажу ничтожные 10 очков опыта, в то время как победа над красным драконом двухсотого уровня принесет персонажу колоссальные 20 000! Вы определяете количество опыта, извлекаемого из убийства врагов.
Установка уровней опыта и получаемых преимуществ — это часть работы проектировщика. Персонажу первого уровня может требоваться 500 очков опыта, чтобы достичь уровня 2, а переход на третий уровень может требовать 1 200 очков опыта.
Определяя количество очков опыта, необходимое для конкретного уровня, вы можете использовать в качестве критерия повышения уровня среднее количество опыта, получаемого от убийства врагов в конкретной области игры. Например, если ваш персонаж находится на «демонической пустоши», каждый убитый демон приносит ему 10 очков опыта, и вы хотите, чтобы для перехода на второй уровень игрок убил не менее 20 монстров, это означает, что уровень 2 требует 200 очков опыта.
Помимо дополнительных преимуществ, с увеличением уровня опыта увеличиваются способности и атрибуты. У персонажа увеличиваются максимальные значения очков здоровья и маны; игрок становится сильнее и может нанести больше повреждений. Произносить заклинания становится легче, и с увеличением количества очков маны ваш персонаж может произнести больше заклинаний, прежде чем его силы иссякнут. Что на самом деле будет происходить с персонажем игрока при увеличении уровня, определяется проектом игры. Я не буду слишком углубляться в этот вопрос (но вы увидите, как я увеличиваю способности персонажа при увеличении количества очков опыта в примере игры из главы 16, «Объединяем все в законченную игру»).
Независимые персонажи
Вы обращаетесь с независимыми персонажами во многом так же, как и с персонажами игроков, за исключением того, что они полностью находятся под управлением движка игры. Это различие создает некоторые ограничения для проекта и программные ситуации, и вы должны разработать систему искусственного интеллекта, которая сможет подражать осмысленному поведению.
Пересмотрев относящиеся к персонажам аспекты, вы увидите, что для NPC требуется достаточно мало управления:
-
Перемещение. NPC должны перемещаться по игровому миру, хотя и не так сложно как PC. Это достаточно просто реализовать с помощью скриптов, но остается проблема препятствий ландшафта и взаимодействия с персонажами игроков.
-
Общение. И снова, хотя и не на том же уровне, что PC, NPC должны действовать «по-человечески», и часть этих действий — использование навыков общения.
-
Сражения. Персонажи игроков сражаются в основном с NPC, так что последние должны быть достойными противниками. Даже у самого непритязательного NPC есть навыки самосохранения, и он должен продемонстрировать их при появлении смертельной угрозы.
Другие важные аспекты управления, такие как управление ресурсами, неприменимы к NPC. Предметы, которые несут NPC, записаны в проекте персонажа. Изредка у них есть свобода выбора, что нести или использовать. Также, поскольку игрок не управляет NPC, у них есть разработанная «цельная жизнь», поэтому развитие персонажа не влияет на них.
Мы пока пропустим сражения, поскольку они относятся только к врагам (а не ко всем NPC), и обратим внимание на перемещение и общение, оказывающие значительный эффект на NPC. Эти два действия требуют правдоподобного искусственного интеллекта, чтобы персонажи в игре стали разумными
На самом деле NPC достаточно только выглядеть разумными. Подо всеми внешними наслоениями они следуют небольшому набору инструкций и правил, управляющих их действиями.
Например, созданная Sega популярная игра Phantasy Star Online использует минимум взаимодействий с NPC. Есть несколько лавочников, продающих предметы, банк для хранения денег и других предметов, лечащие раны целители и гильдии, отправляющие вас на поиски. Игровые монстры по многим стандартам просто тупы; они бродят вокруг, пока не увидят персонажа игрока, а затем бросаются на него в атаку. Такой вариант управления NPC замечательно подходит для быстроидущих ролевых игр, но недостаточно хорош для более серьезных игроков.
С другой стороны, такие игры, как Ultima Online от Origin заполнены NPC. Как сравнить эти две игры? NPC в Ultima Online достаточно ограничены в терминах их искусственного интеллекта — они могут только ходить вокруг, следовать за персонажем, оставаться неподвижными, атаковать, лечить, охранять и действовать как банкиры и лавочники. Настоящая магия Ultima Online — используемые NPC скрипты. У каждого NPC может быть присоединенный скрипт, позволяющий NPC выполнять дополнительные действия
Например, разговор с NPC не приведет ни к чему важному, пока игрок не даст NPC специальный предмет, в результате чего NPC завещает игроку магический меч
Каким путем пойти? Если вы хотите сверхсложный искусственный интеллект, пусть будет так, но ваш игровой мир должен быть буквально напичкан сотнями NPC, и чем проще с ними обращаться, тем лучше.
В этой книге я моделирую схему управления NPC из Ultima Online. NPC назначаются определенные движения, и для них разрешено использовать скрипты. Для простоты PC должны взаимодействовать с NPC перед активацией скрипта.
Персонажи врагов
Враги — это скрытые NPC. MC программируются точно так же, как NPC, но обладают двумя дополнительными формами интеллекта — охотой и атакой персонажей игроков.
Враги могут ходить вокруг, следовать за кем-то, укрываться, патрулировать по маршруту и даже стоять неподвижно — точно так же, как и обычные NPC. Однако, когда персонаж игрока попадает в пределы досягаемости атаки MC (физической или магической), начинается игра по правилам. Враг будет последовательно атаковать ближайшего PC, пока этот персонаж не умрет или не покинет пределы досягаемости атак врага.
У врагов есть инстинкт самосохранения. Если враг потерял половину очков здоровья и у него есть возможность произнести исцеляющее заклинание, он попытается вылечиться. Аналогично, если враг заболел, он попытается исправить положение. И, наконец, враг может попробовать улучшить свои параметры, применяя на себя заклинания для установки дополнительных статусов.
Враги — это единственный тип персонажей, на которые игрок может напасть (или должен быть в состоянии напасть). Поскольку PC получает опыт только убивая врагов, вы должны обеспечить наличие в вашей игре необходимого количества врагов.
Графика персонажей
До этого момента мы обсуждали только функциональные возможности персонажа. Действительность заключается в том, что значение имеют только функциональные возможности, но игрокам необходимо какое-нибудь визуальное представление их альтер-эго. Благодаря мощи программ трехмерного моделирования и графическому ядру у вас не будет проблем, касательно графических аспектов ваших персонажей.
Каждый персонаж вашей игры может выполнять конкретные действия. Эти действия (по крайней мере, те, которые используются в этой книге) следующие: ходьба, ожидание, взмах оружием, произнесение заклинания, ранение и смерть. У каждого из этих действий есть отдельная анимация, которая используется совместно с сеткой для создания графического компонента персонажа.
Как вы узнаете в последующем разделе, «Создание класса управления персонажем», сетка каждого персонажа загружается в объект cMesh, а каждая анимация загружается в объект cAnimation. Эти два объекта графического ядра уникальны для каждого персонажа в вашей игре (несколько экземпляров одного и того же персонажа используют только одну сетку и объект анимации). Ваша задача — загрузить эти сетки и анимации и визуализировать персонажи на экране в каждом кадре.
ПРИМЕЧАНИЕ
Две замечательные модели с поддержкой анимации действий находятся на прилагаемом к книге CD-ROM (посмотрите папки \Resources\Models\Yodan и \Resource\Models\Spawn). Мы будем использовать эти сетки в последующих главах. Уделите некоторое время, чтобы загрузить эти модели в MilkShape 3D и посмотреть, как каждая из моделей анимируется, как вы можете модифицировать ее и как можно использовать эти модели и анимации в своих проектах.
Перемещение персонажей
Теперь, когда вы описали персонажей, пришло время поместить их в мир и заставить перемещаться по нему. Здесь вам потребуются отдельные системы управления для PC и NPC. PC являются персонажами, которыми непосредственно управляют игроки, и у них больше возможностей.
Если вы смотрели демонстрационные программы к главам и с прилагаемого к книге CD-ROM, то уже знакомы с созданной мной системой управления игроком (которую я предпочитаю называть непосредственным управлением). Эти демонстрационные программы позволяют вам перемещать персонажа игрока, используя клавиши управления курсором и мышь.
Для демонстрационных программ с видом от первого лица (таких, как NodeTree из главы 8), нажатие на клавишу перемещения курсора вверх передвигает персонаж вперед, нажатие на клавишу перемещения курсора вниз передвигает игрока назад и нажатие на клавиши перемещения курсора вправо и влево перемешают игрока вправо и влево соответственно. Передвижение мыши вращает точку просмотра. Для демонстрационных программ с видом от третьего лица (таких, как 3Din2D из главы 9), клавиши управления курсором перемещают персонаж в соответствующем направлении (нажмите клавишу перемещения курсора вверх для перемещения вверх, клавишу перемещения курсора влево для перемещения влево и т.д.).
ПРИМЕЧАНИЕ
Термины «вид от первого лица» и «вид от третьего лица» описывают местоположение точки зрения игрока. Для игр с видом от первого лица точка зрения игрока находится в глазах персонажа. Для игр с видом от третьего лица используется другая точка зрения — сзади, сбоку или другая перспектива.
При работе с PC редко применяется что-либо более сложное, чем эти системы управления. Однако, вещи становятся более сложными, когда игрок начинает ходить, сталкиваясь с другими персонажами и объектами (такими, как двери). Вы уже видели, как выполняется обнаружение столкновений, так что это не должно составить для вас большой проблемы.
Все становится несколько более сложным для NPC. Больше нет игрока, отвечающего за перемещение по карте; в дело вступает движок игры. Вы можете позволить NPC ходить вокруг по простым направлениям, но вместо того, чтобы перемещаться как PC, они руководствуются набором базовых правил перемещения:
-
Остановка.
-
Бесцельное блуждание по уровню или его заданной области.
-
Хождение по заданному маршруту.
-
Следование за персонажем.
-
Уклонение от персонажа.
<?LI>
Предшествующего списка действий вполне достаточно для начала, и так как надо начинать с чего-нибудь, начнем с наиболее логичного места — управления персонажем игрока.
Управление персонажем игрока
Игрок — это самый главный персонаж игры, так что необходим полный контроль над ним. Обычно игры используют простые схемы непосредственного управления, подобные той, о которой вы читали в разделе «».
Схемы непосредственного управления позволяют вам вручную перемещать персонажа вперед, назад, влево, вправо, вверх и через карту. Ничто не может быть более очевидным, так что в этой книге я предпочитаю использовать для управления персонажами методы непосредственного управления.
Есть два типа непосредственного управления — управление направлением и управление поворотом, и о них я расскажу в следующих подразделах.
Управление направлением
Управление направлением использует элементы управления, такие как клавиши управления курсором или джойстик, для перемещения персонажа в конкретном направлении. Управление направлением лучше подходит для игр с видом от третьего лица, где камера показывает персонажа сзади или сбоку (как показано на рис. 12.1).
Рис. 12.1. При управлении направлением персонаж перемещается в направлении, определяемом нажатой клавишей. Клавиша перемещения курсора вверх перемещает персонаж на экране вверх (от камеры), клавиша перемещения курсора влево перемещает персонаж влево и т.д
Этот метод управления при перемещении персонажа принимает во внимание местоположение камеры, так что клавиша перемещения курсора вверх всегда перемещает персонаж вверх (вдаль), независимо от угла вида камеры
Для перемещения персонажа при использовании управления направлением вам необходимо знать угол наклона камеры (относительно оси Y), местоположение персонажа и направление, в котором персонаж должен перемещаться (0.0 означает вверх или от камеры, 1.57 означает вправо, 3.14 означает вниз и 4.71 означает влево).
Предположим, что координаты персонажа представлены парой переменных:
float XPos, ZPos; // YPos = высота, она не требуется
Угол наклона камеры (относительно оси Y) представляется переменной:
float CameraYAngle; // Угол вида
И, наконец, у вас есть направление и расстояние, на которое вы хотите переместить персонаж:
float Direction; // Направление перемещения float Distance; // Как далеко переместиться
ПРИМЕЧАНИЕ
Использование значения расстояния может вызвать проблемы, поскольку вы не контролируете скорость обновления кадров в вашем движке. Когда игра работает на компьютере с полной скоростью и обновляется 100 раз в секунду, игровой персонаж может перемещаться гораздо быстрее, чем на компьютере с частотой обновления 30 раз в секунду. Вам необходимо ограничить количество обновлений игры в каждом кадре, как я делаю позже в разделе «Использование cCharacterController» и главе 16.
Затем создадим пример сцены, в котором персонаж находится в начале координат и хочет переместиться вверх (относительно вида камеры); камера располагается справа от начала координат вдоль оси X и направлена влево, как показано на рис. 12.2.
Рис. 12.2. Камера направлена влево, а персонаж перемещается вверх
Вот устанавливаемые переменные и проводимые вычисления:
XPos = ZPos = 0.0f; // Местоположение персонажа CameraYAngle = -1.57f; // Угол камеры Direction = 0.0f; // Направление перемещения float Distance = 4.0f; // Расстояние перемещения // Новое направление (угол) для перемещения float NewAngle = CameraYAngle + Direction - 1.57f; // Перемещение персонажа XPos += (float)cos(NewAngle) * Distance; ZPos += (float)-sin(NewAngle) * Distance;
К этому моменту персонаж переместился на 4 единицы от камеры, а значит он сейчас находится в точке X = –4.0, Z = 0.0, куда вы и хотели его поместить. Остается только задача определения высоты персонажа (для чего используется трехмерный движок).
В этом нет никаких проблем. В главе 8 мы исследовали как использовать соответствующие проверки пересечения, чтобы определить высоту точки полигона, которая будет использоваться как координата Y персонажа. Глава 8 описывает применение функции GetHeight для определения координаты Y, необходимой для размещения персонажей в трехмерном пространстве.
Управление поворотом
Управление поворотом позволяет игроку поворачивать персонаж, используя клавиши перемещения курсора вправо и влево и передвигать его вперед и назад с помощью клавиш перемещения курсора вверх и вниз.
В ряде аспектов управление поворотом лучше чем управление направлением, поскольку вычисления перемещения более просты. Персонажу здесь нужно хранить значение направления, однако, оно представляет направление, в котором обращено лицо персонажа (0.0 означает направление вдоль положительного направления оси Z, 1.57 — вдоль положительного направления оси X, 3.14 — вдоль отрицательного направления оси Z и 4.71 — вдоль отрицательного направления оси X). Подразумевается, что используется следующая переменная направления:
float Facing = 0.0f; // Направление лица персонажа
Теперь вы можете сказать, что задействование левого элемента управления (нажатие клавиши перемещения курсора влево или наклон джойстика влево) поворачивает персонаж влево (отрицательное вращение), а задействование правого элемента управления поворачивает персонаж вправо (положительное вращение):
// Используем ядро ввода: // Keyboard = ранее инициализированный // объект cInputDevice для клавиатуры Keyboard.Read(); // Поворот влево? if(Keyboard.GetKeyState == TRUE) Facing -= 0.01f; // Поворот влево на .01 радиан // Поворот вправо? if(Keyboard.GetKeyState == TRUE) Facing += 0.01f; // Поворот вправо на .01 радиан
С учетом угла из переменной Facing перемещение вперед и назад выглядит так:
// Перемещение вперед? if(Keyboard.GetKeyState == TRUE) { XPos += (float)cos(Facing-1.57f) * Distance; ZPos += (float)-sin(Facing-1.57f) * Distance; } // Перемещение назад? if(Keyboard.GetKeyState == TRUE) { XPos += (float)-cos(Facing-1.57f) * Distance; ZPos += (float)sin(Facing-1.57f) * Distance; }
Управление от первого лица
Последний тип непосредственного управления я использую для игр с видом от первого лица, где вы смотрите на мир через глаза персонажа. В этой форме управления клавиши управления курсора используются для перемещения персонажа влево, вправо, вперед и назад, а мышь для поворота вида (также как вы вертите головой, чтобы осмотреться вокруг).
Нажатие кнопки перемещения курсора вверх перемещает персонаж вперед в направлении его взгляда, а нажатие клавиши перемещения курсора вниз передвигает персонаж назад. Клавиши перемещения курсора вправо и влево перемещают персонаж вправо и влево. Управление от первого лица похоже на управление поворотом, о котором вы только что читали, но в управлении от первого лица мышь поворачивает персонаж.
Однако в данном случае поворачивается не персонаж, а камера (поскольку вид камеры представляет вид из глаз персонажа). Это добавляет пару новых переменных, представляющих углы камеры:
float XAngle = 0.0f, YAngle = 0.0f; // Углы просмотра персонажа
Две показанные переменные хранят углы просмотра, которые модифицируются, когда игрок перемещает мышь. Вот код для изменения этих углов:
// Подразумевается использование ядра ввода // Mouse = ранее созданный cInputDevice для мыши // То же относится и к клавиатуре Mouse.Read(); Keyboard.Read(); // Поворот персонажа на основе угла мыши XAngle += Mouse.GetYDelta() / 200.0f; YAngle += Mouse.GetXDelta() / 200.0f; // Перемещение персонажа if(Keyboard.GetKeyState == TRUE) { XPos += (float)cos(YAngle-1.57f) * Distance; ZPos += (float)-sin(YAngle-1.57f) * Distance; } if(Keyboard.GetKeyState == TRUE) { XPos += (float)-cos(YAngle-1.57f) * Distance; ZPos += (float)sin(YAngle-1.57f) * Distance; } if(Keyboard.GetKeyState == TRUE) { XPos += (float)cos(YAngle-3.14f) * Distance; ZPos += (float)-sin(YAngle-3.14f) * Distance; } if(Keyboard.GetKeyState == TRUE) { XPos += (float)cos(YAngle) * Distance; ZPos += (float)-sin(YAngle) * Distance; }
Заметьте, что всякий раз когда пользователь перемещает мышь, для поворота вида используется значение приращения (количество движения). После этого легко вычислить направление, в котором перемещать персонаж.
Управление независимыми персонажами
Как вы можете предположить после прочтения предыдущих разделов, управлять игроком относительно просто. Теперь начинается трудная часть — управление игровыми NPC. Этот раздел покажет вам различные методы перемещения ваших игровых NPC.
Хотя игры могут обманом завлечь вас в размышления о сложных схемах перемещения NPC по миру, это не так.
Помните упомянутые ранее пять общих типов перемещения NPC — ожидание, блуждание в заданной области, ходьба по маршруту, следование за персонажем и уклонение от персонажа? Держа их в уме, вы можете пристальнее взглянуть на ваши любимые ролевые игры, чтобы определить, какие схемы управления они используют.
Что касается вашей ролевой игры, уделите момент для исследования следующих схем управления и их реализации.
Ожидание
Здесь не о чем думать — просто разместите персонаж, и он будет стоять, оставаясь обращенным в заданном направлении. Направление здесь — угол поворота.
Блуждание по области
Такие игры, как Ultima Online позволяют NPC бродить по заданной области, которая может быть целым уровнем или задаваемой вами его отдельной частью. Чтобы сохранить вещи простыми, вы можете задать диапазон, в котором хотите разрешить блуждания персонажа, в виде заданного диапазона координат (как показано на рис. 12.3). Эти координаты хранятся в следующих переменных:
float WanderMinX, WanderMinY, WanderMinZ; float WanderMaxX, WanderMaxY, WanderMaxZ;
Рис. 12.3. Бродя по округе персонажу нужно знать ограничения. Задав небольшую область на карте (как показано здесь) вы ограничиваете перемещения персонажа
Теперь, подразумевая, что вы отслеживаете координаты персонажа в трех переменных, вы можете случайным образом перемещать его вокруг, проверяя допустимость этих перемещений:
// Координаты персонажа float CharXPos, CharYPos, CharZPos; // Дальность перемещения - пропущено перемещение YMove float XMove, ZMove; // Расстояние, на которое перемещается персонаж float Distance; // Определяем случайное направление перемещения, // продолжаем цикл пока не найдем while(1) { float Direction = 6.28f / 360.0f * (float)(rand() % 360); XMove = cos(Direction) * Distance; ZMove = sin(Direction) * Distance; // Проверяем допустимо ли перемещение, игнорируя высоту if(CharXPos+XMove >= WanderMinX && CharXPos+XMove <= WanderMaxX && CharZPos+ZMove >= WanderMinZ && CharZPos+ZMove <= WanderMaxZ) { // Перемещение разрешено, обновляем координаты CharXPos += XMove; CharZPos += ZMove; break; // Выходим из цикла } }
ПРИМЕЧАНИЕ
Не стоит случайным образом перемещать персонаж в каждом кадре, или ваши персонажи будут выглядеть, будто у них истерика. Вместо этого обновляйте направление движения персонажа только раз в несколько секунд или около этого.
Ходьба по маршруту
Хотя у NPC недостаточно интеллекта, чтобы знать, как они могут ходить по уровню, вы можете назначать им маршруты для путешествий. Эти маршруты включают координаты, которые должны быть достигнуты, прежде чем отправиться к следующим координатам. Когда достигнут последний набор координат, персонаж возвращается к начальным координатам и повторяет весь свой путь снова.
Использование маршрутных точек
Маршрутные точки определяются как набор координат, и чтобы сохранить привычные трехмерные концепции, можно для их хранения использовать следующую структуру:
typedef struct sRoutePoint { float XPos, ZPos; } sRoutePoint;
Для создания маршрута вы выбираете точки, которые должен пройти персонаж и формируете массив структур sRoutePoint для хранения координат. На рис. 12.4 показана простая карта с пятью отмеченными точками.
sRoutePoint Route = { { -200.0f, -100.0f }, { 100.0f, -300.0f }, { 300.0f, -200.0f }, { 200.0f, 100.0f }, { 0.0f, 400.0f } }; long NumRoutePoints = 5; // Чтобы проще было узнать количество точек
Рис. 12.4. На воображаемой карте показано пять маршрутных точек. Персонаж начинает с точки 1 и идет прямо к точке 2, а затем к точек 3 и так до тех пор, пока не достигнет точки 5. После этого персонаж возвращается к точке 1 и начинает обход маршрута снова
Ходьба от точки к точке
Чтобы переместиться от точки к точке, при ходьбе персонажа по маршруту необходимо сравнивать его текущие координаты с координатами точки, куда он стремится. Вы используете эти координаты совместно со скоростью ходьбы персонажа, чтобы вычислить пару переменных перемещения, обновляющих местоположение персонажа.
Начнем с предположения, что координаты персонажа хранятся в следующих переменных (вместе со скоростью перемещения персонажа):
float CharXPos, CharZPos; // Координата Y не нужна float WalkSpeed; // Скорость ходьбы за кадр
Далее предположим, что вы уже установили координаты, в которые хотите переместить персонаж, и поместили их в другую пару переменных:
float RouteXPos, RouteZPos; // Снова без координаты Y
Теперь начинаем перемещение персонажа, вычисляя переменные передвижения:
// Вычисляем расстояние от персонажа до маршрутной точки float XDiff = (float)fabs(RouteXPos - CharXPos); float ZDiff = (float)fabs(RouteZPos - CharZPos); float Length = sqrt(XDiff*XDiff + ZDiff*ZDiff); // Вычисление перемещения к пункту назначения float MoveX = (RouteXPos - CharXPos) / Length * WalkSpeed; float MoveZ = (RouteZPos - CharZPos) / Length * WalkSpeed;
Теперь, всякий раз, когда вы обновляете местоположение персонажа в кадре, вам необходимо прибавить MoveX и MoveZ к координатам персонажа:
CharXPos += MoveX; CharZPos += MoveZ;
Оставив это в стороне, вернемся назад и посмотрим, как отслеживать, к какой маршрутной точке направляется персонаж. Когда достигнута одна из маршрутных точек, персонаж должен направиться к следующей. Чтобы определить, достигнута ли маршрутная точка, вы определяете расстояние от персонажа до нее; если расстояние находится в заданных пределах, персонаж достиг точки и можно продолжать процесс со следующей маршрутной точкой.
Быстрее Пифагора
Чтобы определить расстояние от маршрутной точки, вы можете использовать теорему Пифагора, но для ускорения работы вы можете отбросить операцию sqrt и использовать вместо нее сумму квадратов длин. Чтобы увидеть, что я подразумеваю, взгляните на следующие две строки кода:
float Distance = sqrt(Length1*Length1 + Length2*Length2); float Distance = Length1*Length1 + Length2*Length2;
ПРИМЕЧАНИЕ
Теорема Пифагора, возможно, самая известная теорема в геометрии. Она утверждает, что квадрат длины гипотенузы в прямоугольном треугольнике равен сумме квадратов длин катетов. Фактически, это означает, что квадратный корень длин двух сторон (они должны быть возведены в квадрат и сложены) равен длине третьей стороны прямоугольного треугольника. Правда, просто?
Обратите внимание, что показанные две строки кода практически идентичны, за исключением того, что во второй строке опущена функция sqrt, из-за чего она выполняется гораздо быстрее. Недостаток в том, что вы не получаете точную длину, но это не представляет проблемы
Например, вы измеряете расстояние между двумя точками, и хотите видеть, меньше ли оно 40. Если координаты этих двух точек 0, 0 и 30, 20, более быстрое вычисление даст вам расстояние 1 300 (поскольку длины двух сторон 30 и 20, соответственно).
Как теперь определить расстояние? Вычислив квадрат (произведение на само себя) расстояния, вот как! Умножив 40 на 40 вы получаете 1 600. Сравнив вычисленное расстояние между точками, 1 300, вы видите, что оно меньше, чем 1 600 и, следовательно, меньше, чем оригинальное расстояние 40, которое вы проверяете.
Вернемся к тому, о чем я говорил ранее, и используем быстрый метод вычисления расстояния, чтобы определить приблизился ли персонаж вплотную к маршрутной точке. Предположим, вы решили считать маршрутную точку достигнутой персонажем, если персонаж находится в заданном количестве единиц от нее. Используя быстрый метод вычисления расстояния, вы можете применить для проверки следующую функцию:
BOOL TouchedRoutePoint(float CharXPos, // Координаты персонажа float CharZPos, float RouteXPos, // Координаты маршрутной точки float RouteZPos, float Distance) // Проверяемое расстояние { // Вычисляем квадрат расстояния для проведения быстрой проверки Distance *= Distance; // Вычисляем рассторяние float XDiff = (float)fabs(RouteXPos - CharXPos); float ZDiff = (float)fabs(RouteZPos - CharZPos); float Dist = XDiff*XDiff + ZDiff*ZDiff; // Возвращаем результат if(Dist <= Distance) // Внутри проверяемого диапазона return TRUE; return FALSE; // Вне диапазона расстояний }
При вызове TouchedRoutePoint с координатами персонажа, координатами маршрутной точки и проверяемым расстоянием от точки, вы получаете значение TRUE, если персонаж находится в пределах Distance единиц от маршрутной точки. Возвращаемое значение FALSE свидетельствует, что от персонажа до маршрутной точки больше Distance единиц.
Прохождение маршрута
Наконец-то вы можете объединить все вместе и заставить персонаж ходить от одной маршрутной точки к другой. Вот небольшая программа, которая берет пять предварительно определенных маршрутных точек, помещает персонаж в первую из них и заставляет персонаж бесконечно обходить все точки:
sRoutePoint Route = { { -200.0f, -100.0f }, { 100.0f, -300.0f }, { 300.0f, -200.0f }, { 200.0f, 100.0f }, { 0.0f, 400.0f } }; long NumRoutePoints = 5; // Координаты персонажа и переменные перемещения float CharXPos = Route.XPos; float CharZPos = Route.ZPos; float MoveX, MoveZ; float Speed; // Скорость ходьбы персонажа // Начинаем отслеживание до второй точки long TargetRoutePoint = 1; SetupMovement(TargetRoutePoint); // Бесконечный цикл перемещения // и проверки достижения маршрутной точки while(1) { // Персонаж находится в пределах маршрутной точки? if(TouchedRoutePoint(TargetRoutePoint, 32.0f) == TRUE) { // Переходим к следующей маршрутной точке TargetRoutePoint++; if(TargetRoutePoint >= NumRoutePoints) TargetRoutePoint = 0; SetupMovement(TargetRoutePoint); } // перемещаем персонаж CharXPos += MoveX; CharZPos += MoveZ; } // Функция проверки нахождения в пределах маршрутной точки BOOL TouchedRoutePoint(long PointNum, float Distance) { Distance *= Distance; float XDiff = (float)fabs(CharXPos - Route.XPos); float ZDiff = (float)fabs(CharZPos - Route.ZPos); float Dist = XDiff*XDiff + ZDiff*ZDiff; if(Dist <= Distance) return TRUE; return FALSE; } // Функция вычисления переменных перемещения void SetupMovement(long PointNum) { float XDiff = (float)fabs(CharXPos - Route.XPos); float ZDiff = (float)fabs(CharZPos - Route.ZPos); float Length = sqrt(XDiff*XDiff + ZDiff*ZDiff); MoveX = (Route.XPos - CharXPos) / Length * Speed; MoveZ = (Route.ZPos - CharZPos) / Length * Speed; }
Следование за другим персонажем
Хотя сперва следование за другим персонажем может показаться сложным, не следует слишком беспокоиться. Помните, что решение предполагает сохранять вещи простыми. Следование за персонажем также просто как и ходьба по маршруту. Поскольку персонаж всегда знает свои собственные координаты и координаты персонажа, за которым он следует, вы можете использовать ранее виденные функции для перемещения одного персонажа по направлению к другому.
Единственное различие здесь в том, что вы можете захотеть, чтобы персонаж держался на определенном расстоянии от того персонажа, за которым следует, как показано на рис. 12.5.
Рис. 12.5. Один персонаж выбирает другого, чтобы тот следовал за ним. Если сопровождаемый персонаж ближе заданного расстояния, следующий персонаж стоит. Если расстояние больше, персонаж, который следует за другим, должен придвинуться поближе
Зная координаты каждого персонажа (персонажа, за которым будут следовать, и персонажа, который будет следовать) вы можете сконструировать единую функцию, которая будет определять, в каком направлении должен перемещаться «следующий» персонаж:
void CalculateFollowMovement( float CharXPos, // Координаты персонажа float CharZPos, float WalkSpeed, // Скорость ходьбы персонажа float FollowXPos, // Координаты преследуемого float FollowZPos, // персонажа float FollowDistance, // Дистанция следования float *MoveX, // Переменные для перемещения float *MoveZ) { // Для быстрой проверки расстояния FollowDistance *= FollowDistance; // Получаем расстояние между персонажами float XDiff = (float)fabs(FollowXPos - CharXPos); float ZDiff = (float)fabs(FollowZPos - CharZPos); float Length = XDiff*XDiff + ZDiff*ZDiff; // Если расстояние между персонажами меньше допустимого, // просто стоим if(Length < FollowDistance) { *MoveX = *MoveZ = 0.0f; return; } // Вычисляем шаг перемещения // на основе скорости ходьбы персонажа Length = sqrt(Length); *MoveX = (CharXPos - FollowXPos) / Length * WalkSpeed; *MoveZ = (CharZPos - FollowZPos) / Length * WalkSpeed; }
Каждый раз, когда вы хотите обновить данные персонажа, следующего за другим, вам достаточно передать в функцию требуемые данные и переместить персонаж, используя возвращенные переменные передвижения.
Избегание персонажа
Избегание означает перемещение одного персонажа как можно дальше от другого. Если персонаж, которого избегают, находится ближе, чем минимальное расстояние, избегающий персонаж перемещается в противоположном направлении с помощью функции CalculateEvadeMovement:
void CalculateEvadeMovement( float CharXPos, // Координаты персонажа float CharZPos, float WalkSpeed, // Скорость ходьбы персонажа float FollowXPos, // Координаты избегаемого персонажа float FollowZPos, float EvadeDistance, // Дистанция избегания float *MoveX, // Переменные для передвижения float *MoveZ) { // Для быстрой проверки расстояния FollowDistance *= FollowDistance; // Получаем расстояние между персонажами float XDiff = (float)fabs(FollowXPos - CharXPos); float ZDiff = (float)fabs(FollowZPos - CharZPos); float Length = XDiff*XDiff + ZDiff*ZDiff; // Если расстояние между персонажами больше заданного, // остаемся стоять if(Length > EvadeDistance) { *MoveX = *MoveZ = 0.0f; return; } // Вычисляем шаг перемещения // на основе скорости ходьбы персонажа Length = sqrt(Length); *MoveX = -((CharXPos - FollowXPos) / Length * WalkSpeed); *MoveZ = -((CharZPos - FollowZPos) / Length * WalkSpeed); }
Автоматическое управление персонажами
Когда в игру вступают скрипты, вы захотите иногда управлять персонажем игрока, например, чтобы направить сюжет по определенному пути. Здесь привлекается автоматическое управление. Автоматическое управление персонажем означает, что игра решает какой метод управления использовать и куда переместить персонажа.
Автоматическое управление размещается в параметрах искусственного интеллекта. Для временного управления персонажем игрока вы можете использовать следующие шаги:
-
Смените тип персонажа с PC на NPC.
-
Смените параметры искусственного интеллекта PC (который теперь NPC) на следование по маршруту (или другой тип перемещения).
-
Выполняйте перемещение и продолжайте обновление до тех пор, пока не будет достигнута последняя маршрутная точка или пока вы не захотите прекратить использование автоматического управления.
-
Переключите тип персонажа обратно на PC.
netlib.narod.ru | < Назад | Оглавление | Далее > |
Сайт управляется системой uCoz
Что это такое?
Милишники — это герои в игре Dota 2, которые имеют высокий уровень атаки в ближнем бою. В настоящее время в игре около 30 милишников, каждый из которых обладает своим уникальным набором способностей и статистики.
Помимо высокой атаки, милишники обычно имеют большой запас здоровья, позволяющий им выдерживать урон в бою. Они могут служить в качестве защитников команды, блокируя противников и отвлекая их в бою.
Для успешного применения милишников в команде важно учитывать их роль и возможности в конкретном матче. Например, некоторые милишники имеют способности, позволяющие им перемещаться быстрее по карте, что может быть полезно для выполнения боевых задач на больших расстояниях
Таким образом, милишники могут стать надежной и эффективной защитой команды в игре Dota 2.