Skip to content

Repository files navigation

🧟 Операція: Порятунок Світу

3D-екшен проти зомбі просто у браузері: кампанія на 12 країн, «Живий фронт», Експедиції, кооператив до 4 гравців, Шторм, Ліга, хмарний сейв і PWA.

🎮 Грати: https://slonce70.github.io/zombie-world-rescue/

Працює на комп'ютері, телефоні та планшеті. Інтерфейс доступний українською, англійською і російською.

Поточна версія

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

v770 — «По-справжньому разом»: врятований друг іде в бій і в чужій кімнаті — лікує, відволікає, бʼється; колесо спілкування виросло з 5 фраз до 12 стікерів.

v760 — «Похвалися»: листівка перемоги з кадром бою і листівка-запрошення з кодом кімнати; перші пʼять хвилин новачка ведуть до однієї цілі, а решта гри відкривається після звільнення України.

v752 — латка за аудитом: підмінена адреса сервера більше не краде хмарний сейв, ліга не стирає чужі рекорди, гранати й ракети бачать підлоги, підказки не кажуть «E» на планшеті.

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

v750 — «Зірка складності й вибір героя»: зірка з Налаштувань нарешті діє на першому проходженні, «Живому фронті» й у коопі (за налаштуванням хоста); середина кампанії від Іспанії до Китаю відчутно росте, а шість цих країн дарують постійну силу. Драфт «Прокачки» отримав 10 карток, що змінюють бій і рух, магазин — другий ярус із вибором «одне з пари», друга зірка — 14 вторинних цілей замість 4.

v740 — Імпульс став грабельним пʼятим бійцем, складність зібрана в Налаштуваннях, за повністю освоєний світ дають нагороду.

v730 — «Сезон»: 12 сходинок на 6 тижнів, які ведуть гравця по режимах. Компас підказує наступний крок, нагороди — кристали, яйця, XP і титул за фінал.

v720 — «Загін»: врятований друг іде з тобою в бій — лікує, відволікає зомбі або бʼється поруч. Падає і встає, ніколи не гине назавжди.

v711 — скін-бокс знову в магазині назавжди, а забіг за Бастіона більше не качає Захисника.

v710 — «Штаб операцій»: усі кімнатні режими відкриті з першої хвилини, каталог поділено за довжиною сесії («5 хвилин» і «Довга операція»), а секція «СЬОГОДНІ» щодня показує 4 режими дня. Послідовним лишається тільки сюжет.

v701 — «Зоряні сили Бастіона»: дві сили на вибір за 2300 монет з 4 рівня — «Відштовхуючий супер» (520 шкоди й відкидання на 7 м) і «Швидкий супер» (3 с швидкості та +5% до заряду Super). Обрати можна лише одну, назавжди.

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

v600 — «Повернути світ» збирає кампанію, «Живий фронт» і кооператив в один цикл: «Продовжити порятунок» → картка країни → три безперервні фази операції → видимий результат на глобусі. Зруйновані країни можна повністю відбудувати, а офлайн-час їм не шкодить. Двоє рівноправних гравців можуть пройти весь цикл разом; HUD показує одну головну ціль, а мобільний інтерфейс працює без hover-підказок.

v520 — турецький корабель пливе справжнім широким Босфором уздовж берега, не проходить під землею, а люди чекають і висаджуються на суші. Також спрощено дубльовану браузерну тестову інфраструктуру та очищення 3D-ресурсів.

v513 — під польським замком є справжнє підземелля на глибині 6 метрів: 5 чаклунів і 11 кам’яних зомбі на 500 HP; їхні удари завдають 10 шкоди та оглушують на 0,5 секунди.

v511 — у польському замку закрито отвір над воротами, а на вході до підземелля чітко видно ґрати.

v510 — маркери польських вогнищ на мінімапі тепер точно збігаються з їхнім справжнім розташуванням.

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

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

v507 — суцільні мури польського замку без випадкових щілин між секціями.

v506 — розмір карти в налаштуваннях:

  • 4 варіанти: мала 500 м, стандартна 750 м, велика 950 м і дуже велика 1250 м;
  • дороги, рельєф, будівлі та сюжетні точки масштабуються разом, тож завдання не обрізаються;
  • у кооперативі всі грають на розмірі карти хоста.
  • після зачистки польського замку прохід у підземелля відкривається автоматично, а людей треба звільнити всередині.
  • у Німеччині з'явилася казарма на 2500 HP: кожні 2 с вона випускає бігуна або волоцюгу, кожні 7 с — велетня.

v505 — оновлена польська операція:

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

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

Історія змін: CHANGELOG.md. Порядок публікації: RELEASE.md. У docs/ лежить спека v710 «Загін і ротація» та домовленості для агентів.

Версія релізу синхронізується у version.json, APP_VERSION та service-worker cache. Кооперативний wire format використовує PROTO_VERSION = 25.

Expedition має пʼятьох грабельних бійців: Захисник, Медик, Розвідник, Бастіон і Імпульс. Усі прокачуються до 5 рівня; Бастіон має власні гаджети, Гіперзаряд і дві Зоряні сили, Імпульс — хвилю контролю.

Швидкий старт

Потрібні Node.js 22+ і Chromium для Playwright.

npm ci
npx playwright install chromium
npm run serve

Відкрий http://localhost:8741.

Для локального коопу в другому терміналі:

npm run relay

Гра приймає ?relay=ws://localhost:8742. Тестові сценарії використовують ?test&fresh; dev cloud-save вмикається тільки явним &cloud на localhost.

Перевірки

npm test
node test/version-sync.mjs
node test/coop-nick.mjs
node test/cloudsave.mjs
npm run test:front
npm run test:release

Релізні ранери автоматично знаходять test/*.mjs. Деплой блокують рівно дві джоби: quick (версії, shell service-worker, i18n, «Операції спільноти» та швидкі доменні юніти) і smoke (test/smoke.mjs, combat-reborn, save-migration). Expedition, Front, повна батарея, кооп-гейт і real-combat e2e запускаються лише вручну через workflow_dispatch. Для локального відтворення повного soak shard:

SHARD_INDEX=0 SHARD_TOTAL=4 SLOW=4 node test/release.mjs
SHARD_INDEX=0 SHARD_TOTAL=4 SLOW=4 RETRY=1 node test/coop-release.mjs

Повний порядок публікації та production-перевірки описано у RELEASE.md.

Архітектура

  • Статичний клієнт: JavaScript modules, Three.js, HTML/CSS; збірка не потрібна.
  • PWA: sw.js, manifest.json, shell cache з версією релізу.
  • Кооп: host-authoritative модель; клієнти обмінюються намірами, снапшотами та подіями через src/net/.
  • Production relay: Cloudflare Worker + Durable Objects у worker/; WebSocket endpoint — wss://zr-relay.slonce70.workers.dev.
  • Worker також обслуговує Лігу, публічне лобі та SaveVault. Його деплой окремий від GitHub Pages.
  • GitHub Pages: custom Actions workflow; production deploy виконується лише після всіх блокуючих тестів.

Керування

  • WASD — рух, миша — приціл, ЛКМ — вогонь.
  • R — перезарядка, E — взаємодія, G — граната, B — магазин.
  • На touch-пристроях гра показує віртуальні органи керування автоматично.

Ліцензія

ISC.

About

🧟 Операція: Порятунок Світу — дитяча 3D-гра у браузері: сюжетна кампанія 12 країн + 🦖 Острів Динозаврів і 🧪 Глава 3, ~17 соло-режимів, онлайн-кооп 2-4, Шторм і командна Ліга. Грай: https://slonce70.github.io/zombie-world-rescue/

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages