Arrested web development
Обещанная заметка про веб-девелупмент.
...
Слушал (на ютубе) я как-то историю JavaScript-а в изложении одного умного чувака и плакал горькими слезами.
...
По маркетинговым соображениям синтаксис сделали си-подобным с легким налетом Явы, впрочем, даже не синтаксис, а некоторые особенности поведения, чтобы программисты не испугались непривычного, а так же добавили всякие безумные вещи «для новичков», типа необязательных разделителей в конце строк.
...
По тем же маркетинговым соображениям язык назвали Яваскрипт, чтобы подмазаться к Яве, как к «старшему брату», и, опять-таки, по соображениям «конкуренции» выпустили язык раньше, чем он был готов.
...
Тут же в игру вступил Майкрософт, который спиздил язык с точностью до ошибок и назвал его «jscript». Копирование с точностью до ошибок было нужно для полной совместимости с конкурирующим браузером.
...
Потом началась война браузеров, Майкрософт победил и забил на развитие IE, после чего «всякие аяксы» и прочие красивости появились только потому, что была пятилетняя передышка в «браузерной войне», и разработчики научились жить с тем, что есть, в том числе и обходить разное поведение в разных браузерах с помощью фреймворков.
...
Наглядный пример, почему вся эта «конкуренция» не работает: наивно подразумевается, что в борьбе за потребителя капиталисты будут делать свой товар все лучше и лучше.
...
Ага, щас.
...
«Делать товар лучше» — не самоцель, а один из способов завоевать потребителя, причем самый сложный. Ну, это как с бабами: для того, чтобы завоевать сердце женщины, надо быть чисто реальным рыцарем, переводить бабушек через дорогу и помогать котятам.
...
Гораздо проще же женщину просто купить, обмануть или тупо выебать, пока теплая.
...
«Даже» Apple хочет сделать из тебя прежде всего лояльного зомби, самоцели «сделать хороший товар, а уж потребитель разберется, почему он хороший» не стоит.
...
Способ «сделать товар лучше» все еще работает, но в последнюю очередь. Ну, хорошо, что вы выберете — рекламу или шанс сделать товар лучше?
...
Что лучше — снизить издержки на производство и сэкономленные деньги пустить на рекламу или снизить цену на товар на сэкономленную сумму, чтобы потребитель был — хахаха — счастлив?
...
Так мы и пришли к тому, что 99% стоимости товара занимает реклама, которую потребитель не столько смотрит, но и с радостью оплачивает.
...
Понятно, что в идеальном мире на этом месте была бы кооперация («а давайте вместе делать лучший в мире клиентский язык!»), которая в результате и победила в той или иной степени (бесплатные фреймворки — чем не кооперация?), но ценой отставания на десять лет, да и то потому, что большим игрокам стало, в общем-то, просто на это похуй.
...
«Разрешили детям поиграться».
...
Ну и вообще удивительно, сколько мирового зла выходит из-за какого-нибудь педрилы из маркетинга, который придумал, например, в адресах писать «www.», превращая таким образом домен второго уровня зачем-то в домен третьего со всеми сопутствующими проблемами.
...
Время тоже все расставило на места, но никто не сможет подсчитать, сколько человековеков простых вебразработчиков было на это убито.
...
Пока человечество не доросло до кооперации «для фана», нужен какой-то внешний общий враг и трудовые лагеря, чтобы доростало.
...
Это, я вам напоминаю, была заметка про веб-девелупмент.
...
Если вы хотите, что следующая заметка была про веб-девелупмент, оставьте глупый комментарий, если про геймдизайн — то умный.
(еще 26 слов)
Ресурсный подход: лечение
Продолжаем разговор про ресурсы.
...
Если мы возьмем ММО, возьмем там «здоровье» и сделаем всё лечение не вида «восстанавливает 1000 здоровья», а вида «восстанавливает N% здоровья», то получим огромную кучу побочных эффектов, главным образом приятных.
...
1. Хилер будет ролью, а не билдом.
...
2. Не надо будет делать «хилерские» предметы, но предметы, которые нравятся хилерам, будут все равно (haste, снижение кулдаунов, регенерация маны и прочее).
...
3. С хилера снимется стрессовая нагрузка: если кто-то в группе умер, то сам дурак — плохие шмотки, мало здоровья.
...
Да, при этом требования к шмоткам остальных членов группы ужесточаются.
...
Скажем, босс наносит всем повреждения вокруг себя в абсолтных цифрах («1000 повреждений»), а хилер лечит в процентах. Если ты лох и у тебя всего 1001 здоровья, а хилер лечит только на 50% за раз, то следующий удар босса ты не переживешь. В старой модели крутой хилер мог тебя вылечить на 10000 за раз.
...
Это вызывало, конечно, лишний стресс у хилера (тяжело смотреть, когда у человека остается единица здоровья), но кого волновало чужое горе?
...
Мы снимаем жесткие требования к хилерам, которыми и так мало кто играет, и ужесточаем их для остальных идиотов.
...
По-моему, хороший обмен.
...
4. Хилеры перестанут быть не убиваемые в ПвП, только если не будут набирать много-много здоровья, но это нормально — остальным классам тоже надо много-много здоровья, чтобы выживать в ПвП.
...
(Ну и заодно заработают способности с процентными повреждениями, которые не работают в текущей парадигме. Например, в WoW-е есть способности, типа «если у цели меньше 20% здоровья, вы можете ее добить, нанеся туеву хучу повреждений», предназначенные в том числе и для борьбы с хилерами в PvP. Сейчас они, понятно дело, не работают, так как у хилера есть только два состояния: мертвый без маны или с 100% жизнями).
...
5. Можно делать приятных гибридов. Например, «хилер», у которого есть только один лечебный спелл: «восстанавливает 10% здоровья каждую секунду в течение 20 секунд» (при этом эффективность у остальных хилеров не превышает эти 10% суммарно в секунду).
...
Такой «хилер» может повесить это лечение на танка и следующие 20 секунд заниматься нанесением повреждений.
...
Или «хилер-танк» (привет, паладины!) — что раньше хотели сделать в WoW — в такой парадигме делается очень просто: у танка есть лечение, применимое только на себя, и которое восстанавливает те же 10% здоровья в секунду и есть мелкое лечение на группу, либо «ручное», либо «автоматическое», вида «каждый удар врага по вам восстанавливает 1% здоровья всем членам группы».
...
Это лечение не отвлекает, при этом танку все так же надо собирать шмотки с +жизнью и делать так, чтобы монстры атаковали его.
...
«Обычные» хилеры балансируются при наличии «танка-хилера» тоже просто: например, делаем так, чтобы «паладин», который лечит себя, получал уменьшенное лечение от других источников, чтобы не вышло, что в группе два хилера по цене одного.
...
6. И — да — это все очень легко балансируется.
...
...ну так далее.
...
А ведь мы всего взяли один ресурс с одной механикой и поменяли там абсолютные цифры на относительные.
...
У какого-то неизвестного русского геймдизайнера читал как-то в блоге перевод типа известного зарубежного (этот неизвестный русский только переводами и занимается, вместо того, чтобы заниматься геймдизайном!).
...
Так вот, известный зарубежный советует — дословно не помню — «изучать новые появившиеся свойства», что примерно то же самое, только менее осознанно, то есть геймдизайнер случайно делает один спелл, который «лечит проценты», потом останавливается и глубоко задумывается, какую же херню он натворил, и к чему это приведет.
(еще 34 слова)
Ресурсный подход
Давно хотел описать простую методику «для геймдизайнеров», но быстро понял, что это будет, как «рисуем круги — а потом рисуем остальную ебаную сову».
...
Игра — это конфликт, лучший конфликт можно устроить на пустом месте просто с помощью борьбы за ресурсы, причем не обязательно против другого игрока, достаточно компьютера.
...
Ресурсом, помимо золота-брильянтов, может быть любая сущность, которой надо управлять, грубо говоря — «которой не хватает», от банального здоровья, маны, места в инвентаре до кулдаунов, размера войск, патронов, изношенности предметов, ходов, времени, и так далее.
...
(Да, «у нас в игре 100 видов оружия» — это не ресурс, а маркетинговый питч. Оружие при этом может быть «транспортом» или интерфейсом для других ресурсов: износ, специализация, скорость атаки, характеристики персонажа и прочее.
...
Ну, например, предметы в LoL-е являются «переносчиком» характеристик, плюс завязаны на ресурс «деньги» и ресурс «место в инвентаре». Собственно, они даже традиционными предметами не являются, если обозвать их как-то по-другому, ничего не изменится).
...
Ресурсы бывают двух типов: «игровые» и «системные».
...
Игровые — это то, чем люди, собственно, играются, системные — то, без чего игра развалится. Например, «глобальный кулдаун» в WoW: после применения каждого спелла («заклинания», если по-русски) вы не можете применять любой другой в течение ~1 секунды. Это — вещь сугубо системная, которая не дает применять спеллы один за другим с нулевой задержкой.
...
Так как глобальный кулдаун довольно короткий, он несет в основном чисто техническую роль (борьба с лагами, например), к тому же спеллов есть свои, уже «игровые», ограничения, включая собственные кулдауны и время применения.
...
Опять-таки, на примере глобального кулдауна видно, что любой системный ресурс рано или поздно переползает в игровые, где пугает игроков своей инородностью: появляются способности, типа «снижает глобальный кулдаун с 1.5 до 1 секунды», некоторые спеллы, которые подразумевают применение сразу после них других спеллов (что-то типа «после применения X, ваш следующий спелл получает Y»), появляется «отвязка» от глобального кулдауна, исключения, и прочее.
...
Я верю в то, что системные ресурсы надо прятать как можно глубже и не давать им лезть в игровую систему до последнего. В конечном итоге способности, типа «снижают глобальный кулдаун на 0.5 секунд» дают просто прирост повреждений за единицу времени, так что игроку лучше дать тот же самый прирост как-то по-другому, более понятным способом.
...
Первый шаг — выписывание на бумажке всех ресурсов.
...
Самое сложное поначалу — понять, что является ресурсом. Я вообще некоторые концепты начинал просто с перечисления ресурсов (и ими же заканчивал, хаха). Например, мой концепт космического симулятора состоит из одних ресурсов и связанных с ними механик, и симулятор отличается от тысячи других именно этим, а не графикой кораблей.
...
Я хотел уйти от «дрочки на таблицы» и сделать единицу ресурсов, натурально, единицей (т.е. для постройки корабля нужна 1 штука железа и 1 штука урана, а не 1000000), при этом для добычи каждой единицы надо попотеть, делая какие-то смысловые усилия, соотвественно, все ресурсы помнишь наизусть. Механики, типа «постройка этого увеличивает добычу этого на 0.01%» теперь просто не имеют смысла.
...
А потом вышли седьмые «Сеттлеры» именно с таким же «поштучным» подходом с ресурсам, и сразу стало можно приводить их в пример.
...
Второй шаг — комбинации ресурс+механика.
...
После того, как ресурсы выписаны, каждому надо написать список механик, которые работают с этим ресурсом, начиная с атомарных и примитивных.
...
Для тех, кто не владеет интуицией или памятью, можно вообще составить таблицу, в которой по горизонтали — ресурсы, а по вертикали — известные человечеству механики и поискать смешные пересечения.
...
Ну, например, ресурс — «жизнь».
...
Механика «убавление» — это повреждения, «прибавление» — это лечение, «обмен» — это, например, оплата заклинаний здоровьем, а не маной.
...
Пока все просто, возьмем ресурс «кулдауны».
...
Механика «убавление» — это, например, предметы в LoL-е, типа «снижает кулдауны на 10%», или способности в WoW-е, типа сброса кулдаунов. «Прибавление» — хороший вариант для дебаффа, типа «вы получили лопатой по голове, поэтому кулдауны на ваши способности увеличены на 20%». «Обмен» — это shared cooldown, когда применение одной способности запускает кулдаун аналогичной/противоположной.
...
Механики не обязательно писать сразу все, их можно выводить в процессе: очевидно, что у жизни есть «убавление». Значит, можно попробовать поприлеплять «убавление» к другим ресурсам и посмотреть, подходит ли, и что получилось.
...
Хорошо, если таблица получится компактной и «плотной»: если у нас есть 10 ресурсов и 10 механик, и у каждого ресурса есть пересечение с каждой механикой, то пользователю надо запомнить всего 10+10=20 сущностей, которые дают в результате 10*10=100 комбинаций.
...
Если же у нас 50 ресурсов и у каждого всего по две механики, то в результате запоминать надо уже 50+2=52 сущности, но дают они все те же 50*2=100 комбинаций.
...
Иными словами, лучше всего вводить не новые сущности, а как можно больше их комбинаций.
...
Третий шаг — поиск «неуникальностей».
...
Ищем комбинации ресурс+механика, которые делают то же самое, что другие комбинации. Неудачные/непонятные комбинации просто удаляем.
...
Самая распространенная ошибка — переизбыток одинаковых ресурсов, которые делают одно и просто создают иллюзию «стратежности». На эту иллюзию даже ведутся некоторые «любители стратегий», что удивительно.
...
Менее наглядная ошибка — когда для поставленных целей используются не те ресурсы.
...
Например, механика haste, которую в WoWе прикрутили к неправильному ресурсу и долго мучились.
...
Haste «позволяет делать больше действий за тот же период времени». По-русски — «ускорение», ага.
...
Сначала haste увеличивала скорость автоатаки. Потом внезапно оказалось, что автоатака есть не у всех классов, haste стала ускорять время применения спеллов. Потом оказалось, что есть спеллы с нулевым временем применения, то есть мгновенные, но с отложенным действием, типа «цель получает 10 повреждений каждые 2 секунды в течение 20 секунд». Haste стала стараться снижать эти 2 секунды. Остались просто мгновенные спеллы, типа «цель получает 100 повреждений мгновенно», на них haste не влияла никак. Следующий щаг — прикручивать ее и к global cooldown-у. Ну и так далее.
...
Проблемы полезли отовсюду: например, есть «вредные» спеллы, сбалансированные длительностью применения. Скажем, fear применяется 1.5 секунды, за которые чисто теоретически враг успевает среагировать и принять меры.
...
Haste ускоряла это время, скажем, до 0.75 секунд. В результате «чисто математически» за 10 минут можно применить в 2 раза больше fear-ов, «чего и добивались», но значение-то имеет время применения одного fear-а, на которое теперь нельзя было среагировать, потому что 0.75 секунд — это мало.
...
Спустя пять лет геймдизайнеры WoW-а, наконец-то, осознали, что haste просто позволяет делать больше действий за тот же период времени и начали имитировать желаемый конечный эффект более правильными способами.
...
У меня (в те далекие времена, когда я еще разрабатывал ММО) было два варианта, как сделать правильный haste. Первый вариант — это увеличивать регенерацию «маны» в зависимости от haste. Логика простая: больше маны за период времени — больше вещей за период времени можно сделать. Так это ж натуральный haste!
...
Близзард в результате сделали примерно так же.
...
Второй вариант уже описан выше. Это — правильно! — снижение кулдаунов. Чем короче кулдаун, тем чаще спелл можно применить. Так это ж натуральный haste!
...
Примерно так «дубликаты» и «отлавливаются»: они в конечном итоге делают одно и то же, пусть даже и выглядят по-разному.
...
Четвертый шаг — поиск «тупиков».
...
Тупики — это комбинации ресурс/механика, которые «висят» в воздухе и не поддерживаются сопутствующими механиками. В особо запущенных случаях без опоры могут висеть просто ресурсы или просто механики, часто это выглядит, как «мы хотели сделать, но не успели».
...
Например, игра Stalker, в которой есть поломка предметов, но нет починки, есть ночные миссии, но нет ускорения времени.
...
В WoWе таким ресурсом оказалась скорость оружия.
...
Все proc-и (случайные события) зависели от скорости оружия и имели вид, типа «когда вы наносите повреждения оружием, вы имеете 5% шанс нанести 1000 дополнительных повреждений».
...
В качестве абсурдного примера — в результате побеждало оружие, имеющее 0 собственных повреждений и бесконечную скорость.
...
С другой стороны, многие специальные удары имели вид, типа «вы наносите 200% повреждений оружия», поэтому медленное оружие имело преимущество.
...
(Медленное оружие бьет редко, но сильно, в результате средняя скорость не такая уж и большая, но повреждения от одного удара — большие, способностям же, типа «наносите N% повреждения оружия» была не важна скорость).
...
Таким образом, скорость оружия вступала в противоречие с главной характеристикой — повреждениями от оружия, часто было так, что более слабое оружие было выгодней использовать из-за его скорости.
...
Это было контринтуитивно по многим причинам, например, из-за невозможности без калькулятора вычислить это преимущество или из-за того, что с ростом уровня у оружия повышаются именно повреждения, но не скорость, и часто были ситуации, когда оружие низкого уровня оказывалось «круче» оружия более высокого уровня — из-за скорости.
...
И ту и другую проблему починили — proc-и теперь имеют определенный шанс срабатывания в минуту, а способности используют «нормализированное» повреждения от оружия, то есть не силу одного удара, а «силу среднего удара во времени».
...
Изменились и другие механики, завязанные на скорость оружия (heroic stike, pushback и прочее).
...
В результате скорость просто перестала иметь значение, с некоторыми небольшими оговорками. Недавно один из геймдизайнеров ВоВа таки сознался, что можно было бы обойтись и без скорости оружия.
...
Итого:
...
1. Выписываем ресурсы.
1.5. Помечаем системные, и не даем им в будущем стать игровыми.
2. Выписываем механики.
3. Ищем избыточные сочетания, удаляем.
4. Ищем недостаточно убедительные сочетания, удаляем.
5. Добавляем новое, если вы знаете, что делаете.
...
Пятый пункт — самый опасный, потому что после него надо все переделывать.
...
Вообще же, данная «методика» нужна не только для того, чтобы ничего не пропустить, но еще и для того, чтобы не пропустить лишнее, в идеале в конце работы должно получиться меньше «материала», чем в начале.
...
Похожая, но в разы более простая методика избавления от всяких legacy систем, называется «зачем это?».
...
Надо пройтись по каждому ресурсу — ну или «фиче» — и спрашивать себя «зачем это?».
...
Аргументы, типа «так все делают» или «поэтому что это есть в...» не проходят, потому что обычно там прячутся фичи, которые были в проекте X, потому что были в проекте V, куда они попали, потому что были в проекте T и S, оттуда — из проекта R, и так до самого конца, а в проекте A эту фичу впервые написал программист на коленке, оставленный без присмотра менеджером на несколько минут (да в те далекие времена и менеджеров-то и не было).
...
Именно на отлов таких фич и направлена методика «зачем это?»™.
...
Даже если ее применять ко всякой привычной ерунде, типа аптечек, жизни, лечению, то можно достичь неожиданных результатов, как, например, убирание здоровья вообще (как в современных шутерах).
...
Раз уж мы говорим про WoW, в качестве примера выкидывания лишнего можно взять характеристики до 4.0.1 и после и провести простой ретроспективный анализ.
...
(WoW — как пример упрощения, который ничего не поменял (кроме улучшения восприятия), а не как пример хорошей системы.
...
Раньше было ~15 характеристик, сейчас стало ~3. Сложность системы от количества характеристик не поменялась, потому что куча характеристик дублировала друг друга (типа сила — сила атаки).
(еще 141 слово)