5-слойный щит.
Привет. Я продолжаю разрабатывать сервер для Lineage 2 C1 на JavaScript Проект
Работая с предметами, создал фичу — многослойный щит 😂
Блог про разработку сервера для Lineage 2 в телеге https://t.me/lineage2js
Сохраняй посты, комментируй и ставь оценки
Привет. Я продолжаю разрабатывать сервер для Lineage 2 C1 на JavaScript Проект
Работая с предметами, создал фичу — многослойный щит 😂
Блог про разработку сервера для Lineage 2 в телеге https://t.me/lineage2js
Привет. Я продолжаю разрабатывать сервер для Lineage 2 C1 на JavaScript Проект
Из-за ошибки в расчёте дистанции для атаки в поведении NPC произошёл сбой: он не может выбрать, атаковать ли ему или убегать.
Блог про разработку сервера для Lineage 2 в телеге https://t.me/lineage2js
Привет. Я продолжаю разрабатывать сервер для Lineage 2 C1 на JavaScript Проект
Продолжая работать над скилами, заметил, что некоторые атакующие скилы можно направить на себя.
Блог про разработку сервера для Lineage 2 в телеге https://t.me/lineage2js
Привет. Я продолжаю разрабатывать сервер для Lineage 2 C1 на JavaScript Проект

В первом же квесте Fighter's Tutorial (даёт SP и карту мира) столкнулся с любопытным моментом. Охота на внешне одинаковых NPC, но на деле разных!
Речь пойдет только о квесте для людей на острове Talking Island Village.
В чём подвох?
В мире Lineage есть два NPC с одинаковым именем - Bearded Keltir.
Внутри сервера это разные NPC: ID 12082(tuto_keltir) и ID 481(keltir).
По квесту Fighter's Tutorial надо добыть Keltir Fang.
Убивайте Bearded Keltir, пока не получите Keltir Fang x4.
Как различать Bearded Keltir?
У этих NPC есть несколько зон spawn'a. Некоторые зоны пересекаются и в одной зоне могут находиться разные Bearded Keltir.
Так например если вы решите проходить квест возле Talking Island Village то вот на что надо обратить внимание:
* Keltir Fang падает с шансом в 100%. Если не упал, то вы убили не того NPC.
* С нужного Bearded Keltir не падает дроп. Дроп у ID 12082(tuto_keltir) отсутствует.
Вывод
Лучше всего проходить квест возле Cedric's Training Hall так как там одна из зон появления Bearded Keltir они же ID 12082(tuto_keltir).
Блог про разработку сервера для Lineage 2 в телеге https://t.me/lineage2js
Привет. Я продолжаю разрабатывать сервер для Lineage 2 C1 на JavaScript Проект
При добавлении SoulShot функционала не добавил проверку не только на наличие оружия, но и кто атакует — игрок или NPC. Как итог теперь все атакуют с помощью SoulShot.
Блог про разработку сервера для Lineage 2 в телеге https://t.me/lineage2js

У проекта появилась чёткая архитектура управления сущностями. Теперь NPC, игроки, питомцы и другие объекты взаимодействуют в мире через систему менеджеров — рассказываю, как это работает.
В игровом мире есть разные типы сущностей: NPC, игроки (Player), питомцы (Pet) и другие. Каждая из них имеет свои состояния (движение, атака, бездействие) и требует управления.
Основные сущности и их поведение
• NPC – управляет собой (перемещение, атака, idle).
• Player – управляется игроком (те же состояния: ходьба, атака и т. д.).
• Pet – похож на NPC, но принадлежит игроку.
Менеджеры и их задачи
1. NpcManager – создаёт NPC, реагирует в случае смерти NPC.
2. PlayersManager – отвечает за вход игроков в мир.
3. PetsManager – управляет питомцами (аналогично NPC, но с привязкой к игроку).
4. EntitiesManager – главный координатор:
o Управляет NpcManager и PlayersManager.
o Обрабатывает взаимодействия (например, если игрок подошёл к NPC, оба получают информацию друг о друге).
5. VisibilityManager – отвечает за видимость объектов:
o Определяет, кто кого видит.
o Периодически обновляет списки видимости для оптимизации.
6. MovingManager – обновляет позиции всех подвижных объектов в мире.
Зачем это нужно?
Такая система позволяет:
• Эффективно управлять сотнями сущностей.
• Оптимизировать обновление состояний (движение, видимость, атака).
• Гибко добавлять новые типы объектов (монстры, питомцы, NPC-торговцы).
Блог про разработку сервера для Lineage 2 в телеге https://t.me/lineage2js
Привет. Я продолжаю разрабатывать сервер для Lineage 2 C1 на JavaScript Проект

Хорошие новости: Теперь сервер не грузит всех NPC подряд, а только тех, кто рядом с игроком. Это значит:
* Меньше лагов – сервер не тратит силы на то, что далеко от игрока.
* Плавнее игра – особенно в городах и массовых сражениях.
* Стабильнее мир – больше NPC вокруг, но без нагрузки на клиент.
Как работает VisibilityManager?
Представьте радар на подлодке – он сканирует пространство вокруг и засекает только то, что действительно рядом.
* Каждые 3 секунды система проверяет, какие NPC или игроки находятся в зоне видимости.
* Неважно, кто к кому подходит – хоть игрок к мобу, хоть моб к игроку, если он в радиусе, сервер его "увидит" и сообщит игроку.
* Всё лишнее – выгружается – зачем держать в памяти то, что далеко и не влияет на игру?
Итог:
* Меньше тормозов – клиент не грузит 3D-модели тех NPC, которых игрок не видит.
* Экономия трафика – сервер не отправляет игроку данные о мобах на другом конце карты.
Блог про разработку сервера для Lineage 2 в телеге https://t.me/lineage2js
Привет. Я продолжаю разрабатывать сервер для Lineage 2 C1 на JavaScript Проект

Копаясь в серверных файлах наткнулся на пасхалку.
На острове Talking Island Village в храме Einhasad есть два NPC, которые стоят рядом друг с другом и имеют имена Harrys и Petron.
У каждого NPC на сервере есть цифровой ID и текстовый ID.
Так, например, для Harrys(ID 7035) его текстовый ID - Harry, а для Petron(ID 7036) - Potter
Таким образом, если сложить их ID, получится - Harry Potter
npc_beginguild_coach7035[harry]level=70...npc_end
npc_begin
guild_coach
7036
[potter]
level=70
...
npc_end
Блог про разработку сервера для Lineage 2 в телеге https://t.me/lineage2js
Помните как мы бегали по горам и не придавали значение тому как быстро спускались или поднимались на них?
Как мы знаем в реальной жизни перемещаясь на плоскости горизонтальная скорость у нас постоянная. Как только мы начинаем преодолевать горы и другие неровности то горизонтальная скорость у нас будет меньше. Но не в мире Lineage 2 где горизонтальная скорость всегда постоянная и нее зависит от неровностей. Связанно это с тем чтобы было проще синхронизировать персонажа на сервере и клиенте. Ведь на сервере нет точной модели мира, а лишь примерное очертание называемое geodata. А из-за того, что geodata приблизительно повторяет ландшафт клиента то было бы невозможно синхронизировать персонажа по Z оси. Поэтому синхронизация идет только по X и Y оси.
Видео:
1) Горизонтальная скорость на плоскости постоянная.
2) Как было бы в жизни. Взбираясь на гору горизонтальная скорость падает.
3) Как сделано в игре. Горизонтальная скорость постоянная.
4) Демонстрация из игры. Бежит словно нет никаких гор.
Блог про разработку сервера для Lineage 2 в телеге https://t.me/lineage2js

Привет.
Я разрабатываю эмулятор сервера для Lineage 2 Chronicle 1: Harbingers of war на Node.js.
Столкнулся с проблемой синхронизации скорости персонажа на сервере с клиентом. Когда в игре вы нажимаете мышкой в то место, куда хотите перейти то происходит плавный переход с анимацией движения. На сервере в этот момент тоже происходит движение по таймеру, но не такое плавное.


Для примера я взял сборку написанную на java l2j-lisvus Сборок много. Но все они являются fork’ами проекта l2jserver https://l2jserver.com/ и многое наследуется. В том числе и передвижение персонажа.
В l2j-lisvus, как и во всех сборках l2jserver перемещение персонажа на сервере идет при помощи таймера с приростом одинаковых значений.
Проблема проявляется, когда нам надо сделать какое-то действие после того, как персонаж добежал до пункта назначения. Например, нанести удар по NPC.



Как работает передвижение персонажа на сервере.
За основу взяты базовые характеристики персонажа. Скорость бега 126.

На данной схеме идет прирост координат персонажа каждые 1000мс на 126 unit’ов. Исходя из схемы выше пример кода для действий персонажем после достижения пункта назначения:
// Прироста координат нет. Просто считаем когда персонаж дойдет до конечных координат.
const distance = 1500;
const playerSpeed = 126;
const ticks = distance / playerSpeed; // 11.90
const time = ticks * 1000; // 11900mc
setTimeout(() => {
// действие персонажа после бега
}, time);




Зеленой зоной показана точка куда должна ступить нога персонажа если бы не было расхождений.
Рост скорости при развитии персонажа.
126 — это базовая скорость. И по мере развития персонажа будет расти и скорость передвижения. А значит расхождение будет больше. Но перед тем, как создать формулу надо подтвердить теорию, что скорость ходьбы влияет на расхождение.
Данные о характеристиках персонажа передаются от сервера к клиенту.
Пакет UserInfo.js 83 строчка.
writeD(player.runSpeed);
writeD(player.walkSpeed);
Базовые значения:
runSpeed: 126
walkSpeed: 88
Выставляю значения walkSpeed: 126. Если скорость ходьбы будет равна скорости бега, то расхождения должны пропасть.


Персонаж синхронизирован и начинает атаку вовремя. Теперь надо понять, как скорость ходьбы влияет на расхождения между клиентом и сервером.
Сколько же персонаж успевает пройти перед тем, как начинает бежать?
Надо поймать момент когда ходьба переходит в бег. Для этого передадим в клиент данные, где скорость ходьбы будет больше скорости бега. Из-за этой разницы будет виден переход и можно будет рассчитать пройденное расстояние при ходьбе.
runSpeed: 10
walkSpeed: 600

При скорости шага в 600 персонаж успевает пройти 250, прежде чем начинает бежать.
600 / 250 = 2.4
700 / 291 = 2.4
800 / 333 = 2.4
Из этого вывод, что персонаж перед тем, как начать бежать успевает пройти расстояние в 2.4 раза меньше, чем его скорость ходьбы.
Значит при скорости ходьбы 88 персонаж пройдет 36 unit’ов.
88 / 2.4 = 36

Решение
Формула для расчета времени:
сколько_прошли_на_старте = скорость_ходьбы / 2.4
(((дистанция_между_нпц_и_игроком - сколько_прошли_на_старте) / скорость_бега) * 1000мс) + время_которое_прошли
Для примера дистанция 1500.
Из них мы 36 прошли.
1500 - 36 = 1464 расстояние для бега.
Скорость бега 126 в секунду.
1464 / 126 = 11.61 (количество отрезков, которое мы пройдем за секунду).
11.61 * 1000 = 11610мс бега.
к 11610 надо прибавить время ходьбы
Скорость ходьбы 88 в секунду.
1000 / 88 = 11.36мс за 1 unit
36 unit * 11.36мс = 408мс
11610 + 408 = 12018мс
12018мс является точным временем от начала старта и до конца.
Сравниваем со старым временем 11900мс. Разница в 118мс.
setTimeout(() => {
player.attack(npc);
}, 12018);




Как видно выше разница положения ног при разных скоростях отсутствует, а значит решение работает.
Ссылка на проект: https://github.com/lineage2js
Ссылка на блог: https://t.me/lineage2js

Тестирую синхронизацию объектов на перемещение и атаку между NPC и игроком и немного намусорил. Дроп, который падает, показывает текущее местоположение объекта на стороне сервера. Каждый n-ный тик происходит синхронизация.
Блог про разработку сервера для Lineage 2 в телеге https://t.me/lineage2js
Привет. Занимаюсь разработкой сервера для Lineage 2 C1. Копался в клиенте игры и решил сделать перебор всего оружия для теста.

Видео: youtube
Ссылка на проект: https://github.com/lineage2js
Ссылка на блог: https://t.me/lineage2js

Привет.
Я разрабатываю эмулятор сервера для Lineage 2 Chronicle 1: Harbingers of war на Node.js.
Столкнулся с проблемой синхронизации скорости персонажа на сервере с клиентом. Когда в игре вы нажимаете мышкой в то место, куда хотите перейти то происходит плавный переход с анимацией движения. На сервере в этот момент тоже происходит движение по таймеру, но не такое плавное.


Для примера я взял сборку написанную на java l2j-lisvus Сборок много. Но все они являются fork’ами проекта l2jserver https://l2jserver.com/И многое наследуется. В том числе и передвижение персонажа.
В l2j-lisvus, как и во всех сборках l2jserver перемещение персонажа на сервере идет при помощи таймера с приростом одинаковых значений.
Проблема проявляется, когда нам надо сделать какое-то действие после того, как персонаж добежал до пункта назначения. Например, нанести удар по NPC.



Как работает передвижение персонажа на сервере.
За основу взяты базовые характеристики персонажа. Скорость бега 126.

На данной схеме идет прирост координат персонажа каждые 1000мс на 126 unit’ов. Исходя из схемы выше пример кода для действий персонажем после достижения пункта назначения:
// Прироста координат нет. Просто считаем когда персонаж дойдет до конечных координат.
const distance = 1500;
const playerSpeed = 126;
const ticks = distance / playerSpeed; // 11.90
const time = ticks * 1000; // 11900mc
setTimeout(() => {
// действие персонажа после бега
}, time);




Зеленой зоной показана точка куда должна ступить нога персонажа если бы не было расхождений.
Рост скорости при развитии персонажа.
126 — это базовая скорость. И по мере развития персонажа будет расти и скорость передвижения. А значит расхождение будет больше. Но перед тем, как создать формулу надо подтвердить теорию, что скорость ходьбы влияет на расхождение.
Данные о характеристиках персонажа передаются от сервера к клиенту.
Пакет UserInfo.js 83 строчка.
writeD(player.runSpeed);
writeD(player.walkSpeed);
Базовые значения:
runSpeed: 126
walkSpeed: 88
Выставляю значения walkSpeed: 126. Если скорость ходьбы будет равна скорости бега, то расхождения должны пропасть.


Персонаж синхронизирован и начинает атаку вовремя. Теперь надо понять, как скорость ходьбы влияет на расхождения между клиентом и сервером.
Сколько же персонаж успевает пройти перед тем, как начинает бежать?
Надо поймать момент когда ходьба переходит в бег. Для этого передадим в клиент данные, где скорость ходьбы будет больше скорости бега. Из-за этой разницы будет виден переход и можно будет рассчитать пройденное расстояние при ходьбе.
runSpeed: 10
walkSpeed: 600

При скорости шага в 600 персонаж успевает пройти 250, прежде чем начинает бежать.
600 / 250 = 2.4
700 / 291 = 2.4
800 / 333 = 2.4
Из этого вывод, что персонаж перед тем, как начать бежать успевает пройти расстояние в 2.4 раза меньше, чем его скорость ходьбы.
Значит при скорости ходьбы 88 персонаж пройдет 36 unit’ов.
88 / 2.4 = 36

Решение
Формула для расчета времени:
сколько_прошли_на_старте = скорость_ходьбы / 2.4
(((дистанция_между_нпц_и_игроком - сколько_прошли_на_старте) / скорость_бега) * 1000мс) + время_которое_прошли
Для примера дистанция 1500.
Из них мы 36 прошли.
1500 - 36 = 1464 расстояние для бега.
Скорость бега 126 в секунду.
1464 / 126 = 11.61 (количество отрезков, которое мы пройдем за секунду).
11.61 * 1000 = 11610мс бега.
к 11610 надо прибавить время ходьбы
Скорость ходьбы 88 в секунду.
1000 / 88 = 11.36мс за 1 unit
36 unit * 11.36мс = 408мс
11610 + 408 = 12018мс
12018мс является точным временем от начала старта и до конца.
Сравниваем со старым временем 11900мс. Разница в 118мс.
setTimeout(() => {
player.attack(npc);
}, 12018);




Как видно выше разница положения ног при разных скоростях отсутствует, а значит решение работает.
Ссылка на проект: https://github.com/lineage2js
Ссылка на блог: https://t.me/lineage2js
Привет.
Занимаюсь разработкой сервера для Lineage 2 C1 на JavaScript(Node.js). Копался в клиенте игры и решил сделать перебор всего оружия для теста.

Ссылка на проект: https://github.com/lineage2js
Ссылка на блог: https://t.me/lineage2js
Согласно свежеполученному паспорту, сегодня исполняется 49 лет любителю стихов, правды и лысых женщин Даниле Багрову из дилогии «Брат».
Добро пожаловать в рубрику – КиноДата. В ней мы делимся датами из кино, соответствующими дню в реальности.
Подписывайтесь тут или в нашем Telegram-канале, а если знаете интересную дату из кино – кидайте в комментариях.
![Вомбатные итоги недели [5]](https://img.vombat.su/xl/images/post/big/2024/04/11/17127970757391.png)
Всех с пятницей! Поделюсь с вами основными итогами недели.
Поехали! 🚀
Многие просили сделать общую статистику за всё время:
На этой неделе к нам пришли новые интересные авторы:
Также хочу отметить пользователей, с хорошим авторским контентом, которые пришли к нам раньше и были активны на этой неделе:
Подпишитесь на них, чтобы не пропустить интересные посты.
ZaTaS запилил для нас новые стикеры в уже существующий вомбатный стикер-пак в Телеграм. Скачать можно по ссылке - https://t.me/addstickers/vombat_pack
![Вомбатные итоги недели [5]](https://img.vombat.su/xl/images/post/big/2024/04/11/17127971422377.png)
Осталась пара дней, чтобы успеть поучаствовать в конкурсе “Весело отмечаем: конкурс за лучший пост и комментарий на Вомбате [5]”
Составили пары для отправки подарков в рамках “Секретного деда мороза” и отправили всем на e-mail - пожалуйста проверьте почту, и ждем отправки всех подарков до 12 декабря.
В начале недели произошла резка просадка мощностей сервера. Хостер о проблемах не сообщал, зато сообщали пользователи Вомбата. Пришлось экстренно “собирать” новый сервер и переносить Вомбата туда. Спасибо всем, кто пишет нам о проблемах.
Растем в рейтинге сайтов Similarweb:
Спасибо всем, кто делает классные посты - это всё благодаря вам ❤️
![Вомбатные итоги недели [5]](https://img.vombat.su/xl/images/post/big/2024/04/11/17127971603262.png)
![Вомбатные итоги недели [5]](https://img.vombat.su/xl/images/post/big/2024/04/11/17127971604874.png)
Кому интересно, есть и статистика по географии пользователей Вомбата:
![Вомбатные итоги недели [5]](https://img.vombat.su/xl/images/post/big/2024/04/11/17127971549295.png)
Лучшие посты недели (по рейтингу):
Самые обсуждаемые посты (по количеству комментариев):
Топ авторов недели (по количеству постов):
Лучшие комментаторы недели (количество комментариев):
Топ комментаторов в чате Telegram:
![Вомбатные итоги недели [5]](https://img.vombat.su/xl/images/post/big/2024/04/11/17127971748815.png)
Напоминаем про наши каналы в соцсетях (публикуем в них топ-5 постов за день):
А баги и предложения можно писать в наш уютный чатик в Телеграме - https://t.me/vombat_su/
Всем привет. Меня зовут Максим. Являюсь веб-разработчиком и сейчас поставил цель разработать два своих небольших проекта и довести дело до продаж.
Вообще имею большое кладбище стартапов. Их конечно нельзя назвать полностью неудачными, т.к получал с них опыт, что очень важно и полезно.
Но сейчас решил изменить подход к разработке, развитию проектов. Одно из изменений - вести заметки и делиться удачным, неудачным опытом. Возможно это поможет довести проекты до конечной цели и вполне возможно опыт, которым поделюсь будет кому-то полезен.
Для разработки выбрал два проекта: система лояльности для небольшого бизнеса и seo-мониторинг сайтов. Пока без подробностей.
Точка отсчёта - 22 мая 2025 года. Релиз seo-мониторинга - 1 июля 2025 года, система лояльности - 1 августа 2025 года.
Первый раз при разработке своих проектов сделал оценку трудозатрат и будет интересно сравнить ожидание и реальность.
Также посоветовали больше писать о проектах, делиться мыслями. Будет конечно трудно, но попробуем)
Для коротких заметок создал канал в telegram https://t.me/itmvpnotes
Спасибо за внимание

No-code выглядит соблазнительно.
Не надо учиться кодить. Разработчики не нужны. Накликал интерфейс - и запускай единорога.
Звучит красиво.
А на деле - быстро превращается в болото.
Недавно видел пример: ребята сделали приложение для изучения испанского языка на no-code.
Через месяц им пришлось переписать всё на код.
Причина простая - костыли.
И это не открытие. Я ещё лет десять назад видел такие штуки.
Delphi, Microsoft Access, Lotus Notes, позже Oracle APEX — там тоже можно было натыкать кнопочек, набросать интерфейс, и оно даже работало.
Но стоило захотеть что-то серьёзнее - и упираешься в потолок платформы.
В итоге такие проекты либо переписывают, либо бросают.
No-code повторяет ту же историю.
Хочешь добавить функцию - нельзя. Делаешь костыль.
Хочешь ещё - снова костыль.
Через месяц костылей так много, что проект перестаёт развиваться.
Да, есть исключения. Специализированные инструменты работают классно.
Тильда для лендингов. Airtable для таблиц. Retool для дашбордов.
Но это не «замена программистов», а «ускоритель для специалистов».
А универсальные конструкторы «сделай любое приложение без кода» - это мираж.
Ты вроде строишь продукт, а на деле собираешь небоскрёб на болоте.
Я сам часто запускаю проекты и пишу про эти попытки, удачные и не очень.
Так что тема no-code для меня не теория, а наблюдения из практики.

В юном возрасте в игры играешь много и взахлёб, причём абсолютно не важно, что это за игра и какого она качества. Но с годами отношение меняется. Ты становишься более придирчив и избирателен в вопросе выбора времяпрепровождения, и это нормально! Меняется ценность времени. Будучи ребёнком и не имея игрового кругозора, обычно безразлично во что играть! Но с появлением работы, семьи и других важных занятий приходится делать выбор, чему себя посвятить. Поэтому далеко не каждый продукт будет стоить потраченного времени.
По себе стал замечать, что сильно упало желание играть (если сравнивать с тем, что было даже десяток лет назад), а порою просто лень учиться чему-то новому. Да и новые проекты стали не столь интересны, поэтому комфортнее и проще включить что-то старое, уже знакомое и родное.
На это накладывается упавшее качество игр и игровой индустрии в целом. Эти, местами сырые и недоделанные продукты, раньше были бы невозможны по причине того, что интернет был не распространен. Поэтому, если игра выходила забагованным куском кода, в большинстве случаев её ждал коммерческий провал.
Да и повсеместное использование лутбоксов, платных боевых пропусков или, того хуже, выпуск игры с вырезанным контентом и необходимостью покупать дополнения для полного игрового опыта — всё это лишь отталкивает. Стоит отметить, что новое поколение геймеров изначально «варилось» в этой игровой индустрии, и для него это абсолютная норма. «Окно Овертона» открыто уже нараспашку, и большой вопрос, что ждёт нас дальше...

Я думаю, что причиной сложившейся ситуации является то, что раньше значительная часть разработчиков изначально была фанатами игр. Они либо индвидуально, либо объединившись создавали те проекты, в которые сами хотели бы играть. Далеко ходить не надо, ценностями «старой» Blizzard были «Игра превыше всего» и «Приоритет качества». В наше время во главе большинства крупных игровых компаний далеко не геймеры, а менеджеры-карьеристы, для которых важна финансовая сторона вопроса, а в играх они и вовсе могут не разбираться.
Но рано или поздно произойдёт трансформация игровой индустрии, и то, как она изменится, во многом зависит от нас. Что ждёт геймеров: дальнейшая коммерциализация и «Заплати 5$, чтобы перейти на следующий уровень» или взрыв, подобный произошедшему в 1983 году, и перерождение индустрии?

Фрагменты коробок картриджей, извлеченных во время раскопок на свалке в Аламогордо, Нью-Мексико в 2014 году. Различимы фрагменты игр E.T., Centipede и другие материалы, имеющие отношение к Atari.
Мой посыл не в том, что раньше трава была зеленее — просто тогда было по-другому. У нынешней игровой индустрии есть большое количество своих преимуществ.
Появился шанс проявить себя, сделав отличный инди-продукт (например, как это сделали создатели Vampire Survivors или Stardew Valley). Благодаря движкам вроде Unreal Engine или Unity разработка игр стала более доступной. Отпала необходимость бегать по издателям в надежде договориться о раскрутке и продаже игры. Теперь это можно сделать самому, используя разные площадки вроде Steam (да, способ не идеальный, но раньше было гораздо хуже). Появилась возможность получить деньги на такие продукты, на которые в прошлом зелёный свет никто бы не дал — краудфандинг. Без таких площадок как Kickstarter, мы бы не досчитались множества крутых проектов, например, Pillars of Eternity, Divinity: Original Sin, Star Citizen, The Banner Saga, Bloodstained: Ritual of the Night (о которой я писал недавно) и т.д.
Если порассуждать о будущем и о том, в какую сторону уйдёт гейм индустрия, самое очевидное, что приходит в голову — это внедрение искусственного интеллекта. Это может быть помощь как в написании базового кода или диалогов, так и в дизайне, например, при создании артов к игре. Взять хотя бы недавний мод для Mount & Blade II: Bannerlord, который с помощью ChatGPT «оживляет» диалоги с NPC, делая их реалистичнее. Это уменьшит количество специалистов, необходимых для разработки, что должно удешевить производство игр. Ведь как говорят игровые корпорации: "Разработка дорожает".

NPC в Mount and Blade 2 Bannerlord будут знать свой возраст, родство, о войнах и географии мира, будут помнить прошедшие события
Не стоит забывать про улучшение уже имеющихся движков. Упомянутый мною ранее Unreal Engine старается облегчить задачу разработчикам, с каждым новым обновлением упрощая работу с движком.

На мой взгляд, индустрия прошлого была не такой гибкой, с большим количеством трудностей как на этапе поиска инвесторов, так и в момент раскрутки проекта. Значительная часть ныне известных компании вроде New World Computing, Id Software (список можно продолжать и продолжать) очень часто пользовалась сарафанным радио при продвижении своего продукта. Особенно этот способ любили разработчики Shareware игр, которые надеялись на то, что их проект будет передаваться из рук в руки и настолько понравится людям, что они будут добровольно платить деньги за него. Немало было и тех, кто лично ходил к издателям или стучал во все магазины, пытаясь договориться о продаже игры.
Продолжая сравнение современных и ретро игр, можно заметить, что из-за слабых вычислительных мощностей компьютеров прошлого не было возможности делать упор на графику. Именно поэтому придумывались разнообразные механики, интересные истории, выдающийся геймплей — что угодно, что может завлечь пользователя в игровой мир, несмотря на скудный внешний вид!
Если брать крупные ААА проекты современности, очень часто они похожи не на творческие работы увлеченных людей, а продукты по получению максимальной прибыли при минимальных вложениях. Это всё выливается в банальное "выжимание соков" из студий титанами игровой индустрии вроде Electronic Arts. После того, как студия перестает приносить прибыль, она просто закрывается. Эх, сколько прекрасных компаний, было загублено таким вот образом...

Кладбище игровых студий Electronic Arts
И только работающие "по старинке" инди-студии, использующие современные возможности, которыми не обладали их предшественники, регулярно выделяются, создавая неординарные и самобытные проекты!
В качестве вывода хотелось бы сказать, что индустрия не стоит на месте и развивается. В каких-то аспектах произошёл революционный прогресс, о котором разработчики и игроки прошлого не могли и мечтать, но в чём-то был сделан огромный шаг назад, способный завести индустрию в тупик. Что получится в итоге — покажет лишь время. А сейчас мне интересно узнать ваши мысли о том, куда мы идём и что ждёт игровую индустрию как с точки зрения игрока, так и с точки зрения разработчика. Делитесь в комментариях.
Я играю в игры больше 25 лет и запомнил их именно такими: душевными и затягивающими, с увлекательными механиками и интерактивностью, без внутриигровой валюты и попыток быть чем угодно, но не игрой. В моём Telegram канале тебя ждут не только обзоры на игры, но и актуальные новости, а также рассуждения о геймдеве. Подписывайся, будет интересно!

Делать продукт, которым не пользуешься сам это как готовить еду и не пробовать. Рано или поздно накормишь юзеров сырым бэком (https://t.me/debug_leg/634).
Я прочувствовал это сразу на двух своих проектах: расширении Photo Math и TG-боте Why Cry Bot. Как пользователю, мне они оба даром не сдались. Мое время решения школьных математических задач давно прошло, а распознавать причину детского плача сейчас тупо не у кого. Кстати, бот уже давно отвалился и не работает (https://t.me/debug_leg/631).
Из-за этого у меня всегда вылезает одна и та же проблема: когда я не юзаю свой сервис, я не чувствую боль пользователей, не вижу баги и пилю фичи в пустоту.
Сейчас и Photo Math плавно отъезжает на кладбище. Google Ads окончательно зарезал показы за «Enabling dishonest behaviour (https://t.me/debug_leg/601)» (помощь в списывании), а бороться с этим у меня больше нет ни желания, ни сил.
Зато урок усвоен на 100%: мне надо стараться пилить продукты в первую очередь «для себя».
А у вас много таких проектов на кладбище? Пытались делать что-то чисто «под рынок», вообще не являясь ЦА?

После отпуска я понял простую вещь - двух недель достаточно, чтобы забыть вообще всё, чем ты занимался.
Если у тебя нет структуры, стек превращается в хаос из случайных библиотек, фреймворков и зависимостей.
Поэтому я сел и собрал для себя техрадар - единый стек, который позволяет запускать pet-проекты и мини SaaS быстро и без боли.
React
🧠 Почему: куча библиотек, море документации и огромное комьюнити. Плюс масса готовых компонентов - не надо изобретать велосипед.
WXT
⚡ Почему: лучший фреймворк для браузерных расширений, если нужно быстро. Реально сокращает путь от идеи до первой установки
MUI
🎨 Почему: так как большинство моих проектов - Chrome Extensions, UI-компоненты под Material Design органично вписываются в браузер от Google.
Netlify
☁️ Почему: одна из самых удобных платформ для веб-разработки. Автоматическая сборка, тестирование и деплой в пару кликов. Работает стабильно и без боли.
Supabase
🗄 Почему: open-source альтернатива Firebase, но с Postgres под капотом — понятным, гибким и предсказуемым. Есть всё: авторизация, база, edge-функции и SQL-запросы.
Yandex Cloud
💾 Почему: недорогой S3, с "льготным" объёмом данных, за который не берут денег. Плюс умеет поднимать Docker-контейнеры в serverless-режиме. Идеально для пет-проектов.
CI/CD — Jenkins
🔁 Почему: не прожорлив, стабилен и с кучей плагинов. Работает даже на обычном VPS.
GlitchTip
🐞 Почему: не ест столько памяти, как Sentry, но совместим с его API и библиотеками. Отличный вариант для отслеживания ошибок.
Umami
📊 Почему: не блокируется ad-блоками, лёгкая и быстрая. Отличная альтернатива Google Analytics и Яндекс.Метрике.
JetBrains IDEA
💻 Почему: всю жизнь писал на Java и Kotlin - это мой родной IDE. Самый знакомый и надёжный инструмент.
WebStorm
🧠 Почему: по сути та же IDEA, только заточенная под JS и TypeScript.
Cursor
🚀 Почему: ускоряет разработку. Во второй версии можно подключить debug port Chromium и буквально «вайбкодить» с ИИ в реальном времени.
DBeaver
📘 Почему: купить лицензию DataGrip сложно, а DBeaver - почти то же самое. Не идеально, но достаточно для работы с БД.
GitHub
🌐 Почему: так исторически сложилось. Репозиторий, автодеплой, CI - всё в одном месте.
TypeScript
🧩 Почему: я привык к типизированной Java, и JS без типов меня бесит 😅.
Плюс Cursor тратит меньше токенов, потому что не нужно проверять типы, и упрощается процесс vibe debugging - сразу понятно, что за данные под капотом.
Python
🐍 Почему: стараюсь минимизировать, но иногда выручает. Особенно когда дело доходит до ML и AI - ребята из этой среды его обожают.
(А вот Kotlin, как бы я его ни любил, сюда просто не ложится.)
Сейчас думаю над системой логов и метрик — скорее всего, выберу VictoriaMetrics.
Ещё у меня есть телеграм-канал, где я рассказываю, как всё это использую вживую, и делюсь процессом разработки своих пет-продуктов 👉 t.me/debug_leg
Комментарии