Half-Life 2 Guide

Invisible walls for Half-Life 2

Invisible walls

Overview

Невидимые стены и как менять их свойство

Tool textures

Кисти мира и так называемые служебные текстуры, из них состоит основная геометрия карты. Имеют различные характеристики, есть несколько разновидностей.
developer.valvesoftware.com/wiki/Tool_textures:ru
Нас интересуют те которые невидимы в обычных условиях и располагаются на открытом пространстве, не позволяя игрокам пройти дальше.
TOOLSCLIP блокирует любых персонажей в том числе и игрока, TOOLSNPCCLIP блокирует NPC но не игрока, TOOLSPLAYERCLIP блокирует только игрока.
Можно сделать их видимыми с помощью команды консоли r_drawclipbrushes 2
TOOLSCLIP будет иметь красную окраску, TOOLSNPCCLIP синюю,
TOOLSPLAYERCLIP розовую.

Lumps

Как правило карты в игре представляют собой bsp файлы.
developer.valvesoftware.com/wiki/Source_BSP_File_Format:ru
В них содержится множество файлов lump, кусков или комков.
То что нам скоро понадобится это LUMP_BRUSHES
Откройте bsp карты в программе GCFScape и извлеките файл xxxxxx_l_18.lmp
В некоторых играх карты имеют такой формат,
что в этой программе не видно большинство lumps.
В данном случае пригодится программа developer.valvesoftware.com/wiki/VIDE
которую можно взять на официальном вебсайте riintouge.com/VIDE
Нажмите Tools, выберите BSP Info и откройте в нем вашу карту
Далее нажмите в левой колонке слово Brushes и извлеките 18 lump

Изменение свойств

Теперь нам понадобится программа Hex Editor, которую можно взять отсюда
mh-nexus.de/en/downloads.php?product=HxD
Откройте в нём xxxxx_l_18.lmp и посмотрите как красиво строение 18 комка
Он состоит из 12 байтных последовательностей, где последние 4 байта придают свойство
Например если вы желаете что бы все TOOLSPLAYERCLIP
отныне вели себя в игре как TOOLSNPCCLIP,
то просто замените все 00 00 01 08 на 00 00 02 08
вот как выглядят последние 4 байта служебных текстур в этом файле
“TOOLS/TOOLSSKIP” 00 00 00 00
“TOOLS/TOOLSPLAYERCLIP” 00 00 01 08
“TOOLS/TOOLSNPCCLIP” 00 00 02 08
“TOOLS/TOOLSCLIP” 00 00 03 08
“TOOLS/TOOLSINVISIBLELADDER” 08 00 00 30
“TOOLS/TOOLSINVISIBLE” 08 00 00 10
“TOOLS/TOOLSNODRAW” and “TOOLS/TOOLSSKYBOX” and … 01 00 00 00
как известно TOOLS/TOOLSSKIP не блокирует путь никаким персонажам,
поэтому можно заменить 00 00 01 08 на 00 00 00 00

Исправление уровня

Как сделать что бы эти изменения появились в игре.
Когда идет загрузка уровня то читается bsp файл карты
а также и lump файлы если таковые тоже имеются в папке maps
начинать надо всегда с числа 0
например если положить _l_18 то игра его проигнорит
также если в самих архивах игры уже есть _l_0
то если положили _l_0 в папку maps он тоже не применится
так как приоритет остаётся у того файла который лежит в архиве,
но если переименовать свой файл _l_0 на _l_1 тогда
сделанные вами изменения вступят в силу,
также вовсе нет надобности перезаходить в игру
что бы увидеть изменения, достаточно перезапустить уровень
или произвести загрузку сохранения,
что случится если вдобавок положить ещё и _l_2
игра прочитает его после _l_1 и _l_2 окажется в приоритете
lump файлы читаются последовательно,
если были положены _l_1 и _l_5 то _l_5 останется без внимания
Опять таки не все игры читают lump файлы
в таком случае придется воспользоваться программой VIDE
выберите опцию BSP Info и откройте например карту xxxxx.bsp
найдите линию Brushes и после клика нажмите кнопку Replace,
выберите файл xxxxx_l_18.lmp и нажмите кнопку Open
этим способом вы измените lump в самом файле bsp
минус этого способа в том что на эту карту
не на своём сервере вам не удастся зайти,
и другой игрок так же не будет в состоянии
попасть на эту карту на вашем сервере

Invisible ladders

Большинство стен зданий в игре основаны на TOOLS/TOOLSNODRAW
и вдобавок покрыты текстурами на поверхности
если бы не было TOOLS/TOOLSNODRAW то они бы не имели твёрдости
можно придать им свойство невидимой лестницы
для этого заменяем все 06 00 00 00 01 00 00 00 на 06 00 00 00 08 00 00 30
лучше не делать просто замену 01 00 00 00 на 08 00 00 30
так как в некоторых местах поверхность земли будет замедлять ваше движение
а более качественная замена приведёт к тому что
в основном только стены зданий приобретут свойство невидимой лестницы
к сожалению такая возможность работает не во всех играх и не в этой игре тоже,
но прекрасно работает в Left 4 Dead и Left 4 Dead 2

Skyboxes

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

Walking through skyboxes

Собственно сам метод который делает это возможным.
Откройте bsp файл выбранной карты в программе bsp source developer.valvesoftware.com/wiki/BSPSource
и декомпильте в vmf файл,
создайте его копию с другим названием
например оригинал это xxxxx_d.vmf а его копия это xxxxx_m.vmf
теперь отредактируйте копированный файл в программе Notepad++
скачать можно в этом месте notepad-plus-plus.org
замените все случаи “tools/toolsskybox” на “tools/toolsnpcclip”
теперь компильте оба vmf файла в Hammer со следующими настройками
run BSP normal, run VIS no, run RAD no
hammer.exe находится в папке bin
а также снимите отметки с rebuild areaportals, reallocated areaportals, rebuild occluders
в результате вы получили два bsp файла, теперь откройте их в программе GCFScape
извлеките из папки lumps xxxxx_d_l_18.lmp и xxxxx_m_l_18.lmp
откройте эти два файла в программе Hex Editor и выберите сравнить их
также извлеките xxxxx_l_18.lmp из bsp файла не компиленой карты
и откройте его в другом окне программы Hex Editor
первое время все адреса те же самые и разница в 4 байтных последовательностях
_d_l_18 lump показывает 01 00 00 00 и _m_l_18 lump показывает 00 00 02 08
в другом окне вам нужно заменить по этим адресам 01 00 00 00 на 00 00 02 08
спустя какое то время может случиться что адреса перестанут быть теми же
причина в том что после декомпила в bsp source
vmf файл не имеет “tools/toolsinvisibleladders” solids …
поэтому в месте где этот solid был пропущен появилось смещение
ранее чем приступить к редактированию следует сначала исправить все смещения
метод это искать последовательности байт xx xx xx xx xx xx xx xx 08 00 00 30
в xxxxx_l_18.lmp файле
и вклеить эти последовательности (ctrl+v опция)
по тем же самым адресах где их нашли
в xxxxx_d_l_18.lmp и в xxxxx_m_l_18.lmp файлах
теперь вы можете легко отредактировать xxxxx_l_18.lmp файл

Entities

Ещё нам интересен LUMP_ENTITIES, который содержит все имеющиеся на карте сущности
developer.valvesoftware.com/wiki/List_of_base_entities
Внося в него изменения можно менять их состояние и расположение на карте
Самые распространённые параметры, некоторые из них являются обязательными
“origin” “x y z” координаты где будет находиться сущность
“angles” “a b c” под какими углами она расположена
“classname” “xxxxx” к какому классу относится
“Solidity” “1” какую твёрдость имеет
После внесения изменений необходимо исправить первую строчку
она содержит некую сумму всего имеющегося
если этого не сделать то игра откажется загрузить уровень
Воспользуйтесь утилитой для корректировки которую можно взять здесь developer.valvesoftware.com/wiki/Lump_file_format
Или сделайте тоже самое но с помощью программы VIDE
выберите Entity Lump Editor и в появившемся окошке откройте ваш файл
внесите какое нибудь незначительное изменение и обратно поменяйте на первоначальное
это делается для того что бы программа скорректировала первую строчку
закройте окошко и нажмите Save,
на появившийся вопрос Specify custom lump size ? выберите No
теперь карту можно будет спокойно загрузить

Blockers

Видимо разработчики посчитали что невидимые стены недостаточно хорошо справляются с задачей и их одних явно недостаточно. Это является причиной того что даже после того как вы поменяли их характеристики, всё равно не получается попасть в некоторые места. Если это произошло в игре Left 4 Dead тогда дело тут скорее всего в сущностях блокираторах.
Именно они наделены полномочиями не пускать игроков туда где им не следует быть.
В Left 4 Dead 2 встречаются такие
developer.valvesoftware.com/wiki/Env_player_blocker developer.valvesoftware.com/wiki/Env_physics_blocker
как видите их можно отключить с помощью параметра InitialState
Они могут находиться или в LUMP_ENTITIES или в xxxxx_commentary.txt
Откройте в программе Notepad++ и замените все “initialstate” “1” на “initialstate” “0”
теперь они деактивированы и никак не влияют на передвижение игроков

Replacing world textures

Можно производить замену текстур на поверхностях карты. Для того что бы увидеть изменения достаточно перезагрузить уровень. Нам понадобятся xxxxx_l_6 LUMP_TEXINFO и xxxxx_l_43 LUMP_TEXDATA_STRING_DATA. Команда консоли surfaceprop покажет название и расположение текстуры на которую вы смотрите в игре. Также эта команда показывает название и расположение модели если смотреть на какой нибудь объект или предмет. Заменять можно только на те текстуры которые уже имеются на карте. Если открыть в
программе Hex Editor xxxxx_l_43 то видно что идёт последовательное перечисление имеющихся текстур из которых состоит карта. Теперь откройте в этой программе также и
xxxxx_l_6. Этот файл состоит из 72 байтных последовательностей. Здесь мы видим индексы текстур, самый первый индекс расположен на 88 адресе, в шестнадцатиричной системе счисления на 58 адресе. И так как сами последовательности состоят из 72 байт то следующий
индекс будет располагаться через 72 байта после предыдущего, в шестнадцатиричной системе счисления через 48 байт после предыдущего. В xxxxx_l_43 текстуры следует считать начиная не с 1 а с 0. Если текстура находится на 18 месте то её индекс будет равняться 12 потому что
в xxxxx_l_6 индексы показаны в шестнадцатиричной системе счисления.
Индексы уникальны для каждой карты и для другой карты они будут уже другими.
Одинаковых индексов может быть несколько, так как та же самая текстура
располагается на поверхности в нескольких местах.
Как заменить текстуру неба, TOOLS/TOOLSSKYBOX,
надо найти 04 04 00 00 xx и заменить на 00 00 00 00 yy, где xx это индекс TOOLS/TOOLSSKYBOX, а yy это индекс текстуры на которую меняете,
если же просто заменить 04 04 00 00 xx на 00 00 00 00 xx,
то это сделает TOOLS/TOOLSSKYBOX видимым.
Для остальных текстур достаточно заменить только индекс.
Другие игроки на вашем сервере не смогут увидеть сделанные вами изменения,
но вам эти изменения будут видны на любом сервере.
Ещё перед некоторыми текстурами могут иметься некие числа,
похоже они придают или означают какие то дополнительные свойства,
но обычно их нет и байты выглядят так, 00 00 00 00 xx
вот какими они бывают у некоторых текстур
TOOLS/TOOLSSKYBOX 04 04 00 00 xx
TOOLS/TOOLSHINT 80 05 00 00 xx
TOOLS/TOOLSSKIP 80 06 00 00 xx
TOOLS/TOOLSCLIP 80 04 00 00 xx
TOOLS/TOOLSNPCCLIP 80 04 00 00 xx
TOOLS/TOOLSNODRAW 80 04 00 00 xx
TOOLS/TOOLSINVISIBLE 90 04 00 00 xx
TOOLS/TOOLSTRIGGER 40 04 00 00 xx
TOOLS/FOGVOLUME 10 00 00 00 xx
TOOLS/TOOLSAREAPORTAL 00 04 00 00 xx
SKYBOX/MOUNTAIN_FIRE03 10 04 00 00 xx
SKYBOX/MOONAIRPORT 10 04 00 00 xx

SteamSolo.com