Блог ·

Гра, у яку грають ногами: 4 тисячі кроків, українська історія і 3.4 млн гексів

Скільки українських історичних постатей ви назвете, не гуглячи? Чесно, без підготовки. І друге питання, ще простіше: коли ви востаннє виходили на прогулянку без причини — просто щоб пройтися?

Колекційні карти українських історичних постатей у грі Myphos

Це дві різні проблеми, і в мене вони зійшлися в одну.

Дві проблеми, які виявилися однією

Останні чотири роки TikTok регулярно підкидав мені відео про те, наскільки погано ми знаємо власну історію. Не в сенсі дат і параграфів підручника, а в сенсі людей: хто це був, чим займався, чому його ім'я на табличці за рогом мого будинку. Кожне таке відео залишало неприємне відчуття, що воно й про мене теж.

Паралельно я помічав інше. Дуже багато людей хочуть більше ходити. У них є трекер кроків, є прочитана стаття про десять тисяч на день, є абсолютно щире бажання. І немає найголовнішого — причини вийти саме зараз і саме туди. Прогулянка заради прогулянки виснажується за тиждень: маршрут той самий, приводу немає, і ти залишаєшся вдома. Мотивація «це корисно для здоров'я» програє дивану приблизно завжди.

Проблеми різні, а розв'язок у них спільний. Історію не вчать з-під палиці — її вбирають, коли натрапляють на неї в житті. Гуляти не починають за розкладом — виходять, коли є куди і навіщо. Обидві потребують не дисципліни, а приводу.

Так з'явився Myphos — від «міфи» та «історія». Карткова гра на мапі України, у яку грають ногами.

Що це таке за тридцять секунд

Ви відкриваєте застосунок і бачите мапу свого міста, поділену на гексагональні клітинки. Десь неподалік лежить картка з українською історичною постаттю. Щоб її взяти, треба туди дійти — фізично, ногами, ніяк інакше. Взяли одну, за кілька хвилин з'являється наступна, в іншому напрямку.

Зібраними картками ви захоплюєте території: збираєте власне князівство зі столицею або йдете відвойовувати чуже. Чим рідкісніша картка, тим сильніший напад і захист. Але про війну за райони — трохи згодом, бо саме там мене чекав найбільший сюрприз.

Скільки це в кілометрах

Ось цифри, які я вважаю головною відповіддю на питання «навіщо мені ця гра».

За день можна зібрати п'ять карток звичайною прогулянкою. Кожна наступна з'являється в радіусі 400–600 метрів від вас. Найкоротший можливий маршрут — це вже приблизно 2.5 кілометра, і то за умови, що ви йдете строго по прямій, чого в реальному місті не буває ніколи. З урахуванням будинків, переходів і того, що дорогу назад теж треба пройти, виходить три-чотири кілометри. Це десь 4–5 тисяч кроків.

Плюс до цього — точки інтересу: до трьох зборів на день біля реальних музеїв і пам'ятників, і туди теж треба дійти. Плюс можливість перекинути картку в іншу локацію, якщо теперішня вам не подобається. У сумі виходить норма, яку більшість трекерів вважає хорошим днем.

Ключове тут — не ліміт, а число. П'ять карток на день це не покарання за жадібність, а обіцянка: ви точно знаєте, що прогулянка має кінець, що вона займе годину, а не з'їсть вечір, і що завтра буде новий привід. Гра, у якій можна грати нескінченно, дуже швидко перестає бути приводом вийти й стає причиною не спати. Мені потрібне було рівно протилежне.

Найкраща механіка тут не та, що затримує гравця в застосунку. А та, що виводить його з дому і за годину відпускає.

І ще один момент, який я не закладав, але який виявився важливим. Коли ви йдете у справах, а телефон повідомляє, що картка зовсім поруч, — це перетворює звичайний маршрут на маленьку пригоду. Гак у двісті метрів раптом має сенс. Люди починають ходити іншою дорогою, заходити в двори, куди не заходили роками, обирати незнайомий район замість звичного кола навколо дому. Мені писали про це кілька разів, і щоразу з інтонацією «я тут двадцять років живу і вперше побачив цей будинок».

Окремо — про компанію. Прогулянка вдвох потребує приводу навіть більше, ніж прогулянка на самоті: комусь треба запропонувати, і «просто пройдімося» звучить якось порожньо. «Пішли, тут поруч є картка, якої мені бракує» — вже ні. Це дурниця, але вона працює.

Історія, яку не треба вчити

Тепер про другу половину задуму.

Найпростіше, що можна було зробити, — прикрутити до гри вікторину. Зібрав картку, відповів на три питання, отримав бонус. Я свідомо цього не робив, і не збираюся. Щойно в грі з'являється тест, вона перестає бути грою і стає уроком, а на урок дорослу людину після роботи не заманити нічим.

Тому на кожній картці — короткий факт про постать і фраза, з нею пов'язана. Одна-дві. Ви читаєте це в паузі між боями або поки чекаєте на зелене світло. Ніхто нічого не перевіряє, бонусів за прочитане немає, пропустити можна завжди.

І воно запам'ятовується. Не тому, що ви старалися, а тому, що ім'я тепер прив'язане до місця, де ви стояли, до дня, коли ви туди дійшли, і до картки, яку ви потім поставили захищати квартал біля дому. Пам'ять чіпляється за контекст значно охочіше, ніж за списки. Це той самий механізм, завдяки якому ви пам'ятаєте, де саме почули пісню, але не пам'ятаєте жодного рядка з вивченого до іспиту.

Колода навмисно не обмежена шкільним каноном. Там є письменники, філософи, козаки, науковиці, меценати, співачки — люди, які були важливі для країни або дотичні до її історії, зокрема ті, чиї імена ви точно бачили на вивісках і вулицях, але ніколи не мали приводу дізнатися, ким вони були. Власне, це і є та частина задуму, заради якої все починалося: поєднати знання з грою так, щоб знання не відчувалося як робота.

Біля пам'ятника шанси інші

Найцікавіше починається там, де гра чіпляється за реальну географію.

Крім звичайних карток, на мапі є визначні місця — музеї, пам'ятники, садиби, історичні будівлі. Зараз їх 1252 по всій Україні. У кожного свій радіус: біля звичайного пам'ятника треба підійти метрів на п'ятдесят, біля великого маєтку з парком вистачить і ста тридцяти. Але підійти треба справді, ногами. Проїхати повз не рахується.

Сенс у тому, що кожне таке місце «тягне» свої постаті. Прийшли до пам'ятника Сковороді — підвищується шанс дістати саме Сковороду. Не гарантія, не стовідсотковий дроп: картка все одно може випасти будь-яка, просто ця стає значно ймовірнішою. Так само з бібліотекою Вернадського чи бюстом Мазепи — місце підказує грі, кого вам зараз варто показати.

До речі, коли я зібрав ці точки й подивився на статистику, вона сама розповіла дещо про країну. З 1252 місць 788 — це Шевченко. Далі з великим відривом Франко, Хмельницький, Леся Українка. У багатьох містечок пам'ятник Шевченку — єдина точка на мапі, і це, мабуть, найчесніший портрет нашої меморіальної культури, який я бачив.

Була спокуса зробити простіше: щоб біля пам'ятників падали кращі картки. Я цього не зробив свідомо, бо це вбиває всю ідею. Якщо в музеї сипляться легендарки, гуляти ніхто не буде — усі просто їздитимуть по колу між трьома точками, і гра з приводу вийти надвір перетвориться на маршрутку.

Тому рідкість біля визначного місця рахується так само, як будь-де. Змінюється не сила картки, а те, хто на ній. Похід до пам'ятника не дає вам сильнішої картки — він дає потрібну. Іти туди має сенс тоді, коли вам цікава саме ця людина, і це єдина причина йти, яку я хотів заохочувати.

А побічний ефект подобається мені найбільше: люди раптом дізнаються, що в їхньому місті взагалі є музей, повз який вони ходили сім років.

Ваша картка не з'явиться там, куди неможливо дійти

Далі — для тих, кому цікаво, як це влаштоване всередині. Задача виглядає оманливо просто і виявилася найдорожчою в проєкті.

Наївний підхід: беремо координати гравця, кидаємо випадкову точку в радіусі 500 метрів, ставимо маркер. Працює рівно до першого тесту в реальному місті. Точка падає в центр кварталу без входу, на дах дев'ятиповерхівки, у закриту промзону, на середину Дніпра або на автомагістраль, де пішоходу нема чого робити. Людина дивиться на маркер, до якого фізично не дійти, і видаляє застосунок. І має рацію.

Відфільтрувати це геометрично на льоту не вийде. Довелося б на кожен запит кожного гравця перетинати випадкову точку з дорожньою мережею й контурами будівель у реальному часі. Це дорого, повільно і масштабується погано.

Я пішов іншим шляхом: заздалегідь порахувати всі клітинки, у яких пішохід фізично може стояти, і спавнити тільки в них.

Для цього взяв H3 — гексагональну систему індексації від Uber. Офлайн-пайплайн бере дані про пішохідну інфраструктуру, покриває їх H3-клітинками десятої резолюції (гекс приблизно 65 метрів упоперек) і віддає CSV. Вийшло 3.4 мільйона рядків на всю Україну.

У базі це проста таблиця:

create table public.walkable_h3 (
  h3_index    text not null,
  kind        text not null,
  imported_at timestamptz not null default now()
);

Перше, на чому я обпікся, — імпорт. Створити таблицю одразу з primary key і залити 3.4 млн рядків означає чекати 20–30 хвилин: B-tree індекс перебудовується на кожен INSERT. Тому таблиця створюється без PK і без RLS, дані заливаються через \copy за одну-три хвилини, і лише потім окремою міграцією накочуються PK, RLS і гранти. Банально — рівно доти, доки ви не натрапите на це вперше о другій ночі.

Друга деталь — тип колонки. H3-індекси я зберігаю як text у hex-формі (8a2d6565675ffff), а не як bigint. Саме так їх віддають і h3-py, і h3-js, тож між пайплайном, серверною функцією і базою немає жодної конверсії. Плата — кілька зайвих байтів на рядок, близько 30 МБ на всю таблицю. За відсутність цілого класу помилок конвертації це смішна ціна.

Головний виграш у тому, що спавн перестав бути геометрією. Тепер це перевірка входження в множину: швидко, передбачувано і однаково дешево для Києва та для села на 200 дворів.

Три дрібниці, які роблять прогулянку прогулянкою

Правильна клітинка — необхідна умова, але недостатня. Далі йдуть речі, яких не видно в описі гри, але без них вона розвалюється.

Конус напрямку. Спершу наступна картка з'являлася де завгодно навколо гравця. Це означало, що ви йдете вперед, а гра відправляє вас назад — тим самим шляхом, яким ви щойно пройшли. Дратує неймовірно. Тепер нова картка з'являється переважно в напрямку вашого руху, в конусі приблизно ±90°. Прогулянка стала маршрутом замість човника.

Анти-повтор клітинок. Гра пам'ятає, де ви вже були сьогодні, і не садить наступну картку в той самий гекс. Без цього ви ходите вісімкою навколо одного перехрестя, і вся ідея «подивитися нові райони» помирає.

Метри не рахуються в транспорті. GPS шумить навіть коли ви сидите нерухомо: координата стрибає на десятки метрів, і за годину лежання на дивані набігає «пройдена» відстань. Її треба фільтрувати. А ще гра не зараховує прогрес, коли ви їдете, — і це не про боротьбу з шахраями, а про чесність самої ідеї. Застосунок, який дає вам кроки за поїздку в метро, не має жодного сенсу.

Кожна з цих трьох речей — маленька. Разом вони і є різниця між «застосунок відправляє мене гуляти» і «застосунок мене дратує».

Чого я не вгадав

Тепер найцінніше, і це вже не про код.

Я був упевнений, що людей триматиме колекція. Що механіка «зібрати всіх» — серце гри, факти на картках — її сенс, а території просто приємний додаток збоку.

Повертаються за іншим. Гравці почали воювати за райони. Виявилося, що коли у вас забрали територію біля дому, спокійно відпочити не виходить: людина відкриває застосунок увечері не щоб додивитися колекцію, а щоб подивитися, хто це там оселився під її вікнами. І йде вибивати. Ногами, бо інакше не можна.

Колекція виявилася приводом, а війна за квартал — причиною. Що, як на мене, для задуму навіть краще: історію ти вбираєш мимохідь, поки займаєшся тим, що тебе справді зачепило. А кроки набігають в обох випадках.

Цю річ неможливо було побачити на етапі планування, скільки документа не пиши. Її видно тільки тоді, коли в грі з'являються чужі живі люди. Про те, як влаштовані самі території й чому вони теж лягли на гексагональну сітку, напишу окремо — там вистачить на власний текст.

Де це зараз

Myphos у першій версії, Android, поки лише по Україні. У колоді 28 постатей — від Ярослава Мудрого до Юрія Кондратюка. Робиться все в одні руки, тож список того, що хочеться додати, значно довший за список зробленого.

І найцікавіше питання, яке я ставлю всім, хто дочитав: кого б ви додали до колоди? Половину найкращих карток мені запропонували інші люди — зокрема тих, про кого я сам не знав.

Myphos

Геолокаційна карткова гра про українських історичних постатей. Безкоштовно, Android.

Завантажити Myphos з Google Play