Давненько я не описывал прогресс, а его накопилось достаточно. Я даже не всё опишу из того, что сделал, потому что кое-что ещё не готово (хотя доступно для проверки).
Итак, что входило в
первую очередь:
1. Поддержка 8 вариантов нетхака: 3 версии ванили и 5 форков.
2. Поиск мобов по названию
3. Вывод карточки моба в трёх степенях подробности
Что вошло во вторую очередь:
1. Режим вывода списком (таблицей).
2. Таблица поддерживает два независимых поля для сортировки, в обоих направлениях.
3. Таблица поддерживает фильтры, которых существует четыре типа.
Репозиторий с проектом:
github.com/zHz00/nethack_external_pokedexИтак, чтобы переключиться в режим таблицы, надо нажать TAB. После этого все мобы текущего варианта NetHack будут видны сразу:
(читать дальше)Зачем этот режим нужен? В образовательных целях. Режим поиска позволяет найти того моба, имя которого вы знаете. Но если вы не знаете, что ищете, и хотите просто посмотреть, что есть, то режим списка позволит вам увидеть ВСЕХ мобов. Другое дело, что ориентироваться в списке из нескольких сотен мобов может быть непросто, но для этого я кое-что придумал, об этом ниже.
К сожалению, не все свойства можно вывести в эту таблицу. Но я постарался вывести все числовые параметры. Только размер мобов выводится мнемоникой вместо числа. Для тех, кто не может догадаться, что это значит, есть простое правило: буквы маленькие для маленьких размров, и заглавные для больших размеров.
Таблицу можно листать привычными клавишами стрелок, PgUp/PgDn, Home/End. Если кто-то помнит, в первой версии на PgUp/PgDn была повешена смена варианта. Но это вступало в конфликт с интуитивным листанием списка. Поэтому теперь смена варианта происходит по квадратным скобкам, а PgUp/PgDn занимаются своей типичной работой.
Как видно, один из монстров выделен. Это значит, что его можно просмотреть. Если нажать Enter, откроется обычная карточка, как и в режиме поиска. Можно даже переключать вариант в режиме просмотра карточки, но при возврате к списку подгружается предыдущий вариант. Это сделано для того, чтобы не сбивать пользователя с толку.
Порядок вывода монстров соответствует тому порядку, который задали разработчики варианта при составлении таблицы мобов. В целом, порядок алфавитный — по букве монстра, но специальные мобы, типа квестовых боссов, идут скопом в конце. Поэтому искать нужных мобов в списке не всегда удобно.
Для того, чтобы было удобнее работать, я добавил сортировку списка. Нажав Ctrl+S, вы можете выбрать любое из отображаемых полей, чтобы сортировать по нему.
Допустим, вы хотите посмотреть, какие мобы в игре самые быстрые. Тогда надо выбрать сортировку по Move Speed (и сразу поменять направление по Ctrl+D). Проблема сортировки по полю, где есть много повторяющихся значений, состоит в том, что придётся вручную глазами искать нужного моба среди нескольких рядом расположенных. Сравнивать мобов непросто. Хотелось бы, чтобы они тоже выводились по порядку. Для этого есть вторичное поле сортировки, вызываемое по Shift+S. Окно выглядит точно так же, и список параметров точно такой же. Если вы выберете, допустим, сложность моба, то внутри скорости мобы будут отсортированы по сложности, что позволит быстрее оценить, кто есть кто в этом списке. Вот пример сортировки по двум полям:
Мобов со скоростью выше 24 всего две штуки, но вот 24 (2 действия на ход) — уже довольно рядовая скорость. Тут вторичное поле сортировки — сложность, поэтому самые сложные мобы расположены в конце.
Благодаря сортировке вы можете посмотреть на самых быстрых и самых медленных мобов, посмотреть, кто даёт больше опыта, кто чаще всего генерируется. Возможностей здесь полно, и определяются они задачей, которая перед вами встала.
Но сортировки не всегда достаточно. Чтобы уменьшить список выводимых мобов, я предусмотрел режим фильтрации. Он содержит четыре типа фильтров, которые можно включать и выключать, а также задавать им параметры. К сожалению, в текущей версии каждый фильтр может существовать в единственном экземпляре, и поддерживается только один способ взаимодействия фильтров — логическое И. Т.е. если вы включите сразу два фильтра, то отображаться будут только те мобы, для которых оба критерия выполняются. Все фильтры применяются мгновенно, после ввода значения или выбора из списка. Чтобы отключить фильтр, можно нажать пробел.
Вот какие типы фильтров я подготовил:
1. Фильтр по букве. В принципе, он вообще не нужен, т.к. сортировка по букве дублирует его функцию. Просто листать список придётся чуть дольше. Но это может быть удобно. У этого фильтра есть особенность. Чтобы его сбросить, в поле ввода желаемой буквы необходимо ввести звёздочку.
2. Фильтр по имени. Этот фильтр аналогичен использованию режима поиска, но результаты теперь выводятся вертикальным списком вместо горизонтального, и для открытия моба надо нажать энтер. Кому что удобнее.
3. Фильтр по приобретаемым свойствам. Если вы хотите узнать, какой моб даёт сопротивление огню или холоду, воспользуйтесь этим фильтром.
Так вы сможете узнать, каких мобов надо искать, чтобы получить определённый резист. Вот, например, выбор шок резиста. Всего 13 мобов могут дать шок резист:
4. Фильтр по числовым параметрам. Этот фильтр не поддерживает неравенства типа "показатель Х должен быть больше чем У". Вместо этого при нажатии энтера пользователю предлагается ввести два граничных числа. Далее будут выведены все мобы, для которых показатель расположен в указанном диапазоне (включительно). Это позволяет, например, отобразить всех нейтральных мобов, или всех уникальных мобов. Если вы знаете, какая сложность текущего уровня, можно отобразить мобов со сложностью от нуля до заданной, чтобы увидеть, кто сейчас может сгенерироваться. Вот пример фильтра по уровню вероисповедания, выводящий всех нейтральных монстров:
Числовой фильтр поддерживает также те поля, которые не отображаются в таблице, а именно специальные поля dNetHack, insight и light_radius. Таким образом, можно посмотреть список всех светящихся мобов, задав радиус света от 1 до 1000, например. Конечно, надо задавать достаточно большое число, т.к. если найдётся моб с радиусом больше 1000 (таких нет), виден он не будет.
Вот и всё на сегодня. Следующими ближайшими функциями будут:
1. разбор атак (уже работает в 3.7.0): показывает точные игромеханические последствия той или иной атаки. Например, объясняет, каким образом и с каким шансом будет происходить окаменение при контакте с василиском в зависимости от типа контакта.
2. фильтры, часть 2. Текущих фильтров явно недостаточно для поиска интересных мобов. Будут добавлены фильтры по разным другим полям, включая типы атаки и флаги. Не думаю, что я сделаю полноценный редактор, но задать комбинированный фильтр по нескольким произвольным полям будет очень даже можно, если записать его в конфигурационный json-файл.
3. особая функция просмотра, позволяющая обозревать мобов ещё более наглядно. Но эта функция секретная, и пока я её не сделаю, рассказывать про неё не буду!