Несыть :: На собственных ошибках
Некоторые вещи просты. Некоторые вещи очевидны. Некоторые же настолько элементарны, что воспринимать их всерьёз можно научиться только на собственном опыте. Проект продолжает развиваться, и пришло время выносить некоторые уроки из этого процесса.
Не пугайтесь, я просто демонстрирую очередной релиз версия 2.2 (23 МБ), который собираюсь толкнуть на удачно подвернувшийся конкурс. Буду благодарен любому виду обратной связи, особенно оперативной — сегодня последний день на подачу заявки, возможно я что-то успею ещё поправить.
Что нового? Немного важных для меня мелочей… :)
1. Игра доступна на двух языках — русском и английском
Кажется, что в прошлый релиз уже был двуязычным, но на самом деле это не так. Вроде бы очевидно, что если делаешь игру для иностранцев, то тестировать её нужно тоже хотя бы на одном из них. К сожалению показать игру единственному знакомому мне руссконеговорящему человеку (Фрэну, разработчику Unepic), я догадался недели через две после сдачи проекта на конкурс Intel Level Up 2011. Выяснилось, что перевод из UTF-8 в однобайтовую собственную кодировку (индекс буквы в растровом шрифте символов на 200) средствами WinAPI я написал так, что работает он только в винде с установленным русским языком (кодовой страницей windows1251).
Эпик фэйл! Всё, что смогли увидеть интеловские отборщики проектов, это толпы вопросительных знаков вместо текста в обоих языковых версиях игры. Моя подборка тестеров оказалась не репрезентативной — все они были русскоговорящими. Результаты конкурса уже опубликовали, нас там нет. Прошу прощения у всех, кто участвовал в подготовке «Несыти» на Level Up — по моей вине у нас не было даже призрачного шанса на победу.
В этом релизе я больше не связываюсь с системными функциями и перевожу в свою кодировку из UTF-8 простой таблицей соответствия. Дешево и сердито.
2. Управление червём продублировано на мышке.
Ещё до объявления результатов LevelUp’а мне на почту написал человек, который по некоторым причинам не может пользоваться клавиатурой, но при этом управление мышкой ему вполне доступно, хотя и не очень традиционным образом. Саша попросил продублировать управление и я не увидел причин этого не сделать. Я пробовал играть тем же манером, но надолго меня не хватает — тяжело с непривычки.
Это урок на тему «если можно сделать различные способы управления, то их стоит сделать». Попробуйте представить, сколько игр с Гамина оказывается недоступно Александру Зенько из вышеприведённого видео? А сколько из них действительно невозможно перевести на управление мышкой? К экзотическим устройствам управления, эмулирующим работу клавиатурой и мышью, добавляются люди с экзотическими предпочтениями и возможностями. Конечно, невозможно сделать игру для всех, но если концепция игры позволяет, то я за максимально широкий диапазон способов управления. Назначение управления — раз, дублирование управляющих кнопок на клавиатуре — два, дублирование мышки и клавиатуры — три.
В данном релизе управление мышкой такое: движения влево-вправо аналогичны нажатиям стрелок влево-вправо, левая кнопка мышки — режим резких поворотов, правая кнопка мышки — торможение.
Вдогонку — я упростил набор скорости в целом. Разгон с нуля теперь более интенсивен. Ветеранам всё равно, а новичкам легче.
3. В игре работают мультимедийные клавиши управления громкостью.
После получения баг-репорта от harvey я был вынужден сменить свою старую клавиатуру на новую, чтобы протестировать работу эти кнопок. И это оказалось невероятно удобно! :) Теперь я пользуюсь ими практически постоянно, а раньше считал все дополнительные кнопки, в общем-то, маркетинговой придурью. Урок на тему того, что не стоит пренебрегать чужим опытом.
Кстати, багу со странным управлением громкостью я тоже, вроде как, выловил. Если проблемы с уровнем и его регуляцией остались — пожалуйста напишите мне.
4. Индикатор скорости заменён на индикатор размера червя.
Кто-нибудь смотрел на старый индикатор скорости-ускорения в прошлых релизах? Я тоже. Он имеет изящную концепцию и неплохо выглядит, особенно в динамике, вот только обладает одним недостатком — он неинформативен.
На самом деле визуально оценить скорость по растущей стрелке сложно, не кирпичики же считать? Ускорение применяется до довольно сложному для быстрого схватывания закону, поэтому индикация его наличия или отсутствия только путает. Индикатор массы слишком похож на счетчик целей миссии, двое пользователей на тестовых прогонах их путали (коллега на работе и моя жена :).
Теперь я визуализирую три параметра: длину червя, размер его головы относительно первоначального, и факт того, что червю откусили хвост и пока он его не нарастит увеличение в размере останавливается. Первые два параметра просто полезны и понятны, последний просто критичен.
А теперь, по традиции, случай из жизни и мораль. Ни игроки, ни десяток тестеров, ни я сам — никто не заметил в прошлом релизе, что пока червь не наберёт длину в 20 звеньев (это треть от максимальной длины) он не растёт. Совсем. Просто остаётся первоначального мелкого размера. Первоначальный набор длины хвоста формально не отличался от наращивания откушенного и рост блокировался. Пока я не сделал индикатор, я просто не замечал этого факта. Визуализация, это очень важно.
Теперь червь растёт на начальных этапах набора веса, что, во-первых, упростило игру, так как скорость роста еды я не балансировал, а, во-вторых, на треть увеличило максимальный размер червя. Потом я всё поменяю, но пока игра стала легче и дружественней к новичкам, а черви толще.
Кроме того исправлена и нестабильная ошибка с блокировкой роста червя, о которой время от времени сообщали разные игроки. Фишка была в том, что если у червя отъедали хвост с «зоной роста» (звеном в основании или в конце хвоста, под которым появляются новые звенья) в момент наращивания и этот хвост валялся не съеденным, то процесс наращивания новых звеньев блокировался.
Всё. Разве что могу показать список фишек, которые выписал себе для реализации. На три четверти он состоит из ваших идей, друзья, любезно предоставленных в комментариях к предыдущему релизу. Спасибо!
- Бонусы. Случайно появляющиеся на карте бонусы. Ягодки различных цветов или одного цвета, но с разными контрастными узорах-буквах-иероглифами (чтобы не слишком пестрило).
- Винтаж-1. Червь игрока начинает поедать при столкновении свои собственные части. Отрицательный бонус.
- Винтаж-2. Червь начинает перемещаться и управляться как традиционная змейка — все время ползти прямо и поворачивать под прямыми углами. Отрицательный бонус.
- Подсветка. Те, объекты, которые червь может проглотить прямо сейчас подсвечиваются явным образом. Положительный бону.
- Акселерация. При поедании червь набирает массу в два или три раза более эффективно. Положительный бонус.
- Мгновенный рост. Червь сразу получается некоторое количество добавочного веса и размера. Положительный бонус.
- Спринт. Червь увеличивает свою максимальную скорость, но в два раза менее эффективно наращивает массу. Балансирующий бонус.
- Аппетит. Эффект противоположный ярости — скорость замедляется, эффективность поедания увеличивается. Балансирующий бонус.
- Одеревенение. Углы поворота червя становятся сильно более плавными. Отрицательный бонус.
- Уроборос. Главный босс — двухголовый червь, произвольно меняющий направление движения, в зависимости от того, какой стороной ему ближе ползти к цели. Можно перекусить пополам (толщина у него везде одинакова), две половины отращивают хвосты и ведут себя подобно обыкновенным червям.
- Шкала ярости. При поедании чего-либо увеличивающийся показатель «ярости», постоянно уменьшающийся с течением времени. По достижении определенных уровней ярости на червя начинают последовательно накладываться положительные бонусы — 1) подсветка съедобных объектов, 2) увеличение скорости, 3)увеличение эффективности поедания.
- Индикация бонусов. Действующие в данный момент на червя эффекты должны отображаться в виде пиктограмм в специальной области (скорее всего в левом нижнем углу).
- Экраны на карте с отладочной информацией и переключателями. Полупрозрачные прямоугольные области произвольного размера, с опорой на четыре ноги. Находятся выше основного уровня и проецируют на себя отладочный вывод (габаритные круги, клетки, и прочая). Кроме антуражной функции могут являться переключателем, срабатывающим, при попадании головы червя во внутренний периметр. Что-то типа того:
- Карта нижнего уровня. Полностью независимая карта, находящаяся ниже текущего уровня, которую видно только через специальные окошки (полупрозрачный вид ландшафта). Отображается с некоторым параллаксом, содержит в большинстве случаев просто каких-то насекомых, но иногда может содержать и червей. Просто параллельный уровень полностью управляемый AI.
Тут, конечно, не всё, только то, что смог более менее внятно для себя сформулировать. Нет ни «броска» червя, ни идей новых существ, ни идей уровней. Это я потом. А пока ссылка на релиз для тех, кто не заметил её в первом абзаце:
- 08 июня 2012, 14:14
Поиграл. Управление адовое, еле тлей догоняю. А они огромные все, червь их не жрёт. Потом зелёная титанических размеров змея меня сожрала. Выйти из игры эскейпом не смог, пришлось альт-табом.
Хм... Этот релиз - самый казуальный из имевшихся. :(
Ты стопудово пытаешься нервно дёргаться червём со страшной скоростью. А правильно ползти плавными крупными петлями - так ты будешь набирать нормальную скорость. Комментарии Жеки на первом уровне не читал, так ведь?
По эскейпу должно всплывать игровое меню - у тебя не сработало?
Да, эскейп не сработал. Возможно это вина Wine'а. Вина в вине, скажем так. :)
А про ползание. Да, возможно и дёргаю. Но это естественная человеческая реакция: если хочется ползти быстрее, то нужно дёргать быстрее. Это, скажем так, от природы заложено. Если чтобы ползти быстрее нужно двигать медленнее, то это не очевидно игроку, и противоречит его(моему тоже!) жизненному опыту.
К тому же этот червяка не поворачивает нормально. А то бывает и сам куда-то в сторону уползает: я ему влево, а он вниз ползёт, например.
Да вроде всё работает
Хм, видимо у меня и множества других тестеров отсутствует нормальная человеческая реакция) говори за себя и за тех, в ком уверен, а не за всех сразу)
Поворачивает он нормально, ты ему просто мешаешь.
Хм... Вроде с тех пор, как я заменил DInput обработкой WM_INPUT под вайном клавиатура вообще работать перестала. Сам не проверял - со слов очевидцев. Удивительно, что у тебя вообще что-то заработало. :)
В том, что нужно не ускоряться а замедляться основная проблема обучения управлению. Как видишь те, кто прошел этот порог дальше просто не замечают проблем, я в том числе. Помогает давать новичкам и смотреть за тем, как они обучаются. Но у меня не так много средств - удлинил первую задачу и добавил три коммента от Жеки про плавность. Но их можно просто игнорить и всё. Думаю над тем, чтобы рисовать на первом уровне "эталонную" траекторию, по которой игроку нужно сначала проползти.
Вниз ползёт вместо влево, если натыкается на край карты или препятствие - у него рефлексы такие. Я не могу просто остановить червя при столкновении, это не танк, ему мгновенно стопиться неестественно, приходится придумывать "отворачивающие" рефлексы.
По поводу замедления - именно так и водят машину, никто руль во все стороны не дергает и педаль не долбит, потому нет здесь общечеловеческой проблемы.
Хм... Но первая реакция у тех новичков, которых я наблюдал железобетонная - пкпкпкпкпкпкпкпкпкпкпк... ААА! пкпкпкпкпкпкпкпкпкпк... :)
На счёт Wine'а не заморачивайся особо, думаю. Линукс это довольно редкий случай. Тем более тут как раз пригодится управление на одной мышке. ;)
А по поводу управления.
Как у тебя программа различает, что вот это моё движение влево - это я хочу ползти вперёд и делаю зигзаг, а вот теперь моё движение мышкой влево - я хочу повернуть влево?
Мне кажется, у меня именно с этим была основная проблема. Потому что и движение вперёд, и поворот влево-вправо - на одних и тех же движениях мышки: влево-вправо. Как игроку предполагается их различать?
А никак же. Просто чуть дольше держишь кнопку поворота — он и поворачивается. Это даже интуитивнее, чем научиться просто двигаться по прямой.
Боюсь ты заподозрил моё управление в большей интеллектуальности, чем в него заложено. Пока ты двигаешь мышкой вправо, с любой скоростью, червь поворачивает вправо с максимально доступной для него скоростью. Как только начал двигать мышкой влево, червь поворачивает влево, тоже максимально быстро. Всё. :)
А я сам то должен отличать.
Что вот это я двигаю мышкой влево чтобы повернуть, в вот теперь я двигаю мышкой влево, чтобы ползти вниз, прямо.
Да как? В любом случае движение мышки влево - поворот. Просто, чтоб ползти прямо, повороты вправо и влево должны быть одинаковыми, чтоб повернуть - одного из них должно быть больше.
Это я так оооочень долго привыкал к управлению в гта, когда машина едет вниз. В мозгу никак не укладывалось, что кнопка "влево" поворачивает машину влево относительно машины, а не меня.
Поэтому тут это скорее дело привычки, всем не угодишь. И раз уж Козинака хочет всего и побольше, то можно сделать всю эту детальную настройку управления в меню или же на первом уровне дать испробовать все ваианты и выбрать самый удобный.
Траекторию рисовать - игрока за дебила считать.
Тут важно не то, что можно по волнистой линии ползти, важен размер петель. Не уверен, что скорость с которой человек догоняет, что нужно поворачивать плавнее зависит от интеллекта или образования. :)
Можно именно наблюдать за игроком. Если он ползает быстро, то все хорошо, никаких действий. Если же он «тормозит», то выводить настойчивые подсказки, возможно, интерактивные, типа подсвечивающихся когда надо кнопок.
Заметьте, я на момент написания этого комментария не видел аналогичного комментария Козинаки :-)
Хм. Это идея! Можно тупо мерять сколько времени на первом уровне проходит между сменой направлений и если слишком мало, то выводить какой-нибудь индикатор прямо около червя, в стопроцентной зоне видимости. Что-нибудь типа "ПЛАВНЕЕ!", "НЕ ТАК РЕЗКО!" и т.д. Вспыхивающие и плавно исчезающие надписи.
Вообще-то, меню через пробел вызывается.
Даже не притронулся к ескейпу.
Тут фишка в том, что игра не в винде, а в эмуляторе винды запускается. А так меню можно вызвать эскейпом, пробелом, ентером и двойным кликом мышки. :)