До всіх новин
Щоденник розробників

Редактор мап: як створюється світ Ізоманії

Мапа більше не редагується вручну у файлі. Сітка перешкод виводиться з обʼєктів, сесію редагування можуть тримати двоє, а мапа перестала бути квадратною.
Тривимірний вид редактора мап із трасою й озерами

Мапа Ізоманії більше не редагується вручну в текстовому файлі. У проєкті зʼявився редактор мап, і саме ним тепер створюється світ гри. Гравцям він недоступний, і це перше свідоме рішення в його влаштуванні.

Редактор працює лише локально

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

Двовимірний вид редактора: палітра обʼєктів, мапа і історія операцій

Сітка перешкод не малюється руками

Найважливіша властивість редактора полягає в тому, що сітка перешкод не редагується окремо, а виводиться з розставлених обʼєктів. Правила «які клітинки займає цей обʼєкт» отримані вимірюванням: їх звірили з усіма 30к+ клітинками наявної мапи, і вони збіглися повністю.

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

Окремий тест постійно перевіряє, що збережена сітка перешкод досі відповідає розставленим обʼєктам.

Спільна сесія редагування

Кожна правка є окремою операцією, яка надсилається на локальний сервер і розсилається назад усім, хто відкрив редактор. Завдяки цьому одну незбережену мапу можуть редагувати двоє, а правки зʼявляються одразу і підписані автором. Перелік операцій водночас є панеллю історії з можливістю відкату. Така собі «фігма» на мінімалках, але для редагування гри.

Збереження перезапускає сервер гри

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

Мапа перестала бути квадратною

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

Мапа до і після розширення, поруч

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

Урок про тести, вивчений чотири рази за день

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

Тепер числа про мапу тести знаходять у самій мапі. Це коштує однієї мілісекунди і не застаріває.

Читайте також

Оновлення

Машини у відкритому світі, системні зони і оптимізація рушія

Відкритий світ отримав машини, а область появи гравця перестала бути захардкоженою точкою і стала пензлем-зоною в редакторі мапи. Разом із цим світ навчився бути великим: увесь…
Читати оновлення