Porting maps without decompilation

From Valve Developer Community
Revision as of 00:04, 20 August 2023 by NOUG4AT (talk | contribs)
Jump to navigation Jump to search
English (en)Translate (Translate)

This article is about porting maps to Half-Life Half-Life from other GoldSrc GoldSrc games (Counter-Strike Counter-Strike, Team Fortress Classic Team Fortress Classic, Day of Defeat Day of Defeat and others). The process of porting will not be boring and monotonous. Porting one map approximately takes from 10 minutes to one hour.
Required tools:

  • RipEnt - CMD application from Zoner's Halflife Tools (ZHLT) compiler set.
  • Half-Life Half-Life game with configured AmxModX and "Weapon Factory" plugin, for convenient and fast scattering of items on the map.
  • EntConverter

Introduction

The process of porting is creating Half-Life Half-Life items on the map - weapons, spawn points, and removing items from another game. All information about the objects on the map is stored in text form. We just need to export this information to a text file, edit it and import it back into the map. Scatter objects on the map we will be in the game itself, it is very convenient to fly around the map and in suitable places to insert weapons. We will do it with the help of AMX plugin from GordonFreeman'a -- Weapon Factory. Rename the file liblist.gam to liblist_backup.gam, it is located in the directory valve. Now download the archive below and copy all the contents into the valve directory, on all suggestions about substitutions click "Yes". The porting process itself I will demonstrate on the map for Counter-Strike -- fy_kano, the author of which is Burner. I downloaded it from gamebanana.com, you can find many interesting maps there. Go into the archive, see there the directory cstrike, go into it and unpack all the contents into the directory valve, it is located in the directory with the Half-Life game (for example, D:\Games\Steam\steam\steamapps\common\Half-Life). Unpack the contents, but not the cstrike directory itself.

At the first launch of the map in Half-Life game I got the error "Mod_NumForName: models/winebottle.mdl not found".

Подобные ошибки появляются, когда используемый ресурс (модель, звук, спрайт) не был найден. Есть два способа решения этой пробелемы. Первый способ -- скопировать используемые ресурсы карты из игры Counter-Strike в Half-Life. Второй способ -- удалить или заменить сведения об объектах из ent файла, в этом случае мы удалим объект на карте или просто заменим свойства объекта, и игра не станет его искать, либо загрузит другой файл. С этим способом нужно быть аккуратным и учитывать особенности карты, т.к. некоторые объекты могут быть очень важны. Если на карте есть какой-либо вертолет, дерево, бутылка, человек, то он может пропасть.

Рассмотрим второй способ, т.к. экспортировать сведения об объектах нам все равно придется. Для этого воспользуемся приложением RipEnt. В архиве, что я дал, имеется два bat файла, необходимо открыть их и исправить имя карты на свое, сохранить и запустить ripent_export.bat

После запуска, у нас появится новый ent файл с названием нашей карты. Открываем этот файл и удаляем ненужные объекты, каждый объект начинается с открывающей фигурной скобки "{", и заканчивается "}", между скобками находятся различные директивы со свойствами. Директива "classname" это название объекта, мы будем работать лишь с некоторыми:

cycler_sprite -- модель или спрайт на карте. env_sprite -- спрайт на карте (огонь или какой-то эффект). info_player_deathmatch -- точка спавна игроков в мультиплеере. В Counter-Strike точка спавна террористов. info_player_start -- точка спавна игрока в одиночном режиме. В Counter-Strike точка спавна спецназовцев. game_player_equip -- объект позволяет экипировать игрока нужным оружием. ambient_generic -- звук на карте.

На карте fy_kano я убрал все cycler_sprite, game_player_equip, и оставил по одному info_player_deathmatch и info_player_start, остальные спавны будут расставляться по всей карте. Также я переместил некоторые стандартные файлы из cstrike в valve. После редактирования ent файла, его нужно импортировать обратно, для этого в архиве есть ripent_import.bat. Импортируем свойства объектов, кидаем карту в папку valve/maps и пробуем запустить ее в игре.

После запуска можно заметить отсутствие различного оружия и предметов.

Теперь воспользуемся плагином "Weapon Factory". Вводим в консоли "wp_spawn" и видим появившееся слева меню.

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

Помимо оружия и патронов, не забываем расставить места спавна игроков. В плагине "Weapon Factory" объекта info_player_deathmatch нет, вернее он есть, но не работает. Я обычно использую монтировку в качестве точки спавна, в текстовом файле entity потом можно исправить weapon_crowbar на info_player_deathmatch.

После того, как расставили все предметы и точки спана, перезагружаем карту ("restart" в консоли) и видим уже, что наша карта полна предметами. Но портирование на этом не закончено, все эти предметы хранятся в базе данных плагина "Weapon Factory", а нам нужно внедрить все предметы в саму карту.

Теперь нужно конвертировать данные "Weapon Factory" в данные, которые можно спокойно импортировать в карту. Переходим в директорию valve\addons\amxmodx\configs\weapon_factory, в ней должен находится ini-файл с названием нашей карты, в моем случае fy_kano.ini. Для конвертации воспользуемся моим конвертером EntConverter, копируем файл ent_converter.exe в директорию с ini файлами valve\addons\amxmodx\configs\weapon_factory и запускаем его. После этого должен появится ent-файл с названием нашей карты, в моем случае это fy_kano.ent, все содержимое этого файла нужно дописать в ent-файл, который мы экспортировали с помощью RipEnt.


Не забываем про наш костыль. Нужно заменить weapon_crowbar на info_player_deathmatch. В некоторых случаях игроки могут появиться в земле, поэтому нужно увеличить z-координату (высоту) объекта, не забываем, что числа могут быть отрицательными.

После сохранения конечного ent-файла, его нужно импортировать в карту, для этого нужно запустить файл "ripent_import.bat". Карта успешно портирована из Counter-Strike в Half-Life. Можно проверить, все ли работает. Перед этим не забываем удалить liblist.gam и переименовать liblist_backup.gam обратно в liblist.gam, этим самым мы отключим AmxModx и плагин "Weapon Factory", если этого не сделать, то все раскиданные нами предметы будут дублироваться.

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

External Links