crypt of decay - Post a comment [entries|archive|friends|userinfo]
ketmar

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

мысли и идеи Oct. 4th, 2017|03:27 pm

ketmar
поскольку сеть у нас в 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. сетки изначально в игре не просто не было: игра даже никогда не задумывалась как сетевая. соответственно, никакого разделения данных на клиент/сервер там нет, все оперируют всем. теперешняя сеть нахачена сверху. мой будущий хак тоже хак, по духу такой же, как тот, что есть, но по сути красивей.
Link Read Comments

Reply:
From:
(will be screened)
Identity URL: 
имя пользователя:    
Вы должны предварительно войти в LiveJournal.com
 
E-mail для ответов: 
Вы сможете оставлять комментарии, даже если не введете e-mail.
Но вы не сможете получать уведомления об ответах на ваши комментарии!
Внимание: на указанный адрес будет выслано подтверждение.
Username:
Password:
Subject:
No HTML allowed in subject
Message: