Приветствую, хабравчане!
Начал создавать игру‑РПГ на гугл‑таблицах. Это своего рода планировщик, но с РПГ‑составляющей. Таких приложений полно в плеймаркете, однако мне всегда хотелось создать что‑то свое, для себя. Данный текст — рефлексия, которая, надеюсь поможет мне не запутаться с собственных идеях :-)
В планах создать для персонажа целый мир, который он будет исследовать, в котором будет сражаться с опасными противниками, знакомиться с новыми персонажами. Но это еще очень далеко)
Важное вступление
Предупрежу матерых разрабов. Я — гуманитарий. Для меня создание этой игры — своего рода полезный отдых, который провожу по принципу «лучший отдых — это смена деятельности». Ковыряюсь в свободное время на работе, дома, в метро. Сильно не пинайте, а если моя история покажется интересной — посоветуйте чего‑нибудь полезного)
Если я что‑то называю «сложным» — просьба попридержать тапок свободной рукой) Не забываем, что у меня гуманитарный мозг — многие, казалось бы простые вещи мне нелегко держать в голове, некоторые моменты вызывают трудности для понимания.
Рабочее название игры — ЭВЕО (энргия, вода, еда, опыт)
Почему гугл‑таблицы
Таблицы всегда под рукой и не нужно отвлекаться на интерфейс. Можно добавлять функционал хоть в метро прямо с телефона.
Признаюсь, немного могу в веб‑разработку (PHP, HTML/CSS, JS). Этот вариант не очень удобный — нужно создавать определенные условия (локальный хостинг, базу данных и тд), чтобы работать. Другими языками для разработки, как бы мне не хотелось, я не владею. Опять же, чтобы просто приступить к реализации, мне нужно сначала создать хотя бы простенький интерфейс, а мне не хочется отвлекаться на это.
Структура
Первым делом решил подумать над тем, как у меня будет устроена игра. Опыт создания сложных систем (делал в таблицах калькулятор для контроля семейного бюджета) мне подсказывал, что нельзя все расчеты сбрасывать в одну кучу, ставить формулы в рандомных местах. Я быстро запутаюсь, и игра быстро сломается.
Моя гугл‑таблица содержит несколько листов:
«БД» — туда я вручную забиваю свойства и их параметры.
Красным выделил показатели, которые будут участвовать в уменьшении параметров персонажа, зеленым — в увеличении. В красных ячейках, хотел сначала указывать отрицательные значения. Но в процессе расчетов поймал себя на том, что начал путаться со знаками, и вместо траты ресурсов получал их рост. Поэтому решил применить цветовую дифференциацию)
«Календарь» — здесь происходит связь игры с реальностью: сколько дел из списка нужно выполнить за день, сколько сделал в итоге, еда, прогулка, чтение, сон, и тд.
«Движок.Перс» — сюда подтягиваю данные из «БД» и «Календарь». Здесь же проводятся расчеты.
«Перс» — сюда транслируются результаты расчетов: насколько персонаж голоден, испытывает жажду, сколько энергии.
Таким образом связь между листами работает таким образом:
«Движок» подтягивает данные из «БД» и «Календаря». Из «движка» данные отправляются в «Персонаж»
В настоящий момент для меня это максимально удобная структура. Все расчеты я провожу в определенном месте, все параметры того или иного параметра — в другом. Если что‑то ломается — я быстро ориентируюсь, где это произошло. «БД» помогает следить за балансом.
Что пока умеет персонаж
Персонаж пока умеет голодать, испытывать голод, копить и тратить энергию. А еще копит опыт — на будущее.
Персонаж перманентно испытывает голод/жажду каждый час.
Умеет пить, есть, выполнять задания: обыденные, нестандартные, и не непонятные. За каждое выполнение он тратит энергию, голодает и испытывает жажду.
Умеет спать. Пока спит — восстанавливает энерг/час, тратит еду/час и воду/час.
Умеет делать полезные дела «в вакууме»: гулять, работать «работу», читать, разрабатывать игры. За это он тратит Э/В/Е и получает опыт.
Особенности «движка»
Список «переменных»
Кажется, такое я видел в OpenCart, но могу ошибаться. В движок я сначала вывожу все «переменные», которые подтягиваются из «БД» (по сути — дублирую) и «Календарь»:
переменные:
В расчетах я ссылаюсь уже на этот список, не выходя за пределы листа:
В настоящий момент мне так удобно. Мне не надо держать в уме, какая ячейка на что ссылается. Очень удобно добавлять новые возможности персонажа.
Расчеты провожу максимально простые, с простыми формулами. Использую «коэффициент» качества — отношение выполненных и запланированных задач — который влияет на количество полученного опыта.
Конечный результат округляю, потому что цифры после запятой мне не очень нужны.
Средние значения или последняя запись в календаре?
Примечательно, что из «Календаря» я беру именно средние значения «по больнице», а не из последней записи. По двум причинам:
В определенный момент я просто забыл о том, что существуют способы взять данные из последней записи таблицы.
Игра не подразумевает какую‑то динамику. Мне не важно, что герой делает в текущий момент. Мне важно знать о среднем состоянии героя.
Дальнейшие планы
В ближайшем будущем планирую сделать характеристика персонажа более обширными:
полезные привычки
плохие привычки
болезни
моральное состояние
здоровье
Эти показатели буду добавлять в календаре, они будут зависеть на потребление еды/воды и расход энергии.
Далее по плану — добавить валюту, возможность ходить. Эти показатели понадобятся, когда вокруг персонажа начнут образовываться город и локации.
Спасибо за внимание :-) По мере появления времени буду продолжать писать.