На каком языке написан half life 2

Обновлено: 05.07.2024

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

Разработка Half-Life 2 началась сразу же после выхода Half-Life. В течение большого количества времени, было сделано очень многое, многие планируемые аспекты игры были сделаны, а часть была отвергнута.

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

В этом (пилотном) уроке мы разберем простейшие действия с исходными кодами SDK, а также внесем наше первое изменение в код Half-Life 2.


Вступление

Немножко терминов

Сам по себе Source SDK — набор утилит и программ, помогающих в разработке собственных уровней и модификаций для игры, а также исходные коды Half-Life 2 и эпизодов.

Игра/Мод (Для сурса нет никакой разницы, игра это или мод :p) — скомпилированные исходные коды SDK.

Так почему же именно Source?!

  1. Модульность. Это может показаться минусом для некоторых, но почти все подсистемы движка вынесены в отдельные модули, каждый из которых может быть заменен без пересборки всего движка.
  2. Чрезвычайная гибкость. При достаточном количестве усилий вы можете сделать на Source игру абсолютно любого жанра.
  3. Движок и SDK разрабатывались огромным количеством людей, поэтому код SDK (а также утекший в сеть три раза код движка разных версий, но об этом позже ( ͡° ͜ʖ ͡°) ) состоит из множества разных стилей программирования! Я почти уверен, что именно работа с Source SDK подарила мне умение (но не желание. ) читать чужой код.
  4. Порог вхождения. Он не слишком низок и не слишком высок. Достаточно знать C++ и уметь вчитываться в документацию!
  5. К моменту появления идеи о написании туториала у автора попросту не было новой версии юнити.

Что нам необходимо?

  1. Ну прежде всего хотя бы базовые знания C++ (Достаточно знать его на уровне Си с классами).
  2. Любая Microsoft Visual Studio с Multibyte MFC Library и Microsoft Build Tools 2013 (v120/v120_xp). Чтобы не морочить себе голову, можно просто установить VS2013. или любой другой.
  3. Steam с установленным Source SDK Base 2013 [Single|Multi]player (также необходимо в свойствах "игры" установить бета-версию upstream, иначе мод будет падать)
  4. В будущем также знание HLSL, но не сейчас :)

Введение в сурс дела

Репозиторий

Исходный код SDK находится в репозитории на GitHub. Склонируйте его в любое удобное для вас место:

Выбор ветки

Если вы хотите написать свой первый мод для Half-Life 2/Episode 1/2, то используйте директорию sp/ и Source SDK Base 2013 Singleplayer.

Если же вы извращенец и хотите написать свой первый мод для Half-Life 2: Deathmatch, то используйте директорию mp/ и Source SDK Base 2013 Multiplayer.

ВАЖНО: Туториал будет рассматривать программирование под ветку SP, поэтому пути, содержащие hl2 в пересчете на MP могут содержать hl2mp вместо hl2 .

Стиль кода

Клиентские (client.dll) классы именуются с префиксом C_ , а серверные (server.dll) — с префиксом C :

Поля класса именуются с префиксом m_, использование венгерской нотации рекомендуется (на то есть свои причины, которые здесь обсуждать нет смысла):

Структура кода

SDK, так же как и движок, разделён на несколько частей.

  • client.dll
    Клиентская часть игры.
    Отвечает за рендеринг, предсказания и ввод.
    Расположена: src/game/client/
  • server.dll
    Серверная часть игры.
    Отвечает за игровую логику, ИИ и т.д.
    Расположена: src/game/server/
  • tier1.lib
    Библиотека, содержащая в себе множество полезных фич, например UTL ("валвовская" версия STL), interface convention и т.д.
    Расположена: src/tier1/
  • raytrace.lib
    Библиотека, внезапно содержащая в себе функции и типы, предназначенные для рейтрейсинга. Честно говоря, я так и не понял, что библиотека для компиляторов делает здесь.
    Используется компилятором vrad и, судя по утечкам исходных кодов, редактором уровней Valve Hammer Editor.
    Расположена: src/raytrace/
  • mathlib.lib
    Библиотека, содержащая в себе множество типов и функций, используемых в "повседневной" математике Source.
    Расположена: src/mathlib/
  • vgui_controls.lib
    Библиотека, содержащая в себе реализации разных элементов (кнопки, панели) VGUI2.
    Используется почти повсеместно.
    Расположена: src/vgui2/vgui_controls/

Source SDK имеет свой генератор проектов (sln, Makefile, etc.) с блэкджеком и… кхм…
Называется он Valve Project Creator и находится в src/devtools/bin .

Проекты генерируются автоматически с использованием специальных .VPC файлов. Синтаксис этих файлов прост до безобразия — простой набор пар ключ-значение.

Вот пути до некоторых таких файлов:

ВАЖНО: При внесении ЛЮБЫХ изменений в VPC файл решение должно быть заново перегенерировано!

Генерация проектов

Проекты генерируются вызовом скрипта, расположенного в директории src/ .
В самом простом случае — достаточно просто открыть src/creategameprojects.bat .
После генерации в src/ будет находиться games.sln.


Исключение HL2

SDK имеет внутри себя также разделение на HL2 и Episodic. Использование второго позволит нам иметь некоторые фичи, например отдельную от стамины шкалу заряда фонарика.

И поэтому, чтобы не компилировать лишний код, мы можем просто исключить HL2 из скриптов:

  1. Откройте src/creategameprojects.bat в любом текстовом редакторе.
  2. Удалите из командной строки часть /hl2
  3. Сохраните файл и сгенерируйте проект.
Другие скрипты

Рядом с creategameprojects.bat также лежит его клон для bash а также два интересных файла — createallprojects.bat и его клон для bash.

Эти два скрипта заставляют VPC создавать проекты не только для чистых библиотек мода, но и для различных утилит, таких как vrad (Radiosity!) или height2normal.

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

Первичная сборка и запуск

Сборка

Чтобы удостовериться, что вы всё сделали правильно, необходимо собрать всё сгенерированное решение. Итак, собираем (вы же ведь открыли решение в IDE?):

  1. Переключите конфигурацию в Release.
    ВАЖНО: При сборке в Debug мод крайне нестабилен.
  2. Соберите ВСЁ решение (F6)
  3. Если сборка закончилась с ошибками, повторите шаг 2.
  4. Если ошибки повторяются, пересоздайте проекты (creategameprojects) и повторите все шаги начиная с 1.

После сборки в папке game/mod_hl2/bin/ или game/mod_episodic/bin/ должны появится наши клиентская и серверная библиотеки!

Запуск — Способ 1 — Steam
  1. Копируем нашу папку mod_xxx в путь/до/Steam/steamapps/sourcemods/
  2. Перезапускаем Steam (либо запускаем, если еще этого не сделали. )
  3. Ищем в библиотеке "My First Episodic Mod" или "My First HL2 Mod"
  4. В свойствах устанавливаем дополнительные параметры командной строки:
  5. Запускаем, в консоли запускаем карту sdk_vehicles (SP) или dm_lockdown (MP)
Запуск — Способ 2 — Visual Studio

Я рекомендую использовать именно этот способ — не копировать же бинарники мода каждый раз после сборки!

  1. Заходим в свойства проекта (не решения. ) во вкладку Debugging
  2. В поле Command вписываем:
  3. В поле Working Directory вписываем:
  4. В поле Command Arguments вписываем:
  5. Сохраняем, запускаем (F5)!
  6. Запускаем, в консоли запускаем карту sdk_vehicles (SP) или dm_lockdown (MP)

Если карта загрузилась и вы можете передвигаться и двигать камеру мышью — сборка успешна!


Первая модификация в коде

Функции семейства Msg()

Функции Msg() , DevMsg() , Warning() , DevWarning() и ConColorMsg() являются чем-то вроде классического printf() , но в мире программирования под Source SDK. Эти функции так или иначе выводят какой-то текст в консоль разработчика и debug output.

Говорящий пистолет!



Half-Life 2 — научно-фантастический шутер от первого лица, разработанный Valve Corporation и выпущенный 16 ноября 2004 года после длительного пятилетнего периода развития. Игра получила высочайшие оценки многих авторитетных изданий. Помимо этого, игра собрала множество наград и более 35 титулов «Игра года 2004». Она включена в сборник The Orange Box, который вышел на таких платформах, как Xbox 360, PS3, и PC.

Невиданный ранее уровень взаимодействия игрока с внешним миром был достигнут благодаря использованию модифицированной версии физического движка Havok Physics.

Содержание

Сюжет [ ]

Действие игры происходит примерно через 20 лет после событий первой части (по подсчётам фанатов). G-man пробуждает Гордона Фримена из стазиса и перемещает в поезд, идущий в Сити 17, город в Восточной Европе. Сразу же становится понятно, что Земля захвачена инопланетной цивилизацией, именуемой Альянсом. На вокзале Барни, охранник из Чёрной Мезы и друг Гордона, спасает его от участи быть пойманным Гражданской Обороной. Он направляет его в лабораторию Кляйнера. ГО устроило облаву на Гордона и почти поймало, но его выручила Аликс и отвела в лабораторию, где Гордону выдали костюм. Далее Аликс телепортируют в Восточную Чёрную Мезу — подпольную базу Сопротивления. Гордона тоже собираются телепортировать, но всё срывает Ламарр, ручной хедкраб доктора Кляйнера. Гордон телепортировался на задний двор, Барни кидает ему монтировку, и Гордон начинает своё путешествие через каналы. В результате он попадает в Восточную Чёрную Мезу, где встречается с Аликс, её отцом Илаем и доктором Моссман. Гордону дают грави-пушку и знакомят с Псом, ручным роботом Аликс. Неожиданно идиллию обрывает нападение сил Альянса. Гордон выбирается из лаборатории и попадает в Рейвенхольм, шахтёрский городок, переполненный зомби. В нём есть лишь единственный выживший — сумасшедший священник Григорий. Он помогает Гордону выбраться из города, а сам остаётся. Гордон попадает на базу Сопротивления; выясняется, что Илая захватили в плен и держат в Нова Проспект, отряд сопротивления выдают ему машину, при помощи которой Гордон добирается до маяка. Затем он доходит до ещё одного лагеря Сопротивления, где побеждает мирмидонта и получает фероподы, при помощи которых можно контролировать солдат муравьиных львов. Гордон, не без помощи муравьиных львов, штурмует Нова Проспект и находит Аликс. Выясняется, что Моссман — предательница. Аликс и Гордон находят Илая, но Моссман обманывает их и телепортируется с Илаем. Вслед за ними телепортируются Гордон и Аликс, но ворвавшиеся в зал солдаты Альянса уничтожают телепорт во время телепортации. В результате, герои попадают в лабораторию Кляйнера через неделю после телепортации, но для них это время показалась одной секундой. За прошедшую неделю в Сити 17 началось восстание. В ходе боёв Аликс попадает в плен. Гордон находит Барни, и они вместе штурмуют Нексус Патруля и отключают инопланетную установку на крыше. Они пробиваются к Цитадели, где с помощью Пса Гордон попадает внутрь. Гордон попадает в поле конфискации, где уничтожается всё его оружие, однако, происходит сбой и грави-пушка заряжается. Заряженная грави-пушка излучает синее свечение и взаимодействует с живыми объектами. В ходе путешествия по Цитадели Гордон попадает в плен. Брин собирается телепортировать Илая и Аликс в мир Альянса, но вдруг вмешивается Моссман, которая освобождает всех. Брин бежит и собирается телепортироваться в измерение Альянса, но Гордон уничтожает телепорт. Происходит взрыв, время останавливается, и появляется G-man. Он поздравляет Гордона с выполненной работой и снова отправляет в стазис.

Персонажи [ ]

Основные [ ]

Остальные [ ]

Враги [ ]

Альянс [ ]

Оружие [ ]

  • Монтировка: Самое знаковое оружие серии, простое оружие ближнего боя, которое может быть использована для атаки врага или освобождения пути от препятствий.
  • .357 Magnum (Револьвер Colt Python): Мощное и точное, это оружие часто будет убивать врагов с близкого расстояния с одного выстрела. Тем не менее, к револьверу в игре боеприпасов мало, и он имеет низкий темп стрельбы.
  • Феропод: Взятые из стража муравьиных львов, эти шарики могут быть брошены, чтобы освободить феромоны, привлекая муравьиных львов, которые убьют всех врагов поблизости.
  • Арбалет Сопротивления: В то время, как сила стрелы очень большая, лететь она будет на маленькой скорости, поэтому часто противники будут успевать сойти с траектории полёта стрелы. Единственное оружие со снайперским режимом. Боеприпасов мало, но убивает врагов с одного выстрела; низкая скорострельность.
  • Стационарный пулемёт Альянса: Используемое Альянсом, это стационарное импульсное оружие может быть эффективно использовано для быстрой зачистки местности от врагов, однако не может быть перемещено.
  • Хоппер: Мина, взрывающаяся когда враг подходит слишком близко. Их название происходит от того, что они взлетают в воздух перед падением и взрывом.
  • MK3A2: Стандартная граната, взрывающаяся через несколько секунд после броска.
  • MP7: Полностью автоматическое, это оружие используется как Альянсом, так и Сопротивлением. Оно имеет также функцию вторичного огня, позволяющего стрелять из подствольного гранатомёта.
  • Импульсная винтовка Патруля: Импульсная винтовка, разработанная Альянсом. Её вторичный огонь выпускает энергетические сферы, мгновенно аннигилирующие врагов.
  • Ловушки Рейвенхольма: Созданные отцом Григорием, эти хитрые ловушки могут быть использованы для убийства зомби.
  • RPG Сопротивления: Стреляет ракетами, которые могут быть наведены на цель при помощи лазера. Эффективен для уничтожения воздушных целей. Интересно, что модель ракеты от вертолёта из Half life, Апача.
  • Автоматическая турель Альянса: Стационарное автоматическое оружие, стреляющее во всех приближающихся врагов.
  • SPAS-12 Альянса: Мощный помповый дробовик, стреляющий дробью. Имеет альтернативный режим стрельбы дуплетом.
  • USP Match: Обычный пистолет. Первое оружие дальнего боя, получаемое в игре.
  • Манипулятор энергетического поля нулевого уровня (Гравитационная пушка, Грави-пушка): Предназначенное для работы с опасными материалами, это оружие позволяет пользователю подбирать большинство объектов и бросать их во врагов.

Разработка [ ]

Также изначально путешествие Гордона должно было быть более разнообразным и значительно более длинным (до такой степени, что игра выглядела перегруженной, с малым уделением внимания развитию персонажей, что стало одной из причин урезания сюжета в финальной версии). Несколько уровней Сити 17 в начале игры и целые главы во второй половине игры были полностью удалены, однако некоторые всё-таки были возвращены в последующих эпизодах.

Для получения дополнительной информации о вырезанном контенте смотрите следующие статьи:

Геймплей [ ]

Игровой процесс Half-Life 2 похож на таковой у предшественника. Игрок перемещается по множеству линейных уровней, борясь с трансчеловеческими войсками, известными как Альянс, а также с враждебными инопланетными существами. Загадки и использование транспортных средств чередуются на протяжении всей игры, разбивая участки карт на боевые и разведывательные.

Так как Half-Life 2 является шутером от первого лица, игровой мир всегда подаётся с точки зрения Гордона Фримена, так что игрок невольно ставит себя на место Гордона. В нижней части экрана отображается здоровье Гордона и доступное количество боеприпасов, в то время как сверху отображается список всего носимого оружия. Здоровье и заряд костюма можно пополнять, поднимая аптечки и аккумуляторы или же пользуясь стационарными установками.

Костюм HEV является одним из основных элементов и Half-Life, однако во втором Half-Life 2 он имеет несколько другой вид, будучи улучшенным с версии IV в оригинальном Half-Life до версии V. Костюм вмещает в себя до 100 единиц энергии, которая истощается от повреждений костюма — стрельбы, радиоактивной воды и т. п. Заряжается или от стационарных зарядных устройств, или от батареек, разбросанных по всей игре.

Игрок побеждает врагов, используя ассортимент оружия от монтировки до РПГ. Арсенал игры состоит в основном из современного оружия вроде пистолета или автомата, однако игроку придётся также использовать арбалет, феромоны муравьиных львов, а также импульсную винтовку Патруля Альянса. Возможности физики движка Source полностью раскрываются при помощи гравитационной пушки. С помощью этого устройства игрок может поднимать небольшие предметы и отбрасывать их с большой силой, а также отталкивать боле тяжёлые предметы, освобождая себе путь и борясь с врагами. Грави-пушкой можно выполнять и небоевые задачи, такие как сбивание замков или возвращение на колёса перевернувшегося автомобиля.

Многие головоломки используют физический движок игры. Примером может служить складывание коробок в кучу, чтобы подняться к лазу в стене. Часто головоломки решаются при помощи грави-пушки. Например, требуется столкнуть разбитые машины с шоссе, чтобы расчистить себе дорогу.

Реакция [ ]

Half-Life

Half-Life представила миру молодого очкарика-физика, обладателя докторской степени, Гордона Фримена. Простой ассистент исследовательского центра Чёрная меса оказывается в центре космической войны, начавшейся из-за неудачного научного эксперимента с телепортацией. Инопланетные создания из далёких чужеродных мест прорываются сквозь пробитый пространственный барьер и начинают бойню в Чёрной месе. Но это только начало перед кошмаром, который ожидает Землю.

Правительственные силы быстро прибывают с целью ликвидировать инопланетную угрозу. К сожалению, они методично уничтожают и всех свидетелей происшедшего. Благодаря экспериментальному защитному костюму, у Гордона есть шанс выжить в этой путанице из монстров, персонала и смертоносных десантников. В конце-концов, он достигает и уничтожает то, что является источником вторжения монстров.

Однако победа оказалась недолгой. Героизм Гордона привлекает внимание зловещего межпространственного бюрократа, называемого Джи-меном, который помещает физика в стазис далеко от Земли, сознания и времени вообще.

Гордон возникает из ниоткуда, примерно два десятилетия спустя. Джи-мен пробуждает его, но намерения «Человека с чемоданом» остаются неизвестными. Гордон возвращён на Землю, однако эта Земля искажена до неузнаваемости инопланетными завоевателями, известными как Альянс. Гордон становится беспомощным и безликим гражданином Сити-17 — мрачного метрополиса, находящегося в том месте, которое ещё недавно было Европой.

Волею судьбы, а может из-за ловкого вмешательства Джи-мен, он вскоре становится центральной фигурой растущего движения Сопротивления, возглавляемого восставшими учеными из Чёрной месы — доктором Айзеком Кляйнером и Илаем Вэнсом. И что самое главное — Гордон снова в своем защитном костюме.

Half-Life 2: Episode One

С помощью дочери Вэнса, Аликс, и её огромного домашнего робота, Пса, Гордон отправляется в путешествие, во время которого он сталкивается с боевыми машинами Альянса, страшными инопланетянами и модифицированными людьми, исполняющими волю захватчиков. Ему удается поднять повстанцев на открытую войну с угнетателями, но он становится узником огромной крепости Альянса, называемой Цитаделью. Здесь учёный встречает ставленника Альянса, предателя человечества, доктора Уоллеса Брина. Гордон бежит и, при поддержке Аликс, ставит точку на предательстве Брина, уничтожая телепортационный реактор Цитадели.

Взрывная волна накрывает Аликс и Гордона, но вдруг появляется Джи-мен, удовлетворенный достижением своих непостижимых целей, и снова бросает свою пешку — Гордона на полку холодной бессрочной камеры хранения.

Читайте также: