		Введение.

Поскольку Xash3D является Half-Life совместимым движком, то все описанные нововведения будут даны применительно к
движку GoldSrc, как преимущества Xash3D над первым.

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

		Основные лимиты.
		
В отличие от GoldSrc основные лимиты Xash3D являются не только более высокими, но и гибко настраиваемыми при помощи
конфигурационного файла gameinfo.txt.
MAX_EDICTS 600 - 4096 штук. (против 900 в half-life).
MAX_TEMPENTS 300 - 2048 штук (против 500 в half-life).
MAX_PARTICLES 1024 - 8192 штук (против 4096 в half-life).
MAX_BEAMS 64 - 512 штук (против 64 в half-life)
Сознательное уменьшение лимитов поможет сэкономить память в тех модах, где не требуется большое кол-во эдиктов.
Так же параметр MAX_EDICTS передается с сервера при сетевой игре, что автоматически подстраивает клиента под
новые условия.

		Прочие лимиты.

Данные лимиты зашиты внутри движка и не могут быть изменены пользователем.
MAX_VISIBLE_PACKET 512 - энтить (256 в half-life).
MAX_MODELS 2048 уникальных моделей (включая спрайты и бмодели)
MAX_SOUNDS 2048
MAX_SENTENCES 2048 (1534 в half-life)
MAX_USER_MESSAGES 191 (128 в half-life WON-версии)
MAX_TEXTURES 4096 (из них 2048 может использоваться для VGUI)
MAX_MESSAGES 2048 (1024 в half-life) (кол-во сообщений в titles.txt)
максимальные размеры для индексированных текстур: 1024х1024 (против 512х512 в half-life)
максимальные размеры для полноцветных текстур: 4096x4096.

		Лимиты для BSP-моделей.

#define MAX_MAP_MODELS 1024 (256 в half-life)
#define MAX_MAP_LEAFS 32767 (8192 в half-life)
Примечание: остальные лимиты для BSP-моделей настраиваются в компиляторе и никак не зависят от движка.

		Масштабирование студиомоделей.
В моде Spirit Of Half-Life была введена интересная возможность контроля за видимыми размерами любой студиомодели,
подобно спрайтам, через переменную scale. Одна данная возможность никак не затрагивала физическую оболочку модели.
В 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.

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

		Заключение

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