Just a week after the holidays, well rested, I already made few important changes in Xash3D FWGS.
1. There is no more
This logic led to a confusion, most players don't know about
Now it has been completely reduced to converting only when both
As a bonus,
It's still to possible to generate this file, as it remains the main _native_ game definition format for Xash, with documented console command
As a second bonus, we don't create folders in read-write storage when RoDir is used anymore (RoDir is an engine feature that allows to separate read-only and read-write storage). The game folder structure is now created on demand.
2. While I was testing my patch on Quake game directories, I tried to load Dimension of the Past from Quake's re-release in QuakeWrapper. It works fine, some stuff is broken, but in the same way as in the typical Quake fork.
Loading new episode's levels requires BSP2 support from the engine. Xash3D already supports BSP2, but it is implemented as a compile-time macro. Compiling the engine with this macro defined and without it is a pain in the ass and a waste of time even for programmers. Now imagine users who don't know or don't care how these computers work...
The reason why it is a compile-time macro, is that BSP2 requires some internal structures to be larger. This however has a drawback as it breaks compatibility with a few Half-Life mods that like to poke inside engine's structures.
Now, the engine will expand these internal structures on demand, when user attempts to load BSP2 map. This doesn't fix compatibility issues for these advanced HL mods, but at least allows using BSP2 from the same engine binary without recompiling anything.
1. There is no more
liblist.gam to gameinfo.txt convert mechanism. Almost. Xash3D uses gameinfo.txt to allow extra options for mods, and previously generated this file from GoldSrc's liblist.gam on the fly if the file was too old or didn't exist.This logic led to a confusion, most players don't know about
gameinfo.txt and continue modifying liblist.gam. New game definition file is just a useless clutter in the game directory for them, some mods, even unknowingly, shipped an outdated and broken game definition file.Now it has been completely reduced to converting only when both
gameinfo.txt and liblist.gam exist, but liblist.gam has newer modification time for those who rely on this feature. Though it's now deprecated, and might be dropped in the future.As a bonus,
gameinfo.txt isn't generated anymore for Quake game directories, which should be good for those using QuakeWrapper... I hope that isn't just two people: me and Mike. :)It's still to possible to generate this file, as it remains the main _native_ game definition format for Xash, with documented console command
fs_make_gameinfo.As a second bonus, we don't create folders in read-write storage when RoDir is used anymore (RoDir is an engine feature that allows to separate read-only and read-write storage). The game folder structure is now created on demand.
2. While I was testing my patch on Quake game directories, I tried to load Dimension of the Past from Quake's re-release in QuakeWrapper. It works fine, some stuff is broken, but in the same way as in the typical Quake fork.
Loading new episode's levels requires BSP2 support from the engine. Xash3D already supports BSP2, but it is implemented as a compile-time macro. Compiling the engine with this macro defined and without it is a pain in the ass and a waste of time even for programmers. Now imagine users who don't know or don't care how these computers work...
The reason why it is a compile-time macro, is that BSP2 requires some internal structures to be larger. This however has a drawback as it breaks compatibility with a few Half-Life mods that like to poke inside engine's structures.
Now, the engine will expand these internal structures on demand, when user attempts to load BSP2 map. This doesn't fix compatibility issues for these advanced HL mods, but at least allows using BSP2 from the same engine binary without recompiling anything.
👍1😁1
Спустя неделю после праздников, отдохнувши, я успел сделать пару важных изменений в Xash3D FWGS:
1. Движок больше не конвертирует
Такое поведение часто приводило к путанице, так как большинство игроков не знают про
Теперь этот механизм сокращен до конвертации только если есть оба
Как бонус,
Сгенерировать этот файл все ещё возможно со специальной командой
Второй бонус для тех кто пользуется RoDir (функция движка позволяющая разделить папки только для чтения и папки с возможностью записи): движок больше не создает тучу папок в месте для записи, а только это делает по мере необходимости.
2. Пока я тестировал это изменение на папках от Quake, я захотел попробовать загрузить новый эпизод из последнего ремастера в QuakeWrapper. Он работает нормально, примерно настолько же, насколько работали бы форки кваки времени выхода ремастера.
Карты от нового эпизода скомпилены в BSP2 формат. Xash3D поддерживает BSP2, но чтобы включить его поддержку надо специально пересобрать движок из исходного кода, что может быть пустой тратой времени даже для программиста, не говоря уже об обычных пользователях которые не знают или которым всё равно как работают эти ваши компьютеры.
Причина по которой требуется пересборка — это то, что BSP2 требует расширения некоторых внутренних структур движка. Недостаток в том, что это ломает совместимость с некоторыми хитрыми модами для Half-Life которые взаимодействуют с движковыми структурами.
Теперь движок сам автоматически расширяет эти структуры по необходимости, когда загружается BSP2 карта. Это не дает исправляет проблемы с совместимостью, но хотя бы позволяет пользоваться одной и той же сборкой движка.
1. Движок больше не конвертирует
liblist.gam в gameinfo.txt. Почти. Xash3D все ещё использует gameinfo.txt`для расширенных опций для модификаций. Ранее он генерировал этот файл из `liblist.gam если его либо не существовало, либо он был слишком старым по сравнению с liblist.gam.Такое поведение часто приводило к путанице, так как большинство игроков не знают про
gameinfo.txt и продолжают редактировать liblist.gam. Этот новый файл для них только создает шум в папке игры и некоторые модификации даже выходили в релиз с этим файлом, устаревшим или поломанным. Теперь этот механизм сокращен до конвертации только если есть оба
gameinfo.txt и liblist.gam, и второй имеет модифицирован позже, на случай если кто-то полагается на это поведение. Но в будущем и это поведение может быть окончательно удалено.Как бонус,
gameinfo.txt больше не создается для папок с Quake, что может быть удобно для тех кто использует QuakeWrapper... надеюсь это не только два человека: я и Дядя Миша. :)Сгенерировать этот файл все ещё возможно со специальной командой
fs_make_gameinfo, про которую написано в документации.Второй бонус для тех кто пользуется RoDir (функция движка позволяющая разделить папки только для чтения и папки с возможностью записи): движок больше не создает тучу папок в месте для записи, а только это делает по мере необходимости.
2. Пока я тестировал это изменение на папках от Quake, я захотел попробовать загрузить новый эпизод из последнего ремастера в QuakeWrapper. Он работает нормально, примерно настолько же, насколько работали бы форки кваки времени выхода ремастера.
Карты от нового эпизода скомпилены в BSP2 формат. Xash3D поддерживает BSP2, но чтобы включить его поддержку надо специально пересобрать движок из исходного кода, что может быть пустой тратой времени даже для программиста, не говоря уже об обычных пользователях которые не знают или которым всё равно как работают эти ваши компьютеры.
Причина по которой требуется пересборка — это то, что BSP2 требует расширения некоторых внутренних структур движка. Недостаток в том, что это ломает совместимость с некоторыми хитрыми модами для Half-Life которые взаимодействуют с движковыми структурами.
Теперь движок сам автоматически расширяет эти структуры по необходимости, когда загружается BSP2 карта. Это не дает исправляет проблемы с совместимостью, но хотя бы позволяет пользоваться одной и той же сборкой движка.
Started to write a documentation on GoldSource APIs, mostly figured out by reading Xash3D, Half-Life SDK and a lot of decompiled code.
(I'm not the best technical writer, but you still can support me by donating at https://boosty.to/a1ba)
For now, there isn't much of it, only client.dll exports and initialization process is described, but I plan to make it into a proper book through the course of this year, explaining the engine functions set, the way how prediction and lag compensation works, the SDK additions GoldSrc got, the engine behavior mods rely on, so in theory some advanced Quake fork might be able to implement it without resorting to reading decompiled code.
In the future, I want to be able to use this to drop Xash3D dependency on proprietary Half-Life SDK header files.
It is published at https://github.com/FWGS/xash3d-fwgs/tree/apidocs/Documentation/api
(I'm not the best technical writer, but you still can support me by donating at https://boosty.to/a1ba)
For now, there isn't much of it, only client.dll exports and initialization process is described, but I plan to make it into a proper book through the course of this year, explaining the engine functions set, the way how prediction and lag compensation works, the SDK additions GoldSrc got, the engine behavior mods rely on, so in theory some advanced Quake fork might be able to implement it without resorting to reading decompiled code.
In the future, I want to be able to use this to drop Xash3D dependency on proprietary Half-Life SDK header files.
It is published at https://github.com/FWGS/xash3d-fwgs/tree/apidocs/Documentation/api
👍3
Потихоньку начал писать документацию по API голдсорса, выученного по коду Xash3D, Half-Life SDK и куче декомпила.
(Технический писатель из меня так себе, но вы всё равно можете поддержать меня на Boosty, ссылка в описании группы)
Пока что ничего кроме описания экспортов и порядка инициализации client.dll не описано, но я планирую за этот год превратить это в полноценную книгу, объясняя функции движка, работу предиктинга, прочие обновления SDK, поведение движка на которое полагаются моды, чтобы в теории какой-нибудь продвинутый форк Quake мог сделать свою реализацию без оглядки на сдекомпилированный код.
В будущем, я бы хотел этим воспользоваться чтобы заменить им проприетарные заголовочные файлы, которые сейчас использует Xash3D.
Опубликовано в https://github.com/FWGS/xash3d-fwgs/tree/apidocs/Documentation/api
(Технический писатель из меня так себе, но вы всё равно можете поддержать меня на Boosty, ссылка в описании группы)
Пока что ничего кроме описания экспортов и порядка инициализации client.dll не описано, но я планирую за этот год превратить это в полноценную книгу, объясняя функции движка, работу предиктинга, прочие обновления SDK, поведение движка на которое полагаются моды, чтобы в теории какой-нибудь продвинутый форк Quake мог сделать свою реализацию без оглядки на сдекомпилированный код.
В будущем, я бы хотел этим воспользоваться чтобы заменить им проприетарные заголовочные файлы, которые сейчас использует Xash3D.
Опубликовано в https://github.com/FWGS/xash3d-fwgs/tree/apidocs/Documentation/api
GitHub
xash3d-fwgs/Documentation/api at apidocs · FWGS/xash3d-fwgs
Xash3D FWGS engine. Contribute to FWGS/xash3d-fwgs development by creating an account on GitHub.
👍5❤1
To combat an old Half-Life bug with cut-off dlights on overly scaled textures, I've introduced a radius multiplier for dynamic lights, so we can enable lighting on the neighbor surfaces as well.
This however has a problem by actually lighting up too many surfaces that do not receive any lighting, potentially hurting the performance.
... Until I found a fix for that in JoeQuake, which seems has been taken from FitzQuake, which attributes LadyHavoc, best known for DarkPlaces engine. It exactly checks whether the surfaces receive any lighting or not, which turned out to be perfect for my case here.
Below are comparison screenshots. The surfaces that are marked for lighting by flashlight are highlighted with red color.
This however has a problem by actually lighting up too many surfaces that do not receive any lighting, potentially hurting the performance.
... Until I found a fix for that in JoeQuake, which seems has been taken from FitzQuake, which attributes LadyHavoc, best known for DarkPlaces engine. It exactly checks whether the surfaces receive any lighting or not, which turned out to be perfect for my case here.
Below are comparison screenshots. The surfaces that are marked for lighting by flashlight are highlighted with red color.
Чтобы побороть древний баг Half-Life с обрезанными динамическими источниками света на масштабированных текстурах, я добавил параметр множителя радиуса у этих источников света, чтобы пометить для освещения и соседние поверхности.
Однако, такое простое решение имеет крайне серьёзный недостаток, естественно для освещения помечается слишком много поверхностей, потенциально ухудшая производительность.
И такое исправление я бы не добавлял, если в процессе исследования исходного кода JoeQuake я не нашел исправление этого недостатка, которое видимо перетекло из FitzQuake, который в свою очередь приписывает авторство LadyHavoc, разработчике DarkPlaces. Нехитрой математикой они ещё в функции отмечающей поверхности для освещения проверяют насколько они действительно освещены, что идеально подошло для моего случая.
В посте выше прикреплены скриншоты для сравнения. Поверхности отмеченные для освещения этой функции специально выделены красным.
Однако, такое простое решение имеет крайне серьёзный недостаток, естественно для освещения помечается слишком много поверхностей, потенциально ухудшая производительность.
И такое исправление я бы не добавлял, если в процессе исследования исходного кода JoeQuake я не нашел исправление этого недостатка, которое видимо перетекло из FitzQuake, который в свою очередь приписывает авторство LadyHavoc, разработчике DarkPlaces. Нехитрой математикой они ещё в функции отмечающей поверхности для освещения проверяют насколько они действительно освещены, что идеально подошло для моего случая.
В посте выше прикреплены скриншоты для сравнения. Поверхности отмеченные для освещения этой функции специально выделены красным.
👍3
