Introduction.

As far as Xash3D is Half-Life compatible engine, all the innovations will be given in relation to
GoldSrc engine, as Xash3D advantages over it.

------------------------------------------------------------------------------------------------------------------

Main limits.

Unlike GoldSrc main Xash3D limits are not only higher but also customizable in the configuration file gameinfo.txt.
MAX_EDICTS 600 - 4096. (against 900 in half-life).
MAX_TEMPENTS 300 - 2048 (against 500 in half-life).
MAX_PARTICLES 1024 - 8192 (against 4096 in half-life).
MAX_BEAMS 64 - 512 (against 64 in half-life)
Conscious reduction of the limit will save memory in mods that not require a large number of edicts.
Also, limit MAX_EDICTS transmitted from the server in network game, which automatically adjusts the client under
new conditions.

Other limits.

This limits is inside of the engine and cannot be changed by user.
MAX_VISIBLE_PACKET 512 - entities (256 in half-life).
MAX_MODELS 2048 unique models (including sprites and bmodels)
MAX_SOUNDS 2048
MAX_SENTENCES 2048 (1534 in half-life)
MAX_USER_MESSAGES 191 (128 in half-life WON-version)
MAX_TEXTURES 4096 (2048 of tem can be used by VGUI)
MAX_MESSAGES 2048 (1024 in half-life) (amount of messages in titles.txt)
Max resolution for indexed textures: 1024х1024 (against 512х512 in half-life)
Max resolution for full color textures: 4096x4096.

BSP-models limits.

#define MAX_MAP_MODELS 1024 (256 in half-life)
#define MAX_MAP_LEAFS 32767 (8192 in half-life)
Note: The remaining BSP-models limits are set by the compiler and doesn't depend on the engine.

Studio models scaling.
In Spirit Of Half-Life mod was introduced the interesting possibility of control the visible size of any studio model,
like sprites, by "scale" variable. This possibility does not affect the physical parameters of the model.
В Xash3D есть возможность учитывать это обстоятельство. Включение масштабирования студиомоделей осуществляется
через консольную переменную "sv_allow_studio_scaling" "1". Данная переменная сохраняет своё значение в config.cfg
а также распространяется по сети на всех игроков при мультиплеерной игре.

Получение углов аттачмента на сервере.

Как известно движковая функция GET_ATTACHMENT не возвращает углы для аттачмента (данная возможность просто отсутствует
как в движке, так и в компиляторе моделей). Xash3D позволяет частично исправить это положение, вернув в качестве углов
аттачмента направление от кости до аттачмента, которое считается вектором forward и полностью совпадает с тем вектором,
который вы можете видеть в half-Life Model Viewer (любой версии) если включить там просмотр аттачментов.
Данная возможность может пригодится для реализации таких вещей, как хеадкраб, спрыгивающий с мертвого зомби,
реалистичное положение лазерного прицела на viewmodel и прочих аналогичных, где важно получить углы аттачмента.
По умолчанию опция отключена, включается при помощи консольной переменной "sv_allow_studio_attachment_angles" "1".
Аналогично предидущей также сохраняет своё значение в config.cfg, но никак не влияет на клиент.

Реалистичные значения освещения на сервере.

Xash3D позволяет получить более актуальное значение текущего уровня освещенности, поскольку учитывает лайт-стили
и их текущие значения. В дальнейших версиях, также планируется обеспечить подсчет яркости у различных энтить
для фонариков остальных игроков (например в мультиплеере). А освещенность игрока берется непосредственно из рендерера
и учитывает все типы освещения, включая entity light и dynamic light.

Сохраняемая камера (trigger_camera)

Как известно в Half-Life камера не восстанавливается при сохранении\загрузке, что может помешать игрокам
просмотреть ту или иную скриптовую сценку, либо помешать задумке автора мода. В Xash3D это успешно устранено.
Теперь любая камера в любом моде будет сохранена и восстановлена после с загрузки сейва.

Улучшенное сохранение декалей

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

Поддержка технологии entity patch

Данная технология позволяет загружать энтити для выбранной карты из внешнего скрпита с расшириением .ent
Данный скрипт может быть изготовлен как внешней программой ripent.exe так и внутренними средствами самого
движка при помощи команды entpatch <имя карты>. Если команда entpatch введена при уже загруженной карте,
то она автоматически создаст entity patch для текущей.

Поддержка различных форматов карт

Xash3D поддерживает следующие форматы BSP-карт: Quake 1, Half-Life, Half-Life Blue Shift. Помимо этого имеется
поддержка внешних бмоделей как в Quake1 (модели аптечек, патронов).
Примечание: карты от Quake1 лучше использовать в моде deathmatch classic, чтобы предотвратить застревания игрока
из-за несовпадения размеров хулла в Half-Life и Quake. Кроме того, в DMC имеется полный набор энтить, которые
требуются для полноценного deatmatch на этих картах.

Поддержка горячего прекшинга моделей и звуков

Xash3D позволяет кэшировать модели прямо на лету, во время игры, что позволяет избежать надоедливой ошибки
PF_PRECACHE_ERROR. Так же Xash3D не вылетает с ошибкой, если модель или звук не были найдены.

Безопасная передача пользовательских сообщений на клиент

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

Безопасный чейнджлевел.

Перед тем как перейти на следующую карту Xash3D проанализирует её состояние (не выгружая текущей) и сделает вывод,
возможен ли нормальный ченйджлевел. В случае какой-либо ошибки на следующей карте в консоль будет выведено
соответствующее сообщение, а сама карта загружена не будет. Кроме самой ошибки будет также присутствовать рекомендация
по её устранению, что несомненно облегчит жизнь мапперам, поскольку ошибка смены уровня, является как правило
наиболее трудноустранимой и малопонятной. В некоторых случаях Xash3D может самостоятельно отключить smooth changelevel
и включить классический чейнджлевел как в Quake. Соответствующее сообщение об ошибке так же будет выведено в консоль.

Встроенные титры

движковая функция pfnEndSection при подаче в нее ключевого слова oem_end_credits выводит на экран титры, а по их
окончании вызывает функцию окончания игры.
Код самих титров находится в menu.dll и может быть изменен пользователем на его усмотрение.

Рекурсивный поиск видимых энтить

Xash3D поддерживает рекурсивный поиск видимых энтить на сервере, при добавлении их в visible-list для клиента.
Пример реализации такого поиска можно посмотреть в SDK в функциях SetupVisibility и AddToFullPack (client.cpp).

Более стабильная физика для MOVETYPE_PUSH

В Xash3D объекты на движущихся платформах ведут себя более устойчиво и не съезжают при резких поворотах.


Новый тип физики MOVETYPE_COMPOUND

Позволяет приклеить одну энтить к другой с учтом вращения и перемещения первой. Пример реализации в SDK - стрела
арбалета, которая правильно аттачится к func_pushable, func_rotating, func_tracktrain и прочим брашевым моделям.

Остановка времени

В движке предусмотрена возможность остановки времени консольной командой playersonly (аналогичная команда есть
в Unreal Engine). Данная команда замораживает как клиентскую, так и серверную физику кроме игрока.
Это может понадобится для снятия скриншотов, либо для проверки поведения физики на стабильность и прочих
отладочных вещей.

Прозрачная файловая система

Xash3D полностью игнорирует поле "wad" в карте и не ругается, в случае если какой-либо из вадов не был найден.
В GoldSrc положение осложнялось еще и тем, что движок требовал вады, не проверяя, требуются ли данной карте
какие-либо текстуры из них. Т.е. была нередкой ситуация, когда Half-Life требовал какой-либо вад к данной карте
просто "от балды", хотя он ей совершенно не требовался. Кроме этого была добавлена возможность грузить текстуры
из wad-файлов при помощи функции pfnLoadFileForMe на сервере и COM_LoadFile на клиенте и в меню.
Просто укажите имя текстуры в wad-файле и движок найдет её самостаятельно. Вы также можете указывать желаемый
wad в пути, если хотите грузить данную текстуру непременно из этого файла. Пример: "gfx.wad/conback".

Автокомплит в консоли

Xash3D обладает мощной системой автокомплита консольных команд, что позволяет выводить не только их списки,
но и короткие описания каждой из команд прямо в процессе поиска. Для большего удобства можно набрать в консоли
makehelp и движок автоматически сгенерирует файл help.txt со списком всех консольных команд и переменных и их
кратким описанием. Также поддерживается автокомплит для имени карты, видеофайла, бэкграунд-трека, скриптовых файлов
cfg, имени сейва, имени оружия (для команды give), для тестирования звуков (команда play) и для смены игровой
директории (папки мода).

Движок без привязки к базовой папке

Как известно, большинство Quake-движков жестко привязаны к родительской папке с определенным именем, что не имеет
значения при создании мода, но очень неудобно, если вы хотите создать тотальную конверсию и игры, и как следствие -
заменить родительскую папку. Xash3D не имеет привязки к определенной папки и родительская папка определяется
при помощи лаунчера - небольшого exe-файла, где она и прописана. Таким образом вы можете создавать свою игру,
никак не зависящую от Half-Life.

Полноценная консоль dedicated-сервера

Для консоли выделенного сервера работает автокомплит в полном объеме,а также поддерживается сохранение истории
введенных команд, в рамках текущей сессии.

Цветные консольные сообщения

Xash3D поддерживает систему цветных префиксов консольных сообщений, которая впервые появилась в Quake3.
Данная система предполагает введение префикса ^ совместно с цифрой от 0 до 7, где цифра обозначает собою номер
встроенного цвета. 0 - черный, 1 - красный, 2 - зеленый, 3 - желтый, 4 - синий, 5 - голубой, 6 - пурпурный, 7 - белый.
Данная таблица цветов полностью совместима с Quake3 и действует аналогично - строка будет раскрашена полностью,
либо до перевода каретки, либо до отмены цвета при помощи управляющего кода ^7. Данная система работает также
в меню и применима для раскрашивания ников игроков.
Примечание: поддержка данной системы для VGUI включается при помощи консольной переменной "vgui_colorstrings" "1"

Система auto-levelshots

Движок поддерживает систему персональных левелшотов для каждого уровня. Чтобы активировать её наберите в консоли
"allow_levelshots" "1". Сами скриншоты Xash3D создаст автоматически, но вы, конечно, можете заменить их на свои
собственные.

Поддержка бэкграундных карт

Бэкграунд-карты, это карты, выводимые вместо заднего фона меню. Подобную систему вы могли видеть в Half-Life 2.
Ксаш предлагает чуть более упрощенную систему - выбор карты происходит не в связи с пройденным эпизодом (поскольку
в Half-Life нету системы эпизодов), а случайным образом из предоставленного списка.
Файлик со списком бэкграундных карт должен называться chapterbackgrounds.txt и лежать в папке scripts (если такой
папки у вас нету - просто создайте её). Имя каждой следующей карты должно начинаться с новой строки.
Пример:

с1a1a
c2a1
c4a3
c2a5
c0a0

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

Интерполяция спрайтов

Включена по умолчанию. Предполагает более плавную анимацию спрайтов с rendermode texture и additive.
Включить\выключить её можно при помощи консольной переменной "r_sprite_lerping".
Примечание: чтобы интерполяция работала правильно, серверная скорость смены кадров должна быть ровно 10 FPS
(независимо от заданного FPS самого спрайта в pev->framerate). Данный параметр обусловлен временем тчинка
функции смены кадров спрайта в 0.1 секунду и неизменен для подавляющего большинства модов.

Интерполяция лайтстилей

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

Поддержка светящихся текстур luma (Quake-style)

Данные текстуры вы можете наблюдать на картах оригинального quake, как светящиеся области на текстуре.
Поскольку данная фишка полностью обусловлена особенностями палитры самого Quake, то движок включает её
именно для текстур, имеющих полностью аналогичную палитру из Quake или Quake2. Данная палитра отлично
сохраняется при простом конвертировании текстур из wad2 в wad3, что можно наблюдать, например, на карте
qstyle от Scrama.

Улучшенное освещение моделей и спрайтов

Улучшенное освещение моделей включает себе покостное освещение от статических и динамических источников света,
а также правильное освещение моделей на всём этапе выполнения слишком длинных секвенций, когда модель
уезжает достаточно далеко от своего реального местоположения. Пример: forklift.mdl
Освещение для спрайтов предполагает собой правильное освещение всех спрайтов, у которых при компиляции был
указан тип "alphtest" и в игре не назначен rendermode additive. Так например брызги крови берут окружающее
освещение и не светятся в полной темноте.
И для моделей и для спрайтов освещение берется не только из мирового пространства, но и с ближайщей брашевой
модели, если таковая имеется.
Примечание: если улучшенное освещение дает неправильные результаты в некоторых играх, вы можете его выключить
при помощи команды "r_lighting_extended" "0"

Плей-лист для стандартных бэкграунд-треков

Как известно, в Half-Life имена mp3 файлов, которые пришли на смену AudioCD-трекам жестко захардкодены внутри
движка и не могут быть изменены. В Xash3D для этих треков автоматически создается плей-лист, в который вы можете
вписывать собственные треки либо ключевое слово "blank" - если трека нет. Плейлист находится в папке media
c именем audiocd.txt

Поддержка сейв-шотов и демо-шотов.

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

Поддержка модели игрока в меню.

Взамен обычной картинки игрока вы можете наблюдать его полноценную 3д-модель в меню и отслеживать применение всех
настроек на месте.

Динамическая смена скайбокса.

вы можете менять скайбокс прямо во время игры стандартной командной "sv_skyname", например при помощи CVAR_SET_STRING.
Данное изменение также будет успешно сохранено в сейв и восстановлено при загрузке. Так же вы можете менять скайбокс
командной "skyname". Данная команда полностью аналогична команде "sv_skyname", но работает только для локального клиента
и, соответственно, не пишется в сейв.

Моргание монстров на поездах и лифтах

В Xash3D полностью устранено надоедливое мигание монстров, находящихся на поездах или лифтах, при движении последних.
Данное исправление работает на всех модах и никак не пересекается с аналогичными исправлениями в некоторых модах,
например в поздних версиях SoHL:Custom Build.

Более эффективная система куллинга невидимых поверхностей

В Xash3D используется более эффективная система куллинга, что позволяет повысить общий FPS и понизить r_speeds.
Так же, кроме команды "r_lockpvs", вы можете использовать команду "r_lockcull", чтобы оценить эффективность работы
куллинга. Кроме этого движок поддерживает систему т.н. static-брашей, при которой любая бмодель, при условии,
что она имеет rendermode = normal, нулевые координаты и нулевые углы вращения, автоматически становится частью
мира и рисуется вместе с основными мировыми полигонами, что на картах, перегруженных детализацией, при помощи
func_wall даёт ощутимый прирост в производительности (как пример - карта Dm-knot от Scrama). Однако данная система
может давать ощутимый z-fighting для некоторых карт старого образца, созданных в Worldcraft Editor или Valve Hammer
Editor, которые используют целочисленные координаты для положения всех объектов на карте. В этом случае систему
статик-брашей рекомендуется отключить при помощи консольной команды "gl_allow_static" "0".

Просмотр атласов загруженных текстур

Вы можете видеть уже загруженные текстуры при помощи отладочной команды "r_showtextures". При различных её значениях
движок показывает различные группы текстур. 1 - системные текстуры, сгенерированные движком автоматически.
2 - текстуры меню и худа. 3 - текстуры, использованные на карте. 4 - кадры всех загруженных спрайтов.
5 - текстуры для всех загруженных студиомоделей. 6 - лайтмапы. 7 - декали. 8 - текстуры, загруженные VGUI.
9 - текстуры для скай-бокса.

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

Автоматическая сортировка полупрозрачных поверхностей

Данный метод гарантирует, что все полупрозрачные поверхности будут рисоваться в правильном порядке, по удалению от
наблюдателя, что не гарантируется в Half-Life.

-------------------------------------------------------------------------------------------------------------------

Заключение

Данный список будет обновляться по мере появления новых особенностей.