Це девлог — чесна розповідь про те, як я створюю гру Business Empire Idle. Idle-гра, де ви будуєте бізнес-імперію від лимонадного кіоску до міжпланетної торгівлі. Розробка ще триває, але я хочу зафіксувати процес, поки він свіжий.
Чому idle-гра? Тому що це ідеальний полігон: реактивний стейт, складна математика, система прогресії, анімації, PWA. І головне — зробити гру, в яку самому хочеться грати.
Стек і чому саме такий
Гра побудована на SvelteKit 2 з Svelte 5 (Runes). Не React, не Vue — Svelte. Ось чому:
- Реактивність без зусиль —
$state,$derived,$effectзамість useState/useEffect. Немає stale closures, немає ре-рендерів - Маленький бандл — Svelte компілюється в чистий JS, без рантайм-бібліотеки
- Вбудовані анімації —
tweenedдля плавного лічильника грошей,springдля пружинного ефекту кнопки - Static adapter — деплой на GitHub Pages однією командою
TypeScript у strict mode з першого дня. Vitest для тестів. Vite для збірки. Мінімум залежностей — все працює на стандартних інструментах.
Архітектура: один стор на все
Серце гри — файл store.svelte.ts на 650+ рядків. Це єдине джерело правди для всього ігрового стану: гроші, бізнеси, апгрейди, досягнення, престиж.
Ключове рішення — розділити дані і логіку. Конфігурації бізнесів, апгрейдів, досягнень лежать окремо в src/lib/data/. Стор тільки маніпулює станом. Це дозволяє змінювати баланс гри без правок логіки.
totalIncomePerSecond — це один $derived.by(), який автоматично перераховується, коли змінюються бізнеси, синергії, перки або денні події. Жодного ручного інвалідування. Svelte 5 Runes — це магія.
13 бізнесів: від $10 до $5 млрд
Прогресія — серце idle-гри. Гравець починає з лимонадного кіоску за $10 і поступово відкриває нові бізнеси аж до міжпланетної торгівлі за $5 000 000 000. Кожен наступний бізнес коштує в тисячі разів більше, але й приносить відповідно.
Кожен бізнес має 3 тіри: базовий (1 одиниця), масштабований (10 одиниць, бонус ×2–2.5) і максимальний (25 одиниць, бонус ×4–20). Тіри — це причина продовжувати купувати один бізнес, а не тільки розблоковувати нові.
Система синергій
8 пар бізнесів дають бонуси, коли працюють разом. Лимонад + Кава = «Caffeine Hustle» (+20%). IT + Медіа = «Digital Empire» (+30%). Космічний видобуток + Міжпланетна торгівля = «Galactic Corp» (+40%). Це підштовхує гравця розвивати бізнеси парами, а не тільки найприбутковіший.
Клік-система з комбо
Idle-гра без кліків — це просто числа на екрані. Тому я додав комбо-систему: 5 кліків за 3 секунди — множник ×2, 10 кліків — множник ×5. Візуально це підкріплюється SVG-кільцем, яке заповнюється навколо кнопки, і «floating numbers», що вилітають з кожного кліку.
Кнопка «WORK» еволюціонує разом з гравцем: від «Hustle Hard» до «Run Operations», «Command Empire» і, нарешті, «Dominate Galaxy». Маленька деталь, але вона створює відчуття прогресії навіть без нових механік.
Prestige: скидаємо все, але стаємо сильнішими
Коли гравець заробив $1M за всю гру, відкривається можливість «престижу» — скинути гроші та бізнеси, але отримати Reputation Points (RP). Формула: floor(sqrt(totalEarned / 1_000_000)). Тобто чим більше заробив — тим більше RP, але з diminishing returns.
RP витрачаються в престиж-магазині на перманентні бонуси: +25% до доходу, стартовий капітал $25K, автоматичний менеджер, який скуповує найдешевший бізнес кожні 30 секунд. Ці бонуси зберігаються між прогонами — і кожен новий прогон стає швидшим.
Juiciness: як зробити числа відчутними
Це була окрема фаза розробки — «juiciness». Ціль: зробити так, щоб кожна дія давала тактильний фідбек.
- Tweened money counter — гроші не стрибають з 1000 до 2000, а плавно наростають
- Spring-анімація кнопки — кнопка «стискається» при натисканні і «відскакує» назад
- Конфетті — 80 Canvas-частинок на кожен milestone ($1K, $10K, $100K, $1M, $1B)
- Screen shake — 500ms тремтіння екрану при великих покупках
- Тоасти синергій — коли активується синергія, спливає повідомлення з назвою та бонусом
- Epoch backgrounds — фон змінюється з гаража на корпоративний офіс і далі на пентхаус. З плавним fade-переходом за 1.2 секунди
Без цього гра технічно працювала. Але відчувалась як Excel-таблиця. Після «juiciness»-фази — як гра, в яку хочеться повертатись.
Денні події та контракти
Щодня (за UTC) гра генерує випадкову подію: +50% до доходу всіх бізнесів, або -25% до вартості покупок, або бонус конкретній категорії. Рандом — детермінований через Math.sin(dayIndex). Тобто всі гравці бачать одну й ту саму подію в один день — без серверу.
Плюс 3 денні контракти: заробити X грошей, зробити Y кліків, купити Z бізнесів. Цілі масштабуються з престижем — на рівні 0 це «заробити $2K», на рівні 5 — «заробити $200K».
71 тест і 6 знайдених багів
Я написав тести не «бо так треба», а тому що баланс idle-гри — це математика, і одна помилка в формулі ламає всю прогресію. Ось реальні баги, які знайшли тести:
- Денні модифікатори не застосовувались — подія казала «+50% до ресторанів», але дохід не змінювався
- Offline-дохід ігнорував тір-бонуси — гравець повертався через 8 годин і отримував в 5 разів менше, ніж мав
- Click power не зберігався через престиж — після скидання клік-сила повертались до базової, навіть якщо в магазині були куплені бонуси
- Контракти не платили нагороду — прогрес-бар заповнювався, анімація грала, але гроші не нараховувались
- Night Owl ачівка перевіряла не ту змінну — дивилась на апгрейди замість престиж-магазину
- Cost Freeze подія збільшувала ціни замість зменшення — множник був > 1 замість < 1
Кожен з цих багів зламав би гру для реального гравця. Тести — це не бюрократія, це страховка.
AI-згенеровані сцени
Кожен бізнес має реалістичне зображення, згенероване через Midjourney: лимонадний кіоск, кав'ярня, IT-офіс, космічна станція. 13 унікальних сцен. Гравець може переглянути їх, натиснувши іконку ока на картці бізнесу.
Це не впливає на геймплей, але створює емоційний зв'язок. Коли бачиш свою «кав'ярню» — вона відчувається більш реальною, ніж рядок тексту.
Що далі
Гра живе, розробка продовжується. В планах:
- Нові бізнеси та рівні прогресії
- Розширення престиж-магазину
- Соціальні фічі — порівняння з друзями
- Більше «wow-моментів» і візуального фідбеку
- Мобільна оптимізація та покращення PWA
Чому це важливо для моїх клієнтів
Може здатись, що idle-гра не має стосунку до бізнес-сайтів. Але подивіться на список технологій: SvelteKit, TypeScript, анімації, PWA, тестування, деплой на GitHub Pages. Це ті самі інструменти і підходи, які я використовую в комерційних проєктах.
Різниця в тому, що гру я роблю для себе — і можу дозволити собі експериментувати. А потім кращі рішення потрапляють у ваші проєкти. Вашому ресторану точно не потрібна система престижу. Але анімації, реактивний стейт і архітектура — потрібні.