Ragnarok Online на Godot + Python. Пустил первых игроков — теперь пишем квесты
В прошлом посте я рассказывал, как собираю свой Ragnarok Online на Godot и Python с помощью нейросетей. Там были конвертеры старых корейских форматов, сетевой протокол, поринги и попытки заставить Python выдерживать населённый мир.
Спасибо всем, кто прочитал и написал. В комментариях спрашивали, где поиграть. Пришлось дать людям клиент и посмотреть, что получится.
Если кратко, то случился деплой.
Сервер теперь живёт на отдельной виртуальной машине, у проекта есть адрес zeroro.ru, а у сообщества — форум. Клиенты лежат на странице скачивания. Пока это ранний тест. Ошибок хватает, и я постоянно бегаю по миру, выясняя, что опять сломалось. Так что если мимо пронеслась взмыленная зёпа без привет/пока, скорее всего, это я спешу что-то тестировать или исправлять.
Windows не пустила дальше запуска
В комментариях @Fymka попробовал запустить игру на Windows и получил ошибку про SSE4.2. Выясняли конфигурацию, переписывались, пересобирали клиент. Он скачал заново, ошибка осталась.
Под Wine у меня всё запускалось. Только @Fymka от этого было не легче.
В итоге для Windows подготовил две сборки: основную x64 и дополнительную x86 с SSE2, без требования SSE4.2. На странице загрузки они находятся в одной карточке; на кнопках прямо написана архитектура.
Есть и нативная сборка macOS — универсальное приложение для Intel и Apple Silicon. Правда, её не тестировал: мне не на чем. Есть тут лица с нетрадиционным выбором техники, готовые помочь протестировать клиент?
Видеокарта и драйверы всё равно должны подходить под требования Godot. А заработало ли в итоге у @Fymka, я пока не знаю (эй, отпишись!).
Там же всплыла ещё одна неприятность: человек хотел сообщить об ошибке, а форма отправки сама отвечала ошибкой. Багрепорт на багрепорт. Приехали.
Ты родился! Что дальше?
Параллельно я сел проходить начало игры обычным персонажем, KittyCat. Нейросеть смотрела сохранённые скриншоты, проверяла текущий этап задания и помогала разбирать проблемы.
И почти сразу упёрся в вопрос: куда идти?
Задание уже взято, только я об этом не знаю. В журнале написано, что надо попасть в академию. Осталось догадаться открыть журнал. Но сначала нужно найти выход из каюты, потом выход с корабля, потом ещё один корабль. Человек, который делает этот маршрут впервые, не обязан узнавать двери по старой памяти.
Добавили в тестовую версию маячки на мини-карте и большой карте. Они показывают ближайший нужный выход или NPC, а по мере прохождения меняются.
Потом я спросил: а если пойти назад? Вернулся в каюту, поднялся на другой этаж, заблудился по дороге. Маячки нужны и там. Этот маршрут тоже проверяем.
На скриншотах нашлось ещё весёлое. Маячок правильно указывает на преподавателя в академии, а длинный текст задания всё ещё объясняет выход из каюты. Или предметы уже собраны, а описание продолжает предлагать их собирать.
Теперь сверяем и карту, и текст задания. А то одна подсказка отправляет к преподавателю, другая обратно в каюту.
А спросить ещё раз можно?
Регистратор выдал нож и больше ничего полезного не говорил. А я мог случайно закрыть диалог. Или прочитать и через минуту забыть, к кому он меня отправлял. Снова подошёл, а спросить дорогу уже нельзя.
Поправили локально: при повторном разговоре NPC напоминают следующий шаг. Лекарь объясняет здоровье и лечение, Субино — экипировку и бой, Kafra — сохранение и хранилище.
Мы прошли практику: отправились на остров, собрали три Jellopy, вернулись, отдали добычу, посетили Kafra и закончили курс. Смотрели на каждом этапе, что говорит журнал и куда указывает карта.
На выходе KittyCat получила выпускные 100 zeny, задание закрылось, дверь выпустила её в Излюд. Из этих скриншотов собираем пошаговую инструкцию для форума. Пока проходили, заодно выловили ошибки в подсказках.
Для тех, кто знает RO наизусть, предусмотрели пропуск курса у Регистратора. Без выпускной награды, зато без обязательной лекции при создании очередного персонажа.
В комментариях спрашивали про долгую прокачку. Начинаю с первых десяти Job.
После выпуска моя KittyCat оказалась третьего базового и второго профессионального уровня. Академия закончилась, а до первой профессии ещё нужно дорасти.
Сейчас переделываю задания после академии: хочу довести новичка до Job 10 через путешествие по городам. Сначала знакомство с городской Kafra и магазинами Излюда — покупать товары для выполнения заданий не требуется. Затем Проводник предлагает два заказа на добычу, и у каждого есть альтернатива для тех, кто пока не хочет драться.
Первый заказ — пять Jellopy и два яблока с порингов. Вместо охоты можно отнести посылку северной Kafra Пронтеры, у дороги к замку. Второй — десять Clover и три морковки с лунатиков. Его альтернатива — доставка центральной Kafra Пайона. Добычу разрешено получить от других игроков. Доставки сейчас переделываем: Проводник будет выдавать посылку отдельным предметом, который нужно принести адресату.
На каждой развилке награда одинаковая для обоих способов, но получить её можно только один раз. Можно выбрать охоту в первом заказе и доставку во втором — или наоборот. До сдачи разрешено передумать и поменять вариант у Проводника.
Между городами придётся идти через поля с монстрами. Можно обойтись без платных телепортов Kafra, но смотреть по сторонам всё равно надо.
Если Job 10 ещё не достигнут, после второго заказа маршрут продолжается в Гефене: Kafra у южных ворот рассказывает о жизни курьера. Дальше — центральная Kafra Морока, разговор о весе сумки и хранении лишних вещей. Открывать платный склад ради задания не нужно. Завершает путешествие аудиенция у короля Рун-Мидгарда в замке Пронтеры — там новичка благодарят за помощь городам и выдают последнюю награду.
Пишу им разговоры. Например, гефенскую Kafra вчера спросили, можно ли доставить Fire Bolt в закрытом конверте. Пришлось объяснять, что после такого письма остаётся только адрес. А в Мороке перед походом к королю советуют стряхнуть песок с сапог: дворцовые ковры тоже чья-то работа.
Награды посчитали под Job 10: девять наград за прохождение цепочки, всего 570 Base EXP и 1151 Job EXP. Для персонажа с нуля это Base 8 и Job 10. Если десятый Job получен раньше, журнал переводит к выбору профессии, а оставшиеся награды не выдаются.
В журнале будут оба счётчика: сколько собрано Jellopy и сколько яблок. Маячок поведёт сдавать заказ, когда хватит всего. Отдельно проверяем сдачу: если яблок мало, Jellopy забирать нельзя. И получить награду второй раз повторным разговором тоже нельзя. В базе списание предметов, опыт и новый этап сохраняются вместе.
После Job 10 Проводник объясняет Basic Skill и показывает дорогу к выбранной гильдии. Очки за игрока не распределяем, профессию автоматически не выдаём. Условия и экзамены гильдии остаются отдельным этапом: например, будущему Магу ещё потребуется Base 10, а эта цепочка сама по себе его не гарантирует.
Всё это сейчас переделывается и проверяется локально. На боевом сервере готовую цепочку пока не ищите. До старших уровней я с этими квестами тоже ещё не добрался.
Зачем тогда свой клиент?
Меня об этом спрашивали под первым постом. Покажу на часах и чате: их уже можно пощупать в клиенте.
Часы для тех, кто играет на полный экран
В полном экране часов на панели задач не видно. Ради них сворачивать игру неудобно, поэтому сделали свои. Показывают время компьютера игрока, в 24-часовом формате, с секундами. Навёл мышь, увидел полную дату.
Включаются через Alt+T или в настройках: «Интерфейс» → «Панели» → «Часы». Их можно перетащить мышью туда, где они не заслоняют игру; положение и выбранный вид сохраняются.
Есть три размера:
Большие: Поринг с настоящим стрелочным циферблатом и цифровым временем под ним.
Стандартные: Поринг с табличкой, на которой время и дата.
Мини: маленький Поринг и узкая плашка со временем, если хочется оставить больше места для самой игры.
Всем доступны розовый Поринг, зелёный Попоринг и жёлтый Дропс. На аккаунте можно открыть ещё восемь оформлений: Девилинг, Ангелинг, Мастеринг, Гостринг, Санта, Металинг, Марин и Магмаринг. У кого крылышки, у кого корона, у кого новогодний колпак. Для картинки я собрал их все, включая ещё закрытые для нового аккаунта.
Рожки или нимб у часов на характеристики персонажа не влияют. Просто мне нравятся поринги.
Чат, в котором разговор не тонет в сообщениях о добыче
На охоте чат легко превращается в непрерывный отчёт: урон, опыт, предметы, системные сообщения. Где-то между ними напарник написал, куда идти. Хорошо бы прочитать это до того, как группа ушла в другую сторону.
В клиенте можно завести свои вкладки и отфильтровать сообщения. Например, оставить разговор группы и личные сообщения в одной вкладке, а урон, опыт и добычу — в другой. Каждой можно дать название, выбрать цветной значок и настроить, какие новые сообщения считать для уведомления.
У вкладки есть и канал отправки: для «Группы» можно выбрать групповой чат. В строке ввода есть отдельный переключатель «Всем / Группа», чтобы было видно, кому ты сейчас пишешь.
Шрифт, прозрачность фона и цвета сообщений настраиваются. Можно включить время возле строк и подсветку своего имени. На большом мониторе можно увеличить текст; на светлой карте — сделать фон плотнее. Окно двигается и растягивается, а замок фиксирует его, чтобы случайно не утащить мышью. Положение и настройки сохраняются.
Для личных сообщений есть поле «Кому» и список недавних собеседников. Стрелки вверх и вниз возвращают ранее набранные сообщения. Журнал выбранной вкладки можно сохранить в TXT или HTML — например, чтобы приложить понятную историю к багрепорту.
Заодно разбирались с фокусом ввода: написал сообщение, захотел продолжить играть, а клавиши всё ещё забирает чат. Сейчас Enter в пустой строке или Esc снимают фокус, щелчок по миру тоже возвращает управление игре. Иначе жмёшь клавишу умения, а пишешь букву в чат.
В планах интерфейса — показать вещь прямо в чате
В бэклоге, в группе «Доработки», есть B-121 «Ссылки на предметы в чате». Ещё не реализовано.
Хочу сделать так: перетаскиваешь вещь из инвентаря в строку сообщения — появляется ссылка [Название вещи]. Отправляешь её в общий, групповой или личный чат. Другой игрок нажимает и видит описание именно этого экземпляра: характеристики, заточку, вставленные карты и опознание.
Нашёл нож, спрашиваешь группу «кому пригодится?», и все могут посмотреть, что за нож, с какими картами и заточкой. Не надо переписывать характеристики руками или делать скриншот. Сам предмет при этом остаётся у тебя в сумке.
Что сохраняем в самой игре
Рейты у нас Х1/Х1/Х1: базовый опыт, профессиональный опыт и дроп. Крыльев с характеристиками не планирую. Из кастомного хочу делать косметику и удобства в интерфейсе.
У квестов фиксированная награда опытом, серверный множитель ради них не меняем.
Что дальше
Сначала закончу путь после академии. Нужно пройти обе ветки, проверить выдачу посылок, возвраты на старые карты и перезаходы. Потом решать, готово ли это к выпуску. Пока я сам на этом маршруте нахожу, что поправить.
В клиенте хочу заняться ссылками на вещи и обновлениями: скачивать весь большой пакет ради небольшой правки надоедает. Окна, подсказки и управление тоже будем поправлять по вашим жалобам. Проверка под Wine уже показала, что моей машины для тестирования маловато.
После первых десяти Job хочется продолжить задания. В бэклоге лежат доски объявлений и ежедневные поручения: добыча, поездки между городами, помощь NPC. С наградами ещё надо разбираться. Дальше интересуют групповые приключения, боссы, торговые лавки и аукцион. За всё сразу браться не буду, сроков пока нет.
Есть и работа с сервером: научить сервисы перечитывать конфигурацию и сделать обновления менее болезненными для тех, кто в этот момент играет. Игрок уже добрался до поринга, не хочется выкидывать его ради очередной правки.
О проблемах не забывайте написать через форму на сайте или на форуме. Не держи в себе, пиши. Я люблю вас читать :). Особенно полезно знать, где вы впервые застряли: на установке, в меню, на выходе из каюты или уже перед первым порингом.
А от тех, кто играл давно, интересно услышать: что стоило бы объяснить новичку в первые полчаса, чтобы дальше он уже мог отправиться в приключение сам? И что бы вы поменяли или дополнили в интерфейсе?
Поринги передают привет. И требуют сначала разобраться с дверями.
@ares7782, @CensorAC, @wakuorin — просили пнуть, вот пожалуйста. Пинок доставлен, урон нулевой, ссылка на клиент выше :)
@Dragonslayer666, ты просил написать, где взять клиент. Тебе тоже повестка в Пронтеру!








О, РОшечка. Сколько выходных было потрачено. Подписался, плюс поставил. Буду следить за развитием. Завтра клиент скачаю - буду тестить. По возможности, что буду замечать - буду отписывать