Приветствуем, геймер! Ты можешь или
16+
Avatar

Геймер SloThz 23

8

Drunken Master, блог разработчика, часть 2.

Привет, друзья!

С момента написания последнего блога (первой части статьи) прошло немало времени и мне хотелось бы извиниться за задержку. Я хотел сесть и разобраться с этим, но все не было времени. Сегодня я закрылся у себя в офисе и послал всех прочь, чтобы закончить вторую часть блога. Приступим!

Это второй шаг в создании героя и в основном этим занимаюсь я, так как знаю подводные камни скриптовой системы лучше любого. Нам нужно было создать рабочую версию героя, которая бы соответствовала дизайну, чтобы мы смогли ввести его в наш внутренний клиент для тестирования среди S2 в 1v1/2v2, дабы удостовериться, что мы не сломали ничего очевидного. Потом нам нужно было его подправить и выпустить в тестовом клиенте, но это в следующем блоге. Этот блог будет посвящен больше технической части/механике и он будет подлиннее прошлого. Итак, Пьяный Мастер.

Первым делом при создании героя я разбираю его по частям для того, чтобы понять как он будет работать используя наши стандартные строительные блоки. Их несколько видов — снаряды, состояния, аффекторы, устройства и модификаторы. Для тех, кто не в курсе что это все такое, вот краткий обзор.

Drunken Master, блог разработчика, часть 2.
Heroes of Newerth - Drunken Master, блог разработчика, часть 2.Drunken Master, блог разработчика, часть 2.

Снаряды: это по сути невидимые «пули», следующие из позиции X в позицию Y. Они могут «цеплять» или «подбирать» с собой других юнитов, лететь по воздуху, следовать или не следовать местности и, в общем-то, пригодны для всех случаев жизни. Пример снарядов в игре это любой прыжок, например Myrmidon. Valkirye, Kraken и т.д. Или любая автоатака или умение, у которого есть время полета.

Drunken Master, блог разработчика, часть 2.
Heroes of Newerth - Drunken Master, блог разработчика, часть 2.Drunken Master, блог разработчика, часть 2.

Состояния: это баффы и дебаффы, которые вы видите над портретом героя. Учтите, что это только видимая часть. Есть множество скрытых состояний, которые никогда не отображаются в клиенте. Например, у Chipper'а всегда действует состояние, которое позволяет перезаряжать ракеты и отвечает за таймер.

Drunken Master, блог разработчика, часть 2.
Heroes of Newerth - Drunken Master, блог разработчика, часть 2.Drunken Master, блог разработчика, часть 2.

Аффекторы: по сути, это круги на земле, которые могут увеличиваться, двигаться, иметь задержку, изгибы и они используются для любого движущегося АоЕ. Примеры — ульты Soulstealer/Hag. Аффекторы — это то, что наносит сам урон, ваш герой просто «рождает» их, используя способности.

Drunken Master, блог разработчика, часть 2.
Heroes of Newerth - Drunken Master, блог разработчика, часть 2.Drunken Master, блог разработчика, часть 2.

Устройства: штуковины, которые «спавнят» герои. Варды Pollywog'а, турель Engineer'а, и даже водоворот Kraken'а — это все устройства, появляющиеся в мире и делающие что-то. Это не единственное их применение. Множество устройств невидимы и имеют различные ауры, отсчитывают время, являются «якорями», учитывают позицию. Ниже несколько примеров таких невидимых устройств.

Drunken Master, блог разработчика, часть 2.
Heroes of Newerth - Drunken Master, блог разработчика, часть 2.Drunken Master, блог разработчика, часть 2.

Модификаторы: скажем, это как «режимы», которые вы можете включать у героев. Простейший пример — Maliken. Когда вы переключаете режим на мече, применяется модификатор, меняющий героя (анимация, атака, умения). Когда вы его отключаете, модификатор исчезает и все приходит в норму. Мы можем использовать это, например, для изменения ульты, которая бы основывалась на Q способности героя, при этом не используя никаких дополнительных приемов.

Drunken Master, блог разработчика, часть 2.
Heroes of Newerth - Drunken Master, блог разработчика, часть 2.Drunken Master, блог разработчика, часть 2.

Вернемся к Пьяному Мастеру. Основы, которые расписал для этого героя DivA таковы: отсутствие маны, 10 дегенерации в секунду, отсутствие цены на использование умений. К счастью, удаление всей регенерации было не сложно, так как нам приходилось это делать в прошлом при создании некоторых устройств и умений (старая турель Инженера). Просто вставим вот это — manaregenreduction="1" в файл героя и это отключит весь реген. Дегенерация маны в секунду была немного спорной, будет ли это в файлах героя или в состоянии, основанном на его втором умении. Остановился я на файлах и выглядит это так:

<onframe>

<takemana target="source_entity" amount="10" b="frametime" op="mult" />

</onframe>

Заключительная часть — отсутствие требований маны, это то, что мы никогда еще не делали, потому для этого потребуется новый код. Я расскажу об этом подробнее в конце.

Первое умение «Drink», простая «канальная» (прерывается и т.д.) способность. Работает как любая другая (например как у Succubus/Devourer), за одним исключением, состояние/отключение применяется не на кого-то, а на самого героя. Это «самоотключение» тикает каждую секунду как ульт Succubus и дает ему 25/50/75/100 маны. Натуральная дегенерация в файлах героя позаботится об остальном.

Часть умения оставалась не законченной — лечение при поглощении маны. Для этого я поместил модификатор в «Drink» и исправил дегенерацию маны в файлах. Таким образом, вместе они лечили героя при дегенерации маны, но только после изучения второго умения.

In second ability:

modifierkey="DrunkenMaster_Drain"

In hero file:

<onframe>

<takemana target="source_entity" amount="10" b="frametime" op="mult" />

<hasmodifier name="DrunkenMaster_Drain">

<heal target="source_entity" a="result" />

</hasmodifier>

</onframe>

С выпивкой покончено.

«Lunge» самая сложная абилка, т.к. она должна делать сразу несколько вещей. Разбирая на составные — когда герой использует умение, оно прикрепляет его к снаряду (и ставит его в состояние, при котором он не может двигаться или использовать что либо в воздухе), который движется к цели. По достижению цели наносится атака и герой прикрепляется к новому снаряду, который кружит вокруг цели. Во время кружения он все еще не может пользоваться ничем, кроме Q и его цель будет оглушена. Модификатор будет действовать во время кружения, который превращает Q в другое умение (подумайте о Q Bubbles'а), которое позволит остановить кружение в любой момент. Либо повторное использование умения, либо просто окончание умения оттолкнет цель и нанесет дополнительный урон. Ух!

При создании этого умения, я скопировал «leap» Predator'а, сильно изменив его, чтобы он не наносил урон и не замедлял, но при этом спавнил бы второй снаряд, который бы оглушал противника.

<onimpact>

<attack />

<spawnprojectile

name="Projectile_DrunkenMaster_Ability1_Orbit"

source="source_entity"

target="target_entity"

noresponse="true"

bind="source_entity"/>

<applystate name="State_DrunkenMaster_Ability1_CircleDisarm" duration="1500" target="source_entity" proxy="target_entity" pushentity="true" />

<applystate name="State_DrunkenMaster_Ability1_Stun" duration="1500" target="target_entity" />

</onimpact>

Состояние circledisarm — таймер для кружения, по достижению 1.5 сек происходит следующее:

<modifierkey="DrunkenMasterSpinning">

<onimpact>

<attack source="source_entity" target="this_proxy_entity" />

<push target="this_proxy_entity" source="source_entity" duration="250" force="1600" />

</onimpact>

Это наносится урон и отталкивание. <attack /> просто наносит автоатаку от источника по цели, в сочетании с состоянием circledisarm мы получаем урон от всего умения. Модификатор, который вы видите меняет Q умение таким образом, что при нажатии кружение прерывается, наносится урон, юнит толкается, кончается оглушение и все остальное. Вот как это выглядит:

<modifier key="DrunkenMasterSpinning" modpriority="100" ignorecooldown="true" anim="" icon="icon_teleport.tga" nosilence="true" casttime="0" castactiontime="0" manacost="0" actiontype="no_target">

<onimpact>

<unbind target="source_entity" />

<attack source="source_entity" target="this_proxy_entity" />

<push target="this_proxy_entity" source="source_entity" duration="250" force="1600" />

<expirestate name="State_DrunkenMaster_Ability1_Stun" target="this_proxy_entity" />

<expirestate name="State_DrunkenMaster_Ability1_CircleDisarm" target="source_entity" />

</onimpact>

</modifier>

Вот и вся суть «Lunge». На данный момент умение работает, но я знаю, что вылезут новые баги по мере продвижения. «Stagger» очень простое снарядное умение, в сравнении. При использовании создается снаряд, прикрепляющий героя и двигающий его на 300 юнитов вперед:

<onimpact>

<disjoint target="source_entity" />

<pointonpath0 source="source_position" target="target_position" ignoreunits="true" distance="300" />

<spawnprojectile name="Projectile_Drunkenmaster_Ability3" source="source_entity" target="pos0" bind="source_entity" bindturn="true" bindstate="State_Drunkenmaster_Ability3" unbindondeath="true" />

</onimpact>

«Numb to pain» нечто совершенно новое для нас и требует некоторого кода. Единственная часть, которую мы пока что можем ввести, это сопротивление к замедлению как у Deadwood'а. Для остального нужен определенный код. Я иду с этим и с вопросом об отсутствии требования маны при использовании предметов к нашему программисту DJ, чтобы удостовериться, что он добавил это в свой список на реализацию. До тех пор, Пьяный Мастер готов по моей части.

Да, чуть не забыл, бонус, который получают умения когда используются с маной. Вот так это выглядит на примере «Numb to pain» и «Stagger»:

Stagger:

<onaction>

<compare a="source_mana" b="50" op="ge">

<takemana target="source_entity" amount="50" />

<applystate name="State_Drunkenmaster_Ability3_Buff" duration="3000" target="source_entity" />

</compare>

</onaction>

Numb to Pain:

<onaction>

<compare a="source_mana" b="100" op="ge">

<takemana target="source_entity" amount="100" />

<applystate name="State_Drunkenmaster_Ability4_Buff" duration="6000,8000,10000" target="source_entity" />

</compare>

</onaction>

<onaction /> вызывается лишь единожды, при использовании умения, так что это хорошее место для того, чтобы сделать что-то, что нужно сделать лишь в самом начале. «Lunge» работает практически так же, идет проверка на ману и потом передается снаряду, что мана присутствует и снаряд замедляет.

Вот, собственно, заскриптованный Drunken Master, готовый к отправке. На данный момент он использует модель Панды, пока DivA и Nome не доберутся до него и не создадут тестовые эффекты и анимации. В следующий раз мы расскажем вам как прошли наши внутренние тесты, багфиксы и какие изменения мы внесли. Ах, да, приготовьте ваш тестовый клиент, уже скоро!






Статейка

Перевод

8
Еще в блоге
Интересное на Gamer.ru

Нет комментариев к «Drunken Master, блог разработчика, часть 2.»

    Загружается
Чат