Cheb's Game Engine

Планы, идеология, архитектура и т.п.

Модератор: Модераторы

Re: Cheb's Game Engine

Сообщение Cheb » 19.12.2015 19:25:18

Ты не понимаешь сути lockstep. Инпуты, опоздавшие к моменту финализации состояния, можно только отбросить. Всё держится на идеально совпадающем - до бита - повторении физики всеми клиентами на основании идеально совпадающих инпутов. Физика только целочисленная, поскольку добиться идентичного поведения плавающей запятой на разных платформах - задача нерешаемая (а если решаемая - то нужны титаны уровня Кармака).

В оригинале, этот механизм мультиплеера (DooM, Duke Nukem 3d - и все прочие игры до изобретения клиент-серверной модели в 1996 году с пришествием Квейка) позволял играть только по локалке, максимум 2..4 игрока. Бессерверная технология. Каждый клиент не мог приступать просчёту следующего кадра, пока не получал инпуты от всех остальных участников. Малейший лаг - и у всех проседал FPS.

Я возвращаюсь к истокам, исправляя недостатки этой первобытной системы разделением на слои и вводя сервер, который тут, скорее, служит как арбитр и ретранслятор.

P.S. Да, в молодости доводилось играть с другом в Дюк Нюкема в кооператив, соединив два ДОСовских компа кабелем за COM-порты.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 755
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение Mirage » 19.12.2015 21:32:19

Не то чтобы совсем не понимаю. У меня в Эйрхоккее так мультиплеер работал.
Да, есть такая проблема, что если инпут вообще не придет, то произойдет рассинхронизация.
Поэтому, инпуты были пронумерованы и учитывались только по порядку.
И если один опоздает, то приходится его ждать. Но только в том случае, если опоздает. Как правило, они приходят с нормальной задержкой и нет нужды отставать на целую секунду.
Но больше я по такой технологии мультиплеер делать не буду.:)
Хотя и тогда мне говорили, что не стоит. Не поверил.;)

Кстати, а какая проблема с плавающей точкой, которая соответствует IEEE 754?
Только FPU настроить одинаково.
Mirage
энтузиаст
 
Сообщения: 858
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Cheb's Game Engine

Сообщение Cheb » 20.12.2015 07:42:27

, что если инпут вообще не придет, то произойдет рассинхронизация.

Вот для этого в моей системе и нужны сервер и эталонный слой, отодвинутый в прошлое. Сервер ведёт список инпутов, которые дошли до него вовремя, и раздаёт всем клиентам как эталон. Если какой-то инпут, например, дошёл от клиента А к клиенту Б, но до сервера не дошёл - то извиняйте, это будет скорректировано.

Ну, и там, избыточность, буду слать в одном пакете последние три-пять-десять, посмотрим по обстоятельствам.

акая проблема с плавающей точкой, которая соответствует IEEE 754?

Да куча.
1. Тригонгометрические функции, побитовое поведение которых никак не стандартизовано, в отличие от базовой арифметики.
2. Разное поведение компилятора для разных платформ. Он же оптимизирует, может при этом менять порядок операций. Целые числа иммунны к этому, там что пнём об сову, что совой об пень. Плавающие - нет.
3. SSE. Побитовое поведение не стандартизовано. Отключать поддержку SSE - терять производительность при работе с графикой.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 755
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение Mirage » 20.12.2015 15:10:13

От сервера, обратно, кстати, тоже может потеряться/задержаться. Короче гимора с этим методом много, а плюсы сомнительны.

Cheb писал(а):Он же оптимизирует, может при этом менять порядок операций.

Нифига он не меняет. И это вроде даже фича. А те компиляторы, что меняют, делают это так, что в том же потоке это никак не выявить. Из других потоков результаты могут быть в неожиданном порядке видны, особенно на ARM. Но это уже другой класс проблем.

Насчет побитового поведения - есть число, неважно как получено, арифметикой или тригонометрией. Есть 32-битное представление соответствующее IEEE 754, которе имеет определенную точность. Даже денормализованные числа учитываются в стандарте.
Так что вычисления должны быть предсказуемы.
Mirage
энтузиаст
 
Сообщения: 858
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Cheb's Game Engine

Сообщение Cheb » 21.12.2015 02:57:09

, а плюсы сомнительны.

1. Возможность мегаизменений в мире
2. Возможность мегаорд неписей (кооп ста игроков против тысячи монстров)
У клиент-сервера пуп развяжется.

От сервера, обратно, кстати, тоже может потеряться/задержаться.

От сервера клиентам доставка гарантированная. В случае задержек/ перебоев связи, эталонный слой застрянет, и догоняющему слою потребуется проходить всё большую дистанцию, до почти полной потери физического смысла - т.е. сам для себя ничего не почувствует (а если в этот момент взаимодействовал только с неписями - то, скорее всего, и не заметит), но действия остальных игроков будут выглядеть бередовыми - будут бросаться в пропасть и биться лбом о стенку.
В тяжёлых случаях - обрыв+реконнект.

есть число, неважно как получено, арифметикой или тригонометрией.

Насколько помню, именно в этом нечисто. Забыл где статью читал - как всегда, запоминаю только выводы.
А вывод был - не по Сеньке шапка.
Там столько подводных камней и нюансов, что я float просто не потяну.

З.Ы. Сегодня медитировал над проблемой и понял, что проблемы нет. Хватит оптимизировать, пора делать. Мне уже ОБРЫДЛО делать движок, я игру хочу.
Ничего ещё не определено, все лимиты будут подбираться из принципа "по одёжке протягивай ножки". Сделаю, мал-мало оптимизирую, буду подбирать численные границы чтобы утрамбовать полученное в нужные системные требования. Это для сингла. А потом для мультиплеера системные требования подбирать по возможностям игры в сетевом режиме.

Хотя бы радиус активной зоны, он же радиус видимости. 500 метров - это я губу раскатал на шкуру неубитого медведя. Да одним сокращением её до 150 можно снизить нагрузку на порядок. Да, ёжик в тумане - не айс. Но тут уж как получится.

Короче, парадигма будет - старая, слои - полностью, пообъектно, клонируемой зоной вокруг игрока, и все слои будут выполняться в одном потоке. Не справится - пусть проседают FPS и лагает реакция других игроков.

Иначе - реаааально не потяну и опять всё заглохнет.

Осталось очередной раз придумать, как рендер к физике привязать. Чтобы при исчезновении слоя связь не рвалась, а переключалась на идущий ему на смену.

З.З.Ы. На самом деле отсечку можно брать порядка 200-300 мс. Почему? Потому что клиенты будут бежать впереди сервера на величину времени передачи от клиента к серверу. То есть, сервер (который заодно эталон времени) будет командовать клиенту "ускорься" пока инпуты от этого клиента не начнут приходить в среднем в рилтайме (с точки зрени сервера). То есть, половину пинга мы уже отрезали. Потом никинуть ещё 200мс на случай лагов, и слать клиенту утверждённый эталон.
Минус - у клиента то эталонный слой будет отставать на эти 200 + пинг. И чем больше пинг - тем больше требования к процессору или глючней лагокомпенсация. Мне кажется, это нормальная ситуация реальной жизни.

Добавлено спустя 25 минут 43 секунды:
З.З.Ы. Да, чуть не забыл.
Я считаю, что размеры городов и подземелий как в Даггерфоле - это, как раз, нормально. Главное - натянуть поверх этого громадья цели, задачи и трудности более высокого порядка. микро и не очень менеджмент логова, политический ИИ, такого рода вещи.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 755
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение Cheb » 27.12.2015 00:09:46

Закопался в перзистентную систему, выгребая тоны говнокода (там ещё поддержка Турбо Дельфи висела с 2006-го, всё раскорячивая. Буэ. :x ) и приводя систему клонирования части графа в приличный вид.
Полям при регистрации добавятся свойства, что именно с ними делать при клонировании: копировать или увеличивать счётчик ссылок.

..короче, выбрал старую парадигму :roll:
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 755
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение hinst » 29.12.2015 14:55:36

ну нафига нужна перзистентная система которая не нужна а нужна только чтобы с ней трахаться
* всеядность (пойдёт на средней машине середины 2000-х) - нужна лишь OpenGL 2.0

лолллъъ на Windows вообще OpenGL хромой. На многих компах до сих пор в OpenGL нельзя даже render-target создать: либо рисуешь прямо на экран, либо не рисуешь
* мощнейшая автонастройка рендера (сейчас уже вылезают траблы с перегревом ноута, т.к. оно выжимает из видеокарты всё даже на кубике, задирая рендерный буфер до 4000х3000)

После чего из ноута начинает валить дым а ноги пользователя получают термический шок
* официальная поддержка Windows 98 SE. Чиста для понтов.

Обновил до FPC 3.x ? Там Windows 98 больше не поддерживают, и Лазарус новый тоже не поддерживает Windows 98
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 782
Зарегистрирован: 12.04.2008 18:32:38

Re: Cheb's Game Engine

Сообщение Cheb » 29.12.2015 18:51:02

тоже не поддерживает Windows 98

Ага, сразу видно, что чукча не читатель, чукча писатель. :?

Я несколько страниц тому как как объявил, что поддержку ея бросаю.
Буду вместо ея портировать на Raspberry Pi 2 :D
(уже купил Raspberry Pi 2, поставил на неё лазарус, и начал портирование)

Обновил до FPC 3.x ?

Пока безуспешно, третий паскаль крашится с внутренними ошибками, пытаясь компилировать мой игровой модуль. Шлю багрепорт, баги исправляют, и он крашится в другом месте. И у попа была собака.
Плюс, на Дебиан вообще, и Распбиан в частности, актуальная версия FPC - 2.6.4.

лолллъъ на Windows вообще OpenGL хромой.

? :(
С двухтысячных такого не встречал.
Если человек во что-то играет, то у него давно вставлены нормальные дрова при установке третьего квейка/Стима/чего там ещё.
Если человек не играет - моя игра ему нафиг не спёрлась, слишком хардкорная и олдфажная.
У купленного в магазине десктопа с лицензионной виндой дрова уже будут стоять полноценные.

После чего из ноута начинает валить дым

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

а ноги пользователя получают термический шок

Увы, взрыва не происходит. Интел упирается в температурный потолок +85С и дальше не греется, начинает снижать частоты.

которая не нужна а нужна только чтобы с ней трахаться

Это "последний бой, он трудный самый". Она уже 100% работает, понадобилось лишь добавить одну важную фичу, заранее оптимизированную для получения эпической производительности. Говнокод я выгребаю просто из принципа, поскольку, доделав, больше уже не вернусь.
И чем меньше кода, тем легче её будет портировать на 64 бита, отловив и удавив все тайпкасты pointer <--> dword.

Добавлено спустя 6 минут 22 секунды:
З.Ы. Там в некоторых местах используется нечто вроде байт-кода, когда array of dword в перемешку содержит числовые параметры и указатели на процедуры.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 755
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение kazalex » 29.12.2015 19:20:39

Cheb писал(а): Шлю багрепорт, баги исправляют, и он крашится в другом месте.

Блин, а чего же мои не правят... :?
kazalex
постоялец
 
Сообщения: 296
Зарегистрирован: 01.06.2012 14:54:10

Re: Cheb's Game Engine

Сообщение Cheb » 02.01.2016 15:38:26

Почти доделал Чеперси, попробовал запустить - закономерно упало, но в бектрейсе - одни шестнадцатеричные адреса.

Стал разбираться - оказалось, слетела моя lineinfo, скопипащенная из RTL в хрен вспомнишь каком лохматом году. Вот чем-то структура взаимоотношений модулей изменилась, и работавший до этого генератор dwarf2 в fpc 2.6.4 вдруг начал гнать пургу.

С матюгами расковырял это, долго трахался, вставляя ей debug write'ы в самые неожиданные места.

Выяснилось: опкод DW_LNE_END_SEQUENCE !внезапно! не означает сброс состояния, поскольку за ней иногда следует DW_LNE_SET_ADDRESS с нулевым адресом, которую нужно прицельно игнорировать, да и вообще, состояние надо частично сохранять с предыдущего прохода, а иногда и с предыдущего Compilation Unit. А насколько частично - определяется методом проб и ошибок.

Короче, рафинированный геморрой :evil:

Заодно добавил игнорирование нескольких последних адресов стека вызовов в DieBySEhHack, поскольку хак с подменой адреса возврата в обработчике исключения добавляет туда шум океанов Марса.

Пока эпично превозмогал - нашёл баг с поиском в этой каше по именам екзешников, привнесённый недавним перетряхом (я же к юникодности готовлю, йо!) который, собственно, и давал эффект "только шестнадцатеричные адреса". А вышеописанные ужосныя баги поймались за компанию, и так бы и спали, пока жареный петух бы не клюнул.

Оооочень надеюсь, что при портировании на другие платформы удастся обойтись штатной lineinfo. Основную разработку по любому придётся вести на win32 + fpc2.6.4, поскольку штатные средства (насколько знаю) не обеспечивают парсинг стека вызовов, который пинг-понгом скачет между exe и dll.
..на самом деле, оно даже пытается выковырять dwarf информацию из ntdll.dll, внутрь которой уводит стек вызовов в случае не основного потока. Инфы этой там, естессно, нет, а антивирус негодуэ.

Портировать мою eldritch lineinfo на другие платформы - ищите дурака, у меня и на этой-то, для win32, чуть мосх узлом не завязался.

=============== Сообщение об ошибке: ===============
Системное исключение: Access Violation,
Попытка записи по нулевому адресу
mo_module.pp:182 в _test019.dll

Call stack:
_chentrah_module.lpr:83 в _test019.dll
cl_module.inc:675 в chentrah.exe
cl_window.inc:302 в chentrah.exe
cl_winman.inc:403 в chentrah.exe
cl_main.inc:453 в chentrah.exe
chentrah.lpr:103 в chentrah.exe
====================================================
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 755
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение скалогрыз » 02.01.2016 19:34:55

Cheb писал(а):, слетела моя lineinfo, скопипащенная из RTL в хрен вспомнишь каком лохматом году

а есть ли что-нибудь в движке не основанное на хаках? :D
скалогрыз
долгожитель
 
Сообщения: 1694
Зарегистрирован: 03.09.2008 02:36:48

Re: Cheb's Game Engine

Сообщение Cheb » 03.01.2016 00:05:48

Я начинаю что-нибудь делать, и вдруг выясняется, что вот прямо сейчас в RTL это сломано. Но я не унываю, и мой сумрачный гений порождает очередного франкенштейнова монстра, слепленного из мёртвых кусков RTL при помощи скотча и такой-то матери. Проходит пара лет - и RTL доводят таки до ума, но я всё равно оставляю своё, поскольку оно удобнее в применении и нужных мне фич больше.

Так и нарастает, слой за слоем.
Параллелная разработка, почти.

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

а есть ли что-нибудь в движке не основанное на хаках?

Есть :D Практически весь фреймворк WinAPI (окно/звук/ввод/геймпад/графический планшет) и ещё классы GUI.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 755
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение скалогрыз » 03.01.2016 00:18:29

Cheb писал(а):Я начинаю что-нибудь делать, и вдруг выясняется, что вот прямо сейчас в RTL это сломано. Но я не унываю, и мой сумрачный гений порождает очередного франкенштейнова монстра, слепленного из мёртвых кусков RTL при помощи скотча и такой-то матери. Проходит пара лет - и RTL доводят таки до ума, но я всё равно оставляю своё, поскольку оно удобнее в применении и нужных мне фич больше.

In trunk we trust ;)
Тут два правильных пути:
* либо требовать чинить немедленно и использовать trunk постоянно (рискуая нарваться на свежедобавленные глюки, но это легко лечится на update до работающией ревизии)
* либо делать свои обёртки не завязанные на внутренюю реализацию RTL-а. И всё будет красиво, как при исползовании WinAPI.
скалогрыз
долгожитель
 
Сообщения: 1694
Зарегистрирован: 03.09.2008 02:36:48

Re: Cheb's Game Engine

Сообщение Cheb » 03.01.2016 05:04:08

использовать trunk постоянно

Мааахонькая проблемка: терпеть ненавижу использовать ненадёжные инструменты.
Это повелось ещё с тех пор, когда я чёрт знает сколько месяцев убил, пытаясь найти причину зависаний своего многопоточного движка, расковырял исходники и в результате мне даже на память не осталось рабочего образца многопоточности, которую изобрёл на Турбо Паскале под ДОСом. Потому что под конец отчаялся, понял, что моя гениальная задумка не работает, и сил не осталось даже следить за бекапами.

Истинная причина? Глюкавая материнка, которая аппаратно конфликтовала со звуковой картой. Причём, с очень малой вероятиностью и в строго определённой ситуации (перезапуск буфера), которая обычно в играх встречается очень редко, а у меня происходила раз двадцать в секунду.
Понял только запуская некоторые игры, которые со звуковухой работали по принципу "включаем только когда играем звук".

А ведь мог бы сейчас бахвалиться единственной в мире многопоточной игрой под MS-DOS :cry:
Причём, реально помогало сохранять управляемость при проседании FPS рендера и играемость на всего двух мегабайтах памяти при активнейшем свопинге, поскольку на управление она реагировала и звуки воспроизводила на штатных 25 кадрах в секунду. Физика реально выполнялась параллельно с подкачкой спрайтов с диска.
А я взял, и порушил. Своими руками.

Вот с тех пор ненадёжные инструменты я ненавижу :evil:
Опять жечь своё время на поиск багов, которых там нет?

Я всегда готов помогать отлавливать баги, периодически собирая нестабильной версией фпц. С радостью.
Но вести разработку? Только на самой старой и надёжной версии.
На 3.х я обязщательно перейду. Когда-нибудь.
Пока же, 2.6.4 - монолит на века.
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 755
Зарегистрирован: 06.06.2005 15:54:34

Re: Cheb's Game Engine

Сообщение Mirage » 03.01.2016 05:21:51

Cheb писал(а):Я начинаю что-нибудь делать, и вдруг выясняется, что вот прямо сейчас в RTL это сломано. Но я не унываю, и мой сумрачный гений порождает очередного франкенштейнова монстра, слепленного из мёртвых кусков RTL при помощи скотча и такой-то матери. Проходит пара лет - и RTL доводят таки до ума, но я всё равно оставляю своё, поскольку оно удобнее в применении и нужных мне фич больше.


Не пробовал слать своего франкенштейна команде FPC в виде патчей? Может твой им посимпатичнее покажется и не надо будет потом ничего переделывать.:)
Mirage
энтузиаст
 
Сообщения: 858
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Пред.След.

Вернуться в Разработки на нашем сайте

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12

Рейтинг@Mail.ru