Регенерация маны
На самом-то деле, игровой дизайн — это просто. Как и любой другой дизайн. Надо просто отдавать себе отчет каждый раз — зачем ты это делаешь.
Аргумент «так делают все» не является правильным. Ровно до тех пор, пока ты не начинаешь понимать, почему так делают все, после чего два пути: ты понимаешь, что это правильно и делаешь, как все, или ты понимаешь, что это неправильно, потому что можно лучше.
Возьмем, например, King’s Bounty и поговорим о поломных заклинаниях и мане.
Мана — это ограниченный ресурс, количество маны — это «крутизна» мага, которая символизирует количество заклинаний, применяемых за бой. Смотри D&D, где крутизна мага заключается в том, сколько заклинаний (и какого уровня) он может запомнить и потом применить за бой. Просто нет «синенькой жидкости», называемой «мана».
Опять-таки, ограничение по уроню — это всё та же крутизна, если маг не может выучить это заклинание, то это значит — правильно! — что он может выучить ноль таких заклинаний.
Проблемы начинаются тогда, когда дело доходит до восстановления маны.
Здесь есть два выхода: либо мы считаем, что мана — этот тот ресурс, который игрок должен менеджерить между боями, — скажем, на игрока нападают один за другим две толпы монстров, и игрок должен помнить об этом, — либо мы считаем, что ману игрок должен менеджерить только во время боя.
King’s Bounty, определенно, подпадает под вторую ситуацию, учитывая то, что от монстров всегда можно убежать, а перед каждым боем всегда можно дождаться восстановление маны.
Отсюда простой вывод: раз всегда можно начинать бой с полной маной не прикладывая никаких усилий, кроме тупого минутного ожидания, то мана на начало боя всегда должна быть полной. Регенерация вне боя не нужна, потому что вне боя герой никак не управляет маной, как ресурсом.
Следующий шаг — регенерация маны в бою. Очевидная польза: смягчение для игрока ситуации «Рок-н-ролл мертв, а я еще нет», то есть когда бой все еще идет, а маны уже нет.
Регенерация — потенциально бесконечная мана, которую мы «обмениваем» на другой ресурс — время. Самые простые грабли в таком случае — это ситуация, когда время не имеет значения. Скажем, оставляем последнего врага, который ничем уже не навредит, и ждем регенерации маны.
Решение «в лоб» — это делать органичение на регенерацию маны (King’s Bounty) или ограничение на время (Аллоды). При таком подходе регенерация — просто расширитель манапула, который можно нудно и скучно порастягивать.
Итого: убираем регенерацию маны вообще, каждый бой начинается со 100% маны. Балансировать manacost заклинаний сразу становится легче, вместо кучи гипотетических показателей (максимальная мана, средняя мана в начало боя, средняя мана за бой с учетом регенерации, максимальная мана с учетом регенерации и растягивания боя) имеем один.
Проблему с импотенцией магов в долгих боях можно решить более оригинально: вместо таланта, дающего регенерацию в бою сделать талант, востанавливающий в начале хода до 2/5/7 маны, только если у вас меньше 2/5/7 маны.
Таким образом, раз в ход маг сможет прокастовать «нахаляву» что-то дешевое, но не поломные заклинаия, типа жертвы или воскрешения. А еще для затяжных боев можно использовать — правильно! — ярость.
Ярость сделана почти правильно — она дается за ограниченный ресурс (количество ударов, то есть, фактически, за HP) и дается постепенно, так что функцию смягчения длинных боев можно легко переложить на нее. Отсюда тот же вывод, что и с маной: начинаться бой должен всегда с пустой полоской ярости, потому что ярость — это мана наоборот.
Так же вполне очевидно, что ограничение сверху на ярость почти не имеет смысла, а главный параметр — это скорость прироста ярости, а вовсе не ее объем.
Если тут будет много осмысленных комментариев, то в следующем выпуске я расскажу про scaling и stacking на примере все той же KB, после чего мы окончательно пофиксим поломные заклинания.
Тизер.
Scaling и stacking — две проблемы на букву S, с которыми сталкиваются игровые дизайнеры.
Первое — это рост «крутизны», который должен происходить если не равномерно, то предсказуемо и прозрачно для дизайнера и выражаться в понятиях, типа «в два раза круче». Там много очевидных граблей, которые возникают из-за того, что какая-нибудь цифра рассматривается не в системе (уравнений), а «сама по себе».
Stacking — аналогично, когда два похожих умения дают в сумме что-то очень страшное, либо ведут к непредсказуемым результатам. Например, игроку удалось собрать вместе 5 способностей, каждая из которых увеличивает дамаг на +50%. Какой дамаг от исходного мы получим на выходе?
1. 350% (все складываем)
2. 759,375% (все перемножаем)
3. 196,875% (50+25+12.5+6.25+3.125+100)
Правильный ответ, надеюсь, очевиден?
King’s Bounty: баланс
В King’s Bounty есть несколько э... «узких мест» в «балансе».
Неет.... есть баланс в игре. поиграл ещё достаточно и понял, что баланс хорош именно таким, какой он есть. (из интернета).
Самый неочевидный полом — это дохлая крыса, которая за -40 лидерства дает +2 rage и +2 mana.
Суть в том, что лидерство повышается при каждом level up-е линейно, а мана и ярость — нет. То есть на 10-ом уровне можно выбрать, скажем, +120 лидерства или +5 маны, а на 20-ом — уже +450 лидерства или всё те же +5 маны, на 25-ом — уже +1000 лидерства.
Так что уровне на 20-ом имеет смысл попробовать добыть и использовать штук 5-10 таких крыс. (Не пробовал, возможно, их ограниченное количество).
Отсюда же очевидный вывод:
А вообще самая главная стратегия в этой игре — это левелапы.
НИКОГДА не берите лидерство на ранних левелапах, повторяю, НИКОГДА. Это, фактически, трата левелов впустую. Брать лидерство можно уровня с 15-го, а лучше — еще позже.
Более наглядные поломы — заклинания «мишень» и «воскрешение». С воскрешением все предельно понятно, «мишень» же обязует противника атаковать указанного твоего бойца. Всё бы ничего, но мишень + воскрешение работают черезчур хорошо, делая использование других заклинаний невыгодным.
Извечный дисбаланс в сторону магов и лучников решен гениально и просто. Не смейтесь над легкой и тяжелой пехотой – всего одно применение уникальной способности «бег» и насмешники побледнеют от появившегося перед носом разъяренного гоблина. Но стоит замедлить атакующую лавину и через два-три хода под стрелами и заклинаниями она растает весенним снегом, а победитель облегченно переведет дух.
Эти дураки пишут обзоры, запретите им.
«Извечный дисбаланс» решается очень просто, например так: «при прочих равных условиях лучники имеют на N% здоровья меньше». Решается он так со хрен знает каких времен, и King’s Bounty совсем не исключение.
Понятно, что слова «баланс» и King’s Bounty лучше вместе не употреблять, но под «балансом» можно понимать в том числе и отсутствие заклинаний, которые применять выгодно всегда и везде, — хотя бы потому, что другие заклинания тоже хочется поприменять, а опа.
С «талантами» еще более-менее все очевидно: они все сосут одинаково. Хотя +20% опыта надо брать в начале — каждый манчкин знает. С другой стороны, уровню к 20-ому можно прокачать «почти всё», так что вопрос о другом стиле игры как-то не стоит.
Ну и дальше по списку — аналогично: есть одна супер-жена, остальные сосут.
Собрать «разную» армию реально, но геморройно бегать собирать ее по всей карте, некоторые возможности строго привязаны к прогрессу: например, черных драконов я насобирал буквально по одному, а потом на определенном этапе просто открылась сюжетная нычка с черными и красными драконами.
Вообще, русские игры легко узнаются по отсутствию learning curve: в первой же зоне можно огрести так, что мало не покажется, денег постоянно не хватает, а враги довольно доставучие — особенно учитывая то, что магии и войск у тебя совсем мало.
Зато к середине и к концу начинается счастье манчкина — 4 миллиона денег, по умолчанию скупаются все артифакты в городах, новая манчкинская жена, которая носит два оружия, эльфы-стайперы, которые инстагибят (one-shot’ят) средние отряды, и так далее.
Я даже умудрился упереться в level cap, который наступает на 30 уровне.
А выход простой:
Нашли дисбалансный закл. (например «Жертва») — играйте без него. Назавите это homerules или Ironman Challenge и получайте удовольствие. А там и аддон недалеко. (из интернета)
«Представьте, что игра сбалансирована». Это, конечно, сарказм и, конечно, не выход.
Все недостатки, однако, не отменяют того факта, что игра хорошая, ибо играбельная, в первый раз — особенно. Хватает в режиме «по часу после работы» очень надолго. Более того, КБ — первая русская игра (помимо тетриса), которую я все-таки пройду до конца, а до конца я прохожу в лучшем случае игры три в год.
Тэги 2.0: сontribute or not!
В последнее время я работаю в Яндексе. Это такая интернет-компания, поэтому я время от времени думаю про всякие интернетовские вещи, типа вики, голосований или прочего.
Некоторые из этих мыслей не дают Яндексу неоспоримое конкурентное преимущество, поэтому не подпадают по NDA, но делают мир лучше, поэтому грех не поделиться. Особенно учитывая то, что на самом-то деле я не почетный член Yandex Labs и занимаюсь совсем другим.
Сегодня я долго и нудно думаю про тэги, ярлыки, категории, ключевые слова, — про эти штуки, которые пользователи добавляют к своим документам непонятно зачем и непонятно как.
Речь пойдет о тэгах на массовых сервисах.
Костя Коломеец придумал себе замечательный принцип — «сontribute or GTFO» и теперь носится с ним. Более емкую и понятную формулировку того же самого я видел у кого-то на сайте в виде disclaimer’а «Если ты нехороший человек, иди нахуй отсюда!».
Костя мечтатель, а принцип работает только в маленьких сплоченных группах («сектах»).
В реальности все не так. Все из вас наверняка видели онлайновые игрушки, типа «некое место, где все и каждый может составлять слова из букв». Этого зрелища хватает минут на пять, основные паттерны поведения понятны сразу. Даже если не брать случаи явного вандализма, коллективная работа и сontribute не выходит не только потому, что люди к ней не способны, но еще и потому, что способа договориться у них нет.
Тэги — наиболее уродское изобретение вебдваноля. Ровно по тем же причинам: предполагается, что люди «как масса» обладают неким интеллектом и способны действовать сообща.
Наглядный пример, почему весь этот вебдваноль не работает. Не глядя могу сказать, что одним из самых популярных тегов на яндекс.фотках будет тэг «я».Как легко догадаться, там должен быть изображен я. Но там почему-то изображен вовсе не я, а какой-то хуй в панамке.
(Смех в зале).
И если вдуматься, это не шутка.
Язык многозначен, уровень владения им у всех разный, все думают по-разному, а кто-то вообще не думает; правил заполнения тэгов нет никаких.
На выходе получается вполне наглядная картина: некий срез понимания того, как тэги нужно заполнять, помноженный на популярные темы и закрепленный в виде облака тэгов.
В этом, кстати, сакральная суть вебдваноля: взять много-много говна и снимать с него сливки. Все, что снизу, уже не найдет никто. Понятно, что тэг «кошки» на каком-нибудь фотохостинге будет мегапопулярен до такой степени, что «кошечками», «котятами» и «котами» можно вроде как и пренебречь.
На фотки.яндексе запрос «кошки минус коты» дает 88 тысяч фотографий, «коты минус кошки» — 18 тысяч. И пять тысяч «котят». Еще есть «cats» и «кошечки». Это всё одно и то же, но в Облаке Тэгов пользователю предлагают только «кошек». Процентов 30 теряется, но UGC — такая помойка, что все к подобному поведению привыкли.
Кто смог, тот всплыл, ага. При этом хорошо, что Яндекс ищет по тэгам с учетом форм слова, то есть «кошки» и «кошка» — это одно и то же. В других местах это совсем не так.
Но это детские примеры. Желающие могут угадать, какой тэг приписал автор своему посту «КАК ВЫТАСЧИТЬ КЛЕЩА».
Конечно же, «ПАРАЗИТЫ КЛЕЩ». Это один тэг.
Первые три мысли, которые возникают сразу:
1. Синонимы.
2. Поиск.
3. Конечно же, «паразиты / клещ».
Тэги против категорий.
Начнем с конца, «паразиты / клещ». Давно, до тэгов, были попытки создать всеобъемлющую классификацию зверей, птиц, гадов морских и всего, что есть в этом мире. Да, я говорю о древовидной классификации. Проблемы с ней были ровно те же: сотням людей приходилось понимать логику одного, который поместил, скажем, «компьютерные игры» в «компьютер / софт / игры», а не в «развлечения / игры / компьютерные».
Cовершенно очевидно, что игры должны быть и там и там, при этом это должны быть «одни и те же игры».
Продолжая мысль — те же «игры» могут быть и корнем (главной категорией) в одном случае, и подкатегорией — в другом. Очевидно, что нужна не древовидная структура, а скорей структура связей между категориями. Для умных — граф категорий с выделением корневых узлов. Очевидно, что категории должны отражать интересы пользователей, как тэги. Не на уровне «популярные категории выводятся жирным шрифтом», а на уровне «есть интерес — есть категория».
Что-то похожее сделано у меня на nudnik.ru: тэги+связи, важные тэги, аналог «корневой категории», выделяются руками.
Важный нюанс: эта система связывает уже существующие тэги, всеобъемлющую классификацию она создать не пытается.
Идеальная система тэгов на любом посещаемом сайте должна выглядеть так:
1. Пользователи вводят тэги в обычном порядке.
2. Модераторы берут существующие тэги и выстраивают между ними связи. Да-да, модераторы. Если вы считаете, что можно создать сайт с UGC без модераторов, то закройте эту страницу и всё забудьте.
При этом эта задача «модерации» тэгов гораздо более продуктивна, чем модерирование постов: новые тэги появляются не так часто, достаточно из связать один раз, и это будет работать надолго.
2.5. Одна из таких связей — несомненно, связь типа «синонимы». Достаточно один раз завязать всех «кошек» на одной слово — и всё, проблема с котами решена once and for all. При этом у синонимов должен быть один главный, вокруг которого растет гнездо. (Бесполезный факт: синонимы растут в гнездах).
Когда пользователь вводит неглавный синоним, этот синоним должен автоматически заменяться на главный. Да, это будет фрустировать пользователя, но окончательно решит проблему с двояким толкованием термина «киски».
3. После редактирования связей происходит автоматическая чистка тэгов в существующих «постах». Например, «cats, киски, кошки, животные» становятся просто «кошками». «Животные» убираются по понятным соображениям: «кошки / животные», то есть «кошки» входят в «животных», и при выборке по тэгу «животные» кошки будут показаны тоже.
Один из плюсов тэгов — в том, что одной записи можно поставить более одного тэга. Но этот функционал чаще приводит к «стрельбе наугад», когда пользователь пытается предугадать, какой синоним «кошек» все-таки нужно использовать, и в результате пишет их все, — и заодно придумывает новые.
После чистки же (в идеале) остаются только несвязанные между собой тэги, например, пост про ребенка и кошку будет иметь тэги, натурально, «ребенок» и «кошка».
4. Пользователю предлагается новый улучшенный интерфейс ввода тэгов, с автозаполнением, подсказками, блэкджеком и шлюхами.
Наиболее близка с идеалу вот эта реализация, только там это поле почему-то называется «Search Categories» и выбирать можно только одну категорию. Попробуйте ввести туда «cat».
5. Выборку по тэгам делаем так же, как выборку по древовидным категориям, то есть «в этом тэге и подтэгах».
Плюсы системы: модератору не надо заранее изобретать всеобъемлющие категории, всё делают пользователи сами. Модератору достаточно один раз связать и причесать уже готовые, введенные пользователями, тэги.
Тестирование: Я взял 10000+ популярных тэгов с fotki.yandex.ru и попробовал их классифицировать, используя мою систему c nudnik.ru.
Удалось разобрать 200 самых популярных тэгов, потом мне просто надоело. Самое главное, что мне не пришлось создавать ни одного нового тэга, пользователи действительно все сделали за меня, и все тэги уже имели привязанный к ним контент.
«Корневых» тэгов, из которых можно попасть в остальные, получилось всего 8 штук.
В качестве побочного эффекта сразу стало понятно, что интерфейс модерации можно сделать проще и удобней.
Итого: Для пользователей не меняется ничего (это важно), они все так же вводят тэги. Модераторы связывают тэги и указывают на ошибки («синонимы»). Эти ошибки больше не повторяются.
По выборке «животные» мы получаем всех животных, а не только тех, где пользователь соизволил указать «животные», а не конкретный их вид. Вместо страшного гиковского облака тэгов имеем более компактную и логически связанную псевдо-древоподобную навигацию.
Интерфейс.
Очень сильно хотелось написать прототип модераторского интерфейса и выложить в публичный доступ, но это было бы все то же «некое место, где все и каждый может составлять слова из букв», и ни к чему хорошему бы не привело.
Так что опишу словами.
Идеальный интерфейс для работы со словами — это... текстовый редактор. В нашем случае — поле ввода, типа textarea.
В несвязанном виде тэги имеют такой вид:
люди
я
дети
ню
природа
животные
домашние животные
кошки
кошечки
котенок
лошадь
Модератор берет и, натурально, работает с этим, как с текстовым файлом, используя простые правила, типа «знак „/“ является разделителем» и простые понятные механизмы, типа cut/paste.
После редактирования человеком текст выглядит примерно так:
люди / я
люди / дети
люди / ню
природа / животные
животные / домашние животные / кошки
кошки / котенок
животные / лошадь
кошечки
После нажатия на кнопку «ок» получаем уже связанные цепочки, отсортированные по алфавиту:
кошечки
люди / дети
люди / ню
люди / я
природа / животные / домашние животные / кошки / котенок
природа / животные / лошадь
Осталось придумать синтаксис для синонимов. Тут всё просто, главное слово — кошки:
кошки = кошечки = киски
Никто не мешает выводить синонимы в конце текста, понимать комментарии и прочие служебные символы. На выходе (в форме ввода) получаем текст, вида:
!люди / дети ## синонимы
кошки = кошечки = киски
## еще не имеют связи
динозавры## категории
!люди / ню
!люди / я
природа / животные / домашние животные / кошки / котенок
природа / животные / лошадь
Ну и мелочи — например, «!» в начале строки означает, что тэг действительно корневой (это вместо checkbox-а, ага), к тому же с сортировкой по алфавиту корневые тэги выводятся первыми. (Иногда надо связать несколько тэгов, но корневой тэг, который «достоин» попасть на морду сайта, например, выделить не получается).
Этот интерфейс в разы быстрей в работе, чем интерфейс с кнопочками, стрелочками и даже drag’n’drop-ами. Не говоря уже о поиске (Ctrl+F) и даже возможности банально впечатать нужное слово в нужном месте.
Стоимость разработки этого интерфейса стремится к нулю. Обработка данных тоже простая: режем на слова, сравниваем их с текущими тэгами, если есть «/» — проставляем связи.