Страница 61 из 61
Re: Cheb's Game Engine
Добавлено: 11.01.2024 11:21:13
Cheb
sts писал(а):т.е. можно сделать П образное, шести этажное здание с улицей, с возможность стрелять по другим этажам и улице в мультиплеере?
Да. Это будет колоссальная боль - и, скорей всего, пустая бетонная коробка, поскольку вставлять мебель в эти шесть этажей - уже запредельный мазохизм - и скорей всего ты не увидишь лестничного пролёта над лестничным пролётом, поскольку, хотя технически возможно, это уже мазохизм в квадрате - но честное шестиэтажное здание возможно.
В мультиплеере - Зандронум. Поскольку мультиплеер - это к Зандронуму. Который, в отличие от GZDoom, не поддерживает истинных порталов - но полностью поддерживает триде-полы.
Хотя, с практической точки зрения - и сохранения собственного рассудка - в "Дне истреболения" нет зданий с наслоением больше двух этажей. Ну, Марк таких не делал. Я в одном месте наворотил трёхэтажную башню, на этом скриншоте:

Re: Cheb's Game Engine
Добавлено: 11.01.2024 17:02:30
Alex2013
Интересно когда появятся ремейки Дума 1-2 на движке Дума 2016 (дум 4)? Лично я пока классик дум и его ремейки временно похоронил . ("типа ну сколько можно!" фоном звук выкидываемого в окно ЭЛТ монитора... Вжух дзынь шмяк ! )

Re: Cheb's Game Engine
Добавлено: 18.03.2026 12:29:54
Cheb
Где-то в глубинах геологических слоёв происходит подвижка пород - лёгкий тремор, и потом снова глубокая, извечная тишина.
Функции "упаковать указатель на объект в dword" и "распаковать указатель на объект из dword" преобразованы в тип "ссылка Чеперси" (продвинутая упакованная запись состоящая из тогоже дворда), который все траверсеры, включая сериализаторы, обрабатывают как, вы догадались, указатель на объект. Ответ на вопрос "нафига?" прост: оная остаётся 32-битной на 64-битных платформах, экономя размер инстанса. А дальше возможны такие классы-ускоряторы, как "умная строка", "умный массив", "умный map" и прочая, на малых наборах элементов хранящие всё внутри своего 64-байтного инстанса, *резко* экономя на загрязнении кеша.
Я закончил с думом, в работе по основной работе по уши и что-то могу сделать только осенью - НО. Я проверил свои теории заговора практикой -- включая неудавшуюся попытку оптимизировать Франкен Брутал Дум 21.5 чтобы в нём шёл Okuplok -- и нашёл, что это никакие не теории а сермяжная правда, да ещё и в квадрате. Наивные алгоритмы, на каких построен движок дума (и от которых никуда не денешься ибо обратная совместимость отлита в бронзе) приводят к изнасилованию кеша уже на 5..10 тысячах активных монстров: объём данных, которые наивный алгоритм задрачивает обходом десятки тысяч раз за кадр (для каждого монстра проверяя видимость игроков, например, для чего обходит бсп дерево - или для каждого снаряда столкновение со всеми монстрами в блокмапе) перестаёт умещаться в кеш второго уровня - и всё, фреймрейт умер в муках. Это даже не O*N^2, это O*N^2 упирающийся в стену, касаясь которой взлетает в бесконечность.
Re: Cheb's Game Engine
Добавлено: 18.03.2026 16:57:07
Cheb
З.Ы. И только прокачавшись два года на думе и съев витаминку я внезапно осознал, что шёл курсом в пропасть: то, что я наваял, в реальных боевых не могло бы работать без либо
А) сборщика мусора
Б) умных указателей со счётчиком ссылок
.
К счастью, в фпц 3.2 добавилась возможность создавать кастомные менеджед типы. Если бы я доделал на более ранней версии компилятора - я был бы вынужден плясать на граблях сборщика мусора. К счастью, в 3.2 брюки лёгким движением превращаются... Превращаются брюки... В общем, "ссылка Чеперси" и станет тем самым умным указателем со счётчиком ссылок. Причём, счётчик будет храниться в ускоренном поле Чеперси, которым заведует менеджер памяти инстансов! А ссылка Чеперси может жить хоть на стеке (она же менеджед)
Минус - связка толстеет на ещё один дворд (счётчик ссылок). Плюс - толстеет только ссылаемый инстанс, каждая ссылка остаётся 32-битной.
Ускоренные поля *не* сериализуются, поэтому счётчик ссылок будет перезаполняться каждый раз естественным путём в результате десериализации.
З.З.Ы. Памятка себе на осень: привязка расслоябельных игровых объектов к будильникам будет *тоже* в ускоренных полях - и при десериализации эту привязку восстанавливает объект будильника для всех объектов в своём списке.