crypt of decay - мысли и идеи [entries|archive|friends|userinfo]
ketmar

[ userinfo | ljr userinfo ]
[ archive | journal archive ]

мысли и идеи [Oct. 4th, 2017|03:27 pm]
Previous Entry Add to Memories Tell A Friend Next Entry
поскольку сеть у нас в D2D:F сделана, но не лучшим образом (фактически, нахачена сверху; сам по себе хак годный — для условий и сроков, в которые был сделан, но), то сеть тоже надо переделывать, конечно.

я поел, воскурил, и до меня дошло, что не надо пытаться Всё Внутри Переделать. поскольку я хочу, чтобы даже в процессе сильно глубоких изменений у нас всегда была рабочая игра, то долгая кардинальная переделка кишков игры не катит. так вот.

до меня дошло, что и не надо. можно оставить рабочие структуры игры почти что intact, и просто реализовать поверх них нечто вроде proxy entities. таким образом логику игры не придётся шибко перепиливать (разве что подобавлять в некоторых стратегических местах флагов типа «что-то в объекте поменялось», их уже коге-где и так есть). и перевести кусок, который ведает взаимодействием с игроком, с прямой работы с объектами на проксики. таким образом относительно малой болью получается унификация клиентского кода для локальной и сетевой игры. слой же управления собственно логикой остаётся почти без изменений, только уезжает чуть ниже.

то есть, клиентской части становится пофигу, интерполировает ли кто-то внизу данные с сервера, или это local game: он пинает прокси, получает с них данные и все дела.

для рендера будет кодовый путь, который на основе полученых с сервера entities создаёт dummy objects, заполненые по минимуму: лишь бы рендер работал. или не создаёт ничего, если у нас local game.

в игре есть ещё split screen, и он тоже отлично ложится в эту схему. ну, два локальных клиента создадим, делов-то. хоть сорок два.

дельта-снапшоты тоже будут генерироватся из проксиков: они (проксики) спокойно могут хранить прошлое состояние полей, которым нужна синхронизация, внутри себя, и сравнивать с новыми, выплёвывая только изменения. или выплёвывать всё, если это «нулевой пациент». таких полей всё равно немного: в основном координаты и скорость объектов. ну, и animation state для анимированых панелей, потому что оные панели иногда используются в картах для катсцен, например.

код от этого красивей, конечно, не станет, но зато позволит мне делать entity system параллельно с существующей логикой, имея при этом рабочую игру. а когда я более-менее допилю — переключиться на новые механизмы (даже переключаясь на новые куски частично и постепенно, в принципе).

вдобавок, после создания entity system привинтить к ним скрипты будет чуть проще. в принципе, разработку скриптов и entity system тоже можно вести параллельно.


сразу отвечу на незаданые вопросы.

1. код игры сам по себе адский ад. ну, так исторически сложилось: оригинальный автор начинал её делать, будучи ещё нубом. а потом там наслаивалось и наслаивалось. если кто делал проекты, которые живут кучу лет, и начинались как нубокод, а дропать их нельзя — тот может примерно представить, что там внутри.

2. идея «сесть и переписать всё с нуля как надо» была неоднократно. проблемы две. мелкая: надо соблюсти оригинальную физику и квирки 1:1, потому что есть карты, которые заточены под эту механику. и крупная: перепись никогда не завершится. потому что когда есть игра, в которую можно поиграть, то это мотивирует, да и если бросить работу на пол-пути, то у нас всё ещё будет игра, в которую можно поиграть. а если делать с нуля, то игры не будет очень долго, и если бросить перепись, то весь новый код можно смело слить в мусорку, он бесполезен. поэтому переписи не будет никогда, скорее всего. поэтому же игра остаётся на пацкалике.

3. сетки изначально в игре не просто не было: игра даже никогда не задумывалась как сетевая. соответственно, никакого разделения данных на клиент/сервер там нет, все оперируют всем. теперешняя сеть нахачена сверху. мой будущий хак тоже хак, по духу такой же, как тот, что есть, но по сути красивей.
Linkmeow!

Comments:
[User Picture]
From:[info]wieiner_
Date:October 4th, 2017 - 01:38 pm
(Link)
все правильно, нельзя переписывать, иначе игруха развалится. Все время нужно иметь рабочую игру. Хуячь скрипты к энтитям! Можно еще сделать квази-энтити. типа звук или событие появления ентити (эмиттер существ) и триггеры-энтити, срабатывающие, когда игрок появляется в определенных координатах.
[User Picture]
From:[info]ketmar
Date:October 4th, 2017 - 01:45 pm
(Link)
ну, оно примерно так и будет: у нас в игре же уже есть именно такие объекты-триггеры, на них логика уровней строится. конечно, они тоже будут проксированы.
[User Picture]
From:[info]wieiner_
Date:October 4th, 2017 - 02:24 pm
(Link)
клево
[User Picture]
From:[info]wieiner_
Date:October 4th, 2017 - 01:42 pm
(Link)
не мне указывать кому-шо делать, конечно
[User Picture]
From:[info]ketmar
Date:October 4th, 2017 - 01:46 pm
(Link)
да ладно, высказывать идеи и мысли полезно: вдруг я чего-то не углядел, недодумал, etc.
From:(Anonymous)
Date:October 5th, 2017 - 04:38 pm
(Link)
Сорри, а на основе чего игра? И когда допилишь? Будешь ее как патч проталкивать или как новую игру? Собираешься в Стим ее или на другую площадку? Еще раз извини, если примитивный вопрос.
[User Picture]
From:[info]ketmar
Date:October 5th, 2017 - 04:44 pm
(Link)
я её не пилю, я просто помогаю доделывать/переделывать уже готовую. посмотри в посте пониже, где про окошки — там есть ссылка на офсайт и исходники.

игра исплючительно Free, и всегда такой будет. стима не будет никогда, потому что в ней контент от DooM и DooM II. и из всяких других вещей.